
エクセル:複数シートのデータを一覧シートに自動的に表示させるには?
こんにちは。
以前同じ質問をさせて頂いたのですが、締め切った後で試したところ
どうにもうまくいかず(試さずに締め切ってしまった私が悪いのですが・・)、
もう一度質問させていただきます。
複数シート(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
・
・
No.3ベストアンサー
- 回答日時:
横から失礼します。
>やはり関数では難しいですか・・・
作業用シートと併用すれば、関数でも可能です。
まず、例えば
作業用シート
という名称のシートを設けて下さい。
次に、作業用シートのA列に、
A1セル Sheet1
A2セル Sheet2
A3セル Sheet3
A4セル Sheet4
・ ・
・ ・
・ ・
という具合に、元リストが存在しているシートの名称を、入力して下さい。
この時、シート名を並べる順序は特に気にされなくても結構ですが、同じ名称を重複して入力する事はなさらないで下さい。(途中に空欄や、存在しないシート名が入力されていても、そのシート名を無視して、処理する事が可能です)
次に、作業用シートのC1セルに、次の数式を入力して下さい。
=IF(ISERROR(INDIRECT(INDEX($A:$A,MOD(INT(ROW()-0.5),MATCH("/",$A:$A,-1))+1)&"!IV65536")),"",IF(ISNUMBER(INDIRECT(INDEX($A:$A,MOD(INT(ROW()-0.5),MATCH("/",$A:$A,-1))+1)&"!A"&INT((ROW()-0.5)/MATCH("/",$A:$A,-1))+1)),INDIRECT(INDEX($A:$A,MOD(INT(ROW()-0.5),MATCH("/",$A:$A,-1))+1)&"!R"&INT((ROW()-0.5)/MATCH("/",$A:$A,-1))+1&"C"&COLUMNS($A:A),0),""))
次に、作業用シートのB1セルに、次の数式を入力して下さい。
=IF(ISNUMBER($C1),$C1+COUNTIF($C$1:$C1,$C1)/COUNTIF($C:$C,$C1),"")
次に、作業用シートのB1~C1の範囲をコピーして、同じ列の2行目以下に、全ての元リストの行数の合計を、上回るのに充分な行数に、貼り付けて下さい。
そして、作業用シートのC列全体をコピーして、C列よりも右にある列に貼り付けて下さい。(例えば、元リストがO列まである場合には、それよりも2列多い、Q列にまで貼り付けて下さい)
次に、一覧シートの
A1セルに「ID」、
B1セルに「日付」、
C1セルに「名前」、
D1セルに「達成度」、
と入力して下さい。
次に、一覧シートのA2セルに、次の数式を入力して下さい。
=IF(ROWS($1:1)>COUNT(作業用シート!$B:$B),"",VLOOKUP(SMALL(作業用シート!$B:$B,ROWS($1:1)),作業用シート!$B:$IV,COLUMNS(作業用シート!$B:C),0))
次に、一覧シートのA2セルをコピーして、同じ行のA列よりも右にあるセルに貼り付けて下さい。(例えば、元リストがO列まである場合には、O列にまで貼り付けて下さい)
次に、B2セルの書式設定の表示形式を、日付にして下さい。
最後に、作業用シートの2行目をコピーして、3行目以下に貼り付けて下さい。
これで準備は完了です。
後は、作業用シートのA列に名称を入力した、各シートの元リストにデータを入力すると、そのデータが自動的に一覧シートに、ID順に表示されます。
ありがとうございます!!
すごい、関数でできるのですね。
ただ、やってみたところ私の作業用PCのスペックでは、再計算に
時間がかなりかかるようです。。
データが多いのでしょうがないですね。
やはりマクロで作成する方が後々を考えるとよいのかもしれません。。
No.2
- 回答日時:
> マクロで行うとなると、どこかの(たとえば行の一番端のセル)の記入があった時に自動で実行されるというのが望ましいです。
ではそれはどの列にしたいのですか?
プログラムでは、一応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
マクロをお教えいただきありがとうございました。
かなり不慣れなので、ひとつひとつ勉強しながら
教えていただいたものを活用させて頂きたいと思います。
No.1
- 回答日時:
6シート程度からとなると、マクロでしょうね。
データを記入した後に、「コピー」「並べ替え」という作業をおこなうことになりますが、
マクロを実行するタイミングはいつですか?
記入者が記入後にマクロ実行ボタンを押す?
それとも、どこかの列が入力されたら、自動でマクロを実行?
入力データ数が決まっている(すべての欄を埋める)のであれば、すべてが埋まったら、自動でマクロを実行?
同じIDが複数記入された場合の処理は?
同じIDが複数記入されてはいけないから、そのときはエラー?
それとも、上書き?
この回答への補足
早速の回答誠にありがとうございます。
やはり関数では難しいですか・・・
補足致します。
>マクロを実行するタイミングはいつですか?
>記入者が記入後にマクロ実行ボタンを押す?
>それとも、どこかの列が入力されたら、自動でマクロを実行?
>入力データ数が決まっている(すべての欄を埋める)のであれば、すべてが埋まったら、自動でマクロを実行?
マクロで行うとなると、どこかの(たとえば行の一番端のセル)の記入
があった時に自動で実行されるというのが望ましいです。
>同じIDが複数記入された場合の処理は?
>同じIDが複数記入されてはいけないから、そのときはエラー?
それとも、上書き?
IDは固有番号なので、複数記入されることはありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Visual Basic(VBA) 【ExcelVBA】動的にボタン、ボタン名を生成できますか? 7 2022/04/08 12:54
- Excel(エクセル) エクセルのフィルターを複数シートに連動させたいです。 エクセルファイルに15シートあります。 そのう 2 2022/05/01 21:47
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのチェックについて
-
エクセルで計算式を教えてくだ...
-
セルの値をシート名2
-
エクセル2007の計算式の質...
-
エクセルで入力シートから別シ...
-
ピボットテーブルの書式設定に...
-
エクセルでリストにないデータ...
-
VBA 関数がある複数シートを一...
-
ワークシートを自動でコピー&ワ...
-
《エクセル》「エラー値“#N/A”...
-
エクセルVBAで日付を・・・
-
LOTUS123のデータが・・・
-
エクセルの操作
-
エクセル、複数のシートのデー...
-
エクセル関数について
-
Aシートの情報をBシートに保存...
-
エクセル if文を乱用したら・・・
-
エクセルのコピペで不思議なことが
-
データを時系列で表示させたい
-
Excel2013 シート1にその都度...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのワークシートが重く...
-
ExcelVBAで、指定したシートに...
-
エクセルで入力シートから別シ...
-
VBA セルの値と同じ名前のシー...
-
IF, ISNUMBER, INDIRECTの組み...
-
Excelの中央値の複数条件について
-
エクセルで入力→日付を自動判別...
-
Excel ハイパーリンク先のセル...
-
エクセルVBA:表の内容を担当者...
-
【Excel】VLOOKUP関数で複数の...
-
エクセル マクロを使って日々...
-
指定した日付の範囲内でデータ...
-
エクセルについて質問です 日付...
-
エクセルにて別シートの値を参...
-
エクセル:複数シートのデータ...
-
EXCEL VBA 一致しないデータの...
-
エクセル 毎日更新する表のデ...
-
エクセル シフト勤務表から、...
-
VBAのoffsetの動き方について教...
-
Excel 複数のシートからグラフ...
おすすめ情報