アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル2010でデータシート(注文発注台帳)の情報を添付画像の様に、発注日と希望納期を基本にしたカレンダーシートへ自動で転記する方法を教えて頂けませんでしょうか。
エクセル2003の人も追加で書き込みができるようにしたいです。

別の方が同じ質問をされていました。
http://oshiete.goo.ne.jp/qa/6500332.html
私は簡単なエクセル操作しかできませんので、見よう見まねで同じようにやってみたところうまくいきました。しかしこのやり方では数式が長すぎるため、データがとても重くなってしまいました。終了した部分は数式から普通の文字データへ保存し直すなど工夫をしましたが、やはり動きが遅くてとても運用できる状態ではありません。
※添付画像はサンプルの為、項目を減らしてあります。

もっと軽いデータに出来る良い方法がありましたら、教えて下さい。
よろしくお願い致します。

「エクセルで別シートの情報の拾う方法」の質問画像

A 回答 (2件)

まず、質問文に掲載されているリンク先ページのベストアンサーのような、万里の長城みたいな数式は、とてもじゃないですが、お勧めできません。

長大・難解な数式が好きなんだとしてもアレではあんまりなので、申し訳ないけどああいう回答は見ていて腹立たしいです。あの状態ではメンテナンスもへったくれもなく、適切な Excel の使い方とは言えません。

質問者さんのオリジナルデザインの表を Excel の数式 1 本のみで実現するのは、結構厳しいです。数式を使うにしても、なるべく作業列をたくさん使うようにしましょう。表計算ソフトは、それでこそ威力を発揮します。作業列を印刷したくない場合は、印刷範囲を設定して印刷されないようにしたり、列を非表示にしたり、様々な手段があります。


さて、数式よりも、もっとラクに質問者さんが作りたい表に近いものを作るには、ピボットテーブルがベストだと考えられます。質問文添付図の上側の表に対して、ピボットテーブルウィザードを開始します。始めはとっつきにくいかもしれませんが、良かったら挑戦してみてください。マウス操作のみですが、結構、自在なデザインでクロス集計ができます。

データが重くなる心配は、ピボットテーブルの場合、全くありません。スイスイ操作できます。数式では、量が増えるとどんどん重くなりますね。

見づらいのですが、下側の表中には、「発注日」、「希望納期」という文字列を表示するのですか?この部分は、ピボットテーブルでできた表にごく簡単な数式を加えるくらいで実現できそうですね。あるいは元データの表の内容をちょっと工夫すれば、ピボットテーブルだけで一発で完成させることも可能かもしれません。


ピボットテーブルまでは、まだちょっと難しいという場合は、上側の表にフィルターを取り付けるだけでも、日付ほかの項目で抽出できますよ。日付で絞り込んだ状態で表をコピーすれば、他のシート上にそれを貼り付けて保存しておくなどできます。


ピボットテーブルにせよフィルタにせよ、マクロで作業を自動化することもできますが、まずは Excel の基本的な使い方で迷わなくなってからにしたほうがいいでしょうね。また、Excel が上手になってくると、作ろうと考える表のデザイン自体が変化してくると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/06/05 13:26

カレンダーシートに自動で貼り付けることはマクロを組まない限りできないでしょう。


入力された日付の順でお望みのように表を表示させるのでしたら関数を使って対応することができます。
それにしても式をパソコンに負担を掛けない方法は作業列を使って対応することです。
お示しの表がシート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列の表示形式は標準にします。
日にちによっては行の数が多かったり少なかったりしますのでカレンダーにそのままで表示させることには無理が有ります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/06/05 13:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!