• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで別シートの情報の拾う方法)

エクセルで別シートの情報の拾う方法

このQ&Aのポイント
  • エクセル2010でデータシートの情報を発注日と希望納期を基にしたカレンダーシートへ自動で転記する方法を教えて頂けませんか。
  • エクセル2003の人も追加で書き込みができるようにしたいです。
  • 数式が長すぎるため、データが重くなり動作が遅くなっているため、軽いデータにする方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

まず、質問文に掲載されているリンク先ページのベストアンサーのような、万里の長城みたいな数式は、とてもじゃないですが、お勧めできません。長大・難解な数式が好きなんだとしてもアレではあんまりなので、申し訳ないけどああいう回答は見ていて腹立たしいです。あの状態ではメンテナンスもへったくれもなく、適切な Excel の使い方とは言えません。 質問者さんのオリジナルデザインの表を Excel の数式 1 本のみで実現するのは、結構厳しいです。数式を使うにしても、なるべく作業列をたくさん使うようにしましょう。表計算ソフトは、それでこそ威力を発揮します。作業列を印刷したくない場合は、印刷範囲を設定して印刷されないようにしたり、列を非表示にしたり、様々な手段があります。 さて、数式よりも、もっとラクに質問者さんが作りたい表に近いものを作るには、ピボットテーブルがベストだと考えられます。質問文添付図の上側の表に対して、ピボットテーブルウィザードを開始します。始めはとっつきにくいかもしれませんが、良かったら挑戦してみてください。マウス操作のみですが、結構、自在なデザインでクロス集計ができます。 データが重くなる心配は、ピボットテーブルの場合、全くありません。スイスイ操作できます。数式では、量が増えるとどんどん重くなりますね。 見づらいのですが、下側の表中には、「発注日」、「希望納期」という文字列を表示するのですか?この部分は、ピボットテーブルでできた表にごく簡単な数式を加えるくらいで実現できそうですね。あるいは元データの表の内容をちょっと工夫すれば、ピボットテーブルだけで一発で完成させることも可能かもしれません。 ピボットテーブルまでは、まだちょっと難しいという場合は、上側の表にフィルターを取り付けるだけでも、日付ほかの項目で抽出できますよ。日付で絞り込んだ状態で表をコピーすれば、他のシート上にそれを貼り付けて保存しておくなどできます。 ピボットテーブルにせよフィルタにせよ、マクロで作業を自動化することもできますが、まずは Excel の基本的な使い方で迷わなくなってからにしたほうがいいでしょうね。また、Excel が上手になってくると、作ろうと考える表のデザイン自体が変化してくると思います。

miutinn
質問者

お礼

ご回答ありがとうございました。 ピボットテーブル、勇気を出して挑戦してみました! 「発注日」「希望納期」という文字列の表示はやりかたがわからずできませんでしたが、考え方を変えてピボットテーブルで満足のいくデザインにはできたので、これで良しとしようと思います。 けれど、2010で作ったものを2003で同等に使えるようにするのは至難の業のようです。チェックの手間がかかって大変なので、結局2003で作り直しています(笑)

その他の回答 (1)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

カレンダーシートに自動で貼り付けることはマクロを組まない限りできないでしょう。 入力された日付の順でお望みのように表を表示させるのでしたら関数を使って対応することができます。 それにしても式をパソコンに負担を掛けない方法は作業列を使って対応することです。 お示しの表がシート1に有るとしてI2セルには次の式を入力してJ2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(G2="","",G2*100+COUNTIF($G$2:$G2,G2)+COUNTIF($H$2:$H2,G2)+IF(COLUMN(A1)=1,0,0.1)) シート2にお望みの表を作るとして1行目にはお示しのような項目名を入力します。 A2セルには次の式を入力してI2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>COUNT(Sheet1!$I:$J),"",IF(COLUMN(A1)=1,IF(ISERROR(INDEX($A:$A,MATCH(10^10,A$1:A1))),INT(SMALL(Sheet1!$I:$J,ROW(A1))/100),IF(INT(SMALL(Sheet1!$I:$J,ROW(A1))/100)=INDEX(A:A,MATCH(10^10,A$1:A1)),"",INT(SMALL(Sheet1!$I:$J,ROW(A1))/100))),IF(COLUMN(A1)=2,TEXT(OFFSET(A2,0,-1),"aaa"),IF(COLUMN(A1)=3,IF(MOD(SMALL(Sheet1!$I:$J,ROW(A1)),1)=0,"発注日","希望納期"), IF(COLUMN(A1)>=4,IF(MOD(SMALL(Sheet1!$I:$J,ROW(A1)),1)=0,INDEX(Sheet1!$A:$F,MATCH(SMALL(Sheet1!$I:$J,ROW(A1)),Sheet1!$I:$I,0),COLUMN(A1)-3),INDEX(Sheet1!$A:$F,MATCH(SMALL(Sheet1!$I:$J,ROW(A1)),Sheet1!$J:$J,0),COLUMN(A1)-3))))))) A列の表示形式は日付にし、C列からI列の表示形式は標準にします。 日にちによっては行の数が多かったり少なかったりしますのでカレンダーにそのままで表示させることには無理が有ります。

miutinn
質問者

お礼

ご回答ありがとうございました。 やってみましたが「入れ子のレベル数が上限を超えているため、数式を入力できません」と表示されてしまいました。

関連するQ&A