質問: エクセル:複数シートのデータを一覧シートに自動的に表示させるには? エクセル:複数シートのデータを一覧シートに自動的に表示させるには? こんにちは。 以前同じ質問をさせて頂いたのですが、締め切った後で試したところ どうにもうまくいかず(試さずに締め切ってしまった私が悪いのですが・・)、 もう一度質問させていただきます。 複数シート(6シート程度)に同一形式のリストがあり、あるシートに入力していくと 同一ファイル内の「一覧シート」に自動的にid番号順に表記される(※下記参照) というようにしたいと考えております。 何かよい方法はありますでしょうか? お知恵を拝借できれば幸いです。宜しくお願い致します。 (例) sheet1 id 日付 名前 達成度・・・(項目=15項目ぐらい) 1 2010/10/17 山田 a 4 2010/10/30 鈴木 a ・ ・ ・ (それぞれのシートに100個ぐらいのリスト) sheet2 id 日付 名前 達成度・・・ 2 2010/10/17 佐藤 c 3 2010/10/20 中村 b ・ ・ ・ 一覧シート id 日付 名前 達成度・・・ 1 2010/10/17 山田 a 2 2010/10/18 佐藤 c 3 2010/10/20 中村 b 4 2010/10/30 鈴木 a ・ ・
回答: > マクロで行うとなると、どこかの(たとえば行の一番端のセル)の記入があった時に自動で実行されるというのが望ましいです。 ではそれはどの列にしたいのですか? プログラムでは、一応d列ということにしました。 変えたいのであれば、 col = "d" をいじってください。 > idは固有番号なので、複数記入されることはありません。 そういうことではなくて、人間が記入するんですよね? ということは、誤記入も可能性を考えてプログラミングしなければなりませんよね? でも、絶対にそのようなことは無いようなので、誤記入は無いものとしてマクロを作りました。 一覧シートのシート名は「一覧」にしてください。 違うものにしたい場合は、マクロの中の2箇所の「一覧」を変更してください。 また、一覧シートと、記入する複数のシート以外のシートは無いものとしています。 全然別のシートが有った場合、そのシートのd列に何かが記入されたら、マクロが走ってしまいます。 thisworkbookモジュールに、以下を書いてください。 thisworkbookモジュールとは何かは、調べてください。 private sub workbook_sheetchange(byval sh as object, byval target as range) dim col as string col = "c" if sh.name <> "一覧" then if not intersect(target, sh.columns(col)) is nothing then with worksheets("一覧") target.entirerow.copy .cells(.rows.count, col).end(xlup).offset(1).entirerow .range("a1").currentregion.sort key1:=.range("a2"), order1:=xlascending, header:=xlyes end with end if end if end sub