複数シートのセル値を参照してまとめ一覧表を作成する方法

このQ&Aのポイント
  • 複数のシートにわたるセルの値を101のまとめページに自動で参照する方法を教えてください。
  • 手作業で各セルに参照値をリンクするのは大変な作業です。効率的な方法を教えてください。
  • シート1から100までの同じセル番号のセルの値を参照して一覧表を作成したいです。良い方法があれば教えていただきたいです。
回答を見る
  • ベストアンサー

複数シートのセル値を参照してまとめて一覧表にしたい

100あるシートの最後にまとめとして101のシートを作ります。 その101のシートにはシート1~シート100までのセル値を自動で参照したいのです。 例えばシート1のI6:名前、I10:売上、AQ13:原価、AB40:利益があり、それをシート101のまとめペー1ジの2行目に表示(参照)します。 101まとめページの3行目には同じセル番号のシート2のI6:名前、I10:売上、AQ13:原価、AB40:利益を反映。 101まとめページの4行目にはシート3のI6:名前、I10:売上、AQ13:原価、AB40:利益を反映。 このようにシート1から100までの同じセル番号の各シートのセル値を参照して一覧表にしたいのです。 お分かりにくい説明かもしれなくてすみません。 手作業でまとめシートに各セルに=で参照値をリンクするには大変な作業となりますので、何らかの良い方法があれば教えて頂けますでしょうか? よろしくお願い致します。

  • anhana
  • お礼率34% (100/288)

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.5

左端からの件はコードを実行すると左端のシートから順にデータが転記されるという事ですので、コードは一か所に記載して大丈夫です。 標準モジュールを作成してそこに記載しておくと、コードを記載したシートを間違って削除してもコードが残るのでその方がいいかもしれません。 セル位置はセルの列と書いた方が良かったですね。 Sub Test() Dim i As Long, j As Long j = 2 For i = 1 To Sheets.Count If Sheets(i).Name <> "一覧" Then Sheets("一覧").Cells(j, "B").Value = Sheets(i).Range("I6").Value Sheets("一覧").Cells(j, "C").Value = Sheets(i).Range("I10").Value Sheets("一覧").Cells(j, "D").Value = Sheets(i).Range("AQ13").Value Sheets("一覧").Cells(j, "E").Value = Sheets(i).Range("AB40").Value j = j + 1 End If Next End Sub

anhana
質問者

お礼

お忙しいなか、ご返答ありがとうございます。 記載して頂きましたコードで解決できました! 感謝です。ありがとうございました!

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.6

既に解答は出ていますが、下記は繰り返しを多用し、プログラムコード行数を減らすことを考えたコードです。 例データ Sheet1,Sheet2、Sheet3 それぞれのシートのセル  "A1", "B2", "D5", "F3"に、何かデータを入れる。 その他のセルのデータは何でもよい、使わない。 集約シート Sheet4 とする ーーーーー 標準モジュールに (下記はテスト用のコードが混じっているが本番では省けるコードがあります。 Sub test01() Application.ScreenUpdating = False 'スピードアップのため画面更新停止 'a = Array("", "I6", "I10", "AQ13", "AB40") '本番での、データを拾う番地 a = Array("", "A1", "B2", "D5", "F3") 'FROM : 各データシートのセル番地 小生のテスト時用 b = Array("", "A", "B", "C", "D") 'TO : 集約シートでの列位置。aの配列のセルと対応させる。例A1-->A列、B2-->B列、・・。 Set sh101 = Worksheets("Sheet4") '小生のテスト時用 ’本番時には、Set sh101 = Worksheets("xxxx")とxxxxを実際のシート名に修正してください sh101.Cells.Clear '集約シートのデータクリア '-- k = 2 '集約シートデータ開始行指定 For Each sh In Worksheets '当ブックの全シートについて処理繰り返し If sh.Name = "sheet4" Then '集約シートは除外=集約しない 小生のテスト時用 Else MsgBox sh.Name 'テスト時確認用。本番では削除。 For c = 1 To 4 '拾うデータが4セルとした場合の例 sh101.Cells(k, b(c)) = sh.Range(a(c)) Next c k = k + 1 '集約シートで、次回のデータをセットする行のポイント End If Next '次のシートの処理へ繰り返し Application.ScreenUpdating = True End Sub ーーーー 結果 Sheet4 A2:D4 小生のテストデータ例 3シートなので3行データになる。 a b cc gg a1 b1 cc1 gg1 a3 b3 cc3 gg3

anhana
質問者

お礼

ご丁寧な説明ありがとうございました。 感謝です。

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.4

No.2でシート名一覧をシート101のA列に作成する場合以下のマクロが使えます。 Sub Test2() Dim i As Long, j As Long j = 2 For i = 1 To Sheets.Count If Sheets(i).Name <> "シート101" Then Sheets("シート101").Cells(j, "A").Value = Sheets(i).Name j = j + 1 End If Next End Sub

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.3

他に、マクロを使わずに左端から順番に取り出す場合 エクセル シート名を取得する https://www.tipsfound.com/excel/01306 を設定して I6の場合 =INDIRECT(SUBSTITUTE(INDEX(Book,ROW(1:1)),"[" &doc&"]","")&"!$I$6") 下にコピー

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.2

あと、シート名を一覧で作成できるのでしたら以下の方法もあります。 他シートと連携に便利なINDIRECT関数の使い方 https://www.forguncy.com/blog/20170905_indirect_sheet

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.1

シート名が質問のように最後の値が連番になっているのでしたら I6の場合 =INDIRECT("シート" &ROW(1:1) & "!$I$6") として下にコピーすればできますが シート名がバラバラでしたらマクロで (左端のシートから順に転記していきます、シート101は実際のシート名にABCDは実際に転記したいセル位置に変更してください、) Sub Test() Dim i As Long, j As Long j = 2 For i = 1 To Sheets.Count If Sheets(i).Name <> "シート101" Then Sheets("シート101").Cells(j, "A").Value = Sheets(i).Range("I6").Value Sheets("シート101").Cells(j, "B").Value = Sheets(i).Range("I10").Value Sheets("シート101").Cells(j, "C").Value = Sheets(i).Range("AQ13").Value Sheets("シート101").Cells(j, "D").Value = Sheets(i).Range("AB40").Value j = j + 1 End If Next End Sub

anhana
質問者

補足

kkkkkmさま ご回答ありがとうございます。 実際はシート名はバラバラです。 「左端のシートから順に転記していきます」というのは以下のようなことなのでしょうか? シート101の実際のシート名は「一覧」です。 よって頂きましたサンプルコードの「シート101」を「一覧」に変えました。 また「A~D」までの記号は「一覧」にて表示したい その場合一番左端のシートには ------------------------------------------------------ Sub Test() Dim i As Long, j As Long j = 2 For i = 1 To Sheets.Count If Sheets(i).Name <> "一覧" Then Sheets("一覧").Cells(j, "B2").Value = Sheets(i).Range("I6").Value Sheets("一覧").Cells(j, "C2").Value = Sheets(i).Range("I10").Value Sheets("一覧").Cells(j, "D2").Value = Sheets(i).Range("AQ13").Value Sheets("一覧").Cells(j, "E2").Value = Sheets(i).Range("AB40").Value j = j + 1 End If Next End Sub ------------------------------------------------------ 2番目のシートには ------------------------------------------------------ Sub Test() Dim i As Long, j As Long j = 2 For i = 1 To Sheets.Count If Sheets(i).Name <> "一覧" Then Sheets("一覧").Cells(j, "B3").Value = Sheets(i).Range("I6").Value Sheets("一覧").Cells(j, "C3").Value = Sheets(i).Range("I10").Value Sheets("一覧").Cells(j, "D3").Value = Sheets(i).Range("AQ13").Value Sheets("一覧").Cells(j, "E3").Value = Sheets(i).Range("AB40").Value j = j + 1 End If Next End Sub ------------------------------------------------------ 3番目のシートには ------------------------------------------------------ Sub Test() Dim i As Long, j As Long j = 2 For i = 1 To Sheets.Count If Sheets(i).Name <> "一覧" Then Sheets("一覧").Cells(j, "B4").Value = Sheets(i).Range("I6").Value Sheets("一覧").Cells(j, "C4").Value = Sheets(i).Range("I10").Value Sheets("一覧").Cells(j, "D4").Value = Sheets(i).Range("AQ13").Value Sheets("一覧").Cells(j, "E4").Value = Sheets(i).Range("AB40").Value j = j + 1 End If Next End Sub ------------------------------------------------------ このようにシートの左端からシート100(一覧の直前)までの各シートで(つまり100個のシート)VBの画面を使って一つずつ以下のコードを記載いていくのでしょうか? もし間違っていたらごめんなさい。 上記のようにやってみましたがうまくいきませんでした。 ご返答頂けましたら幸いです。 よろしくお願い致します。

関連するQ&A

  • 別シートのセルを絶対参照にする

    office2007、Excelで別シートのセルを絶対参照する方法を教えて下さい。 セルに「=シート名セル番地」を力した場合は、 セル番地を$で絶対参照にしても 参照先シートのその上に行を挿入すると $A$5を指定していても行を挿入した場合は 自動的に$A$6になってしまいます。 別シートに行を挿入しても参照先のセルを固定する方法を教えて下さい。

  • EXCEL 一覧シートから各シートへ参照

    現在シートが 一覧、1、2、3、 とあります。 一覧シートには、 シート名(A1) 名前(B1) 1(A2) 山田(B2) 2(A3) 鈴木(B3) 3(A4) 木村(B4) と記載されております。(カッコ内は、セルの位置です) シート 1 のA1には、山田 シート1のB2を参照 シート 2 のA1には、鈴木 シート1のB3を参照 シート 3 のA1には、木村 シート1のB4を参照 とシート 一覧から参照して表示されるようにしたい と考えております。 数字の名前のシートが数個であればシート毎に入力すれば済む話ですが、 予定では、順次増え、最終的には100位になる予定です。 数式、マクロ VBA 等を使って  一覧シートに名前を入力すると該当のシートのA1セルに参照させる事は可能でしょうか? よろしくお願いいたします

  • エクセルのセル参照、一つずつ参照セルをずらしていきたい

    エクセルのセル参照の方法について教えてください。 2つのシートがあって、 ひとつのシートにはC4,D5,E6…というように行と列がひとつずつ増えていくところに値が入力されています。 このシートから、C4,D5,E6…のセルの値を取り出して 別のシートのA1,A2,A3…に縦に並んで表示させたいのですが、どのようにセルを参照させればC4,D5,E6…という 行と列がひとつずつ増えていくセルを参照できるでしょうか? よろしくお願いいたします。

  • calc で参照するシートのセルを自動的にずらす

    openoffice.calc で、顧客シートを作成中です。 sheet1に、すべての顧客情報をまとめて入力し、sheet2は、sheet1のいち顧客の情報(sheet1の2行目データ)を上手く並べて個人データ票としたいと思います。 sheet2は、sheet1のそろぞれのセルを参照して作成することはできたのですが。 sheet3にはsheet1の3行目の顧客、sheet4にはsheet1の4行目の顧客というようにズラして行く場合。 sheet2で作った個人データ票をコピーして増やしても、参照セルはsheet1の2行目で、もちろんすべてがsheet1の2行目の顧客情報になってしまいます。 sheet3を作る際に、sheet2をコピーして使いたいのですが、参照セルだけsheet1の3行目に自動的にずらす方法はありませんか? ただ、項目(sheet1の1行目)だけは同じなので、これはずらしたくありません。 このような方法でcalcで顧客シートを作成する場合、どのような方法が一般的なのか教えていただければ幸いです。 よろしくお願いいたします。

  • エクセル複数シートへ参照。シート移動で参照セル移動

    エクセル(2007または2010)で,複数シート(テンプレートは同じ)が同一シートを参照するようにしたいです。その際,シートが1つ後ろへ(タブが1つ右へ)移るたびに,参照元シート上の参照セルを1つ下の行へずらすようにしたいです。 複数(40枚)の個票を作るために,入力用のシートを作成して個票となる複数のシートが入力用シートを参照するようにしたいのです。 個票用のシートにある十数カ所の数式を手で修正しよう(十数カ所×40枚=数百カ所!!)としていますが,いい方法はないでしょうか。 ご存じの方がいらっしゃいましたら,お知恵をお借りしたいです。よろしくお願いいたします。

  • エクセル2007のシート内にあるセルAから数値を参照したいのですが、参

    エクセル2007のシート内にあるセルAから数値を参照したいのですが、参照を反映するセルBの中にはテキストが入っております。1セルのテキストとテキストの間に数値を参照反映するにはどのようにしたら良いでしょうか? セルA 3000 セルB テキスト (参照した数値を入れたい) テキスト

  • シート再計算とセル参照について

    マクロでWEBからデータを落としてきて、列の順序を変えたり不要な行を削除したりしたシートを別のシートから参照したいのですが、マクロを実行するたびに参照してるセルがなかったりするので#REFとなります。なにかいい方法はないでしょうか? 今はマクロのファイルを保存してから、セル参照を行うファイルを開きデータ更新しています。 理想は、マクロを実行した”後に”(データの加工が終了した後)別のシートから、マクロを実行したシートを参照したいです(自動で)。よろしくお願いします。

  • EXCEL 異なるシート間の参照

    EXCELに関しての質問です。 超初心者で基本がわからないままの質問ですみません。 同じブック内の複数のシート(様式は異なります)間の作業です。 片方のシートの日毎のデータを別のシートの日毎のセル に参照し、反映させたい。 INDIRECT関数を用いて、=INDIECT(A3&"!V3")のようにして A3に表示される文字列のシートのセル番地V3を参照し、 他のシートにそのデータを表示したいのですが、 うまくいきません。 A3セルには一ヶ月の日付が入っているので、 日付の入った他のシートを日付ごとに参照していくのですが、 そのシートの中のいつも同じセルV3しか 参照してくれないのです。 このV列のセルも自動的に日付に沿ったセル参照に変更するのは どうしたよろしいでしょうか。 よろしくお願いします。

  • 複数のシートから一覧表を作成する方法

    次のことを実現させる方法を教えてください。 シート 「あ」「い」「う」があります。 ※例としてはシートを3つあげましたが、 このシートはどんどん数が増えていきます。 シート「あ」   A   B 1 鈴木 1976/1/1 シート「い」   A   B 1 佐藤 1977/1/1 シート「う」   A   B 1 山田 1978/1/1 そこから一覧表を作成したいのです。 その一覧表のシート名を「一覧表」とします。 シート「一覧表」(実現したいシート内容)   A    B   C 1 シート名 名前 生年月日 2 A     鈴木 1976/1/1 3 B     佐藤 1977/1/1 4 C     山田 1978/1/1 参照元のシートが固定されているなら   A    B   C 1 シート名 名前 生年月日 2 あ    あ!A1 あ!B1 3 い    い!A1 い!B1 4 う    う!A1 う!B1 と直接参照先を書けばいいのですが、 この方法では、シートが増えるたびに B列、C列にえ!A1 え!B1というように参照先を その都度書いていかなければいけません。 だから、一覧表で、シート名(A列)を入力ただけで、 自動的にそのシートに記載されている 名前と生年月日が反映されるようにしたいのです。 例えば今A3には「い」と記載されていますが、 これを「あ」と変更すると 以下のようにしたいのです。 B3のセルの中身は い!A1 → あ!A1 C3のセルの中身は い!B1 → あ!B1 一覧表のセルB列、C列にどのように記入すれば自動化できるでしょうか?

  • 【エクセル】シート名を一覧から参照して記述

    色々と調べてみたのですが、どうしても自分の やりたいことと違ってしまうので、知恵をお貸しください。 例えば、 ・シート数が100ある ・最初のシートに目次をつける(100行) ・最初のシート100行を参照して、シート名を一括で変換(同順) このようなことは可能でしょうか? 各シートの特定セルを参照してシート名を変換するやり方は みつけたのですが、参照するのは1つのシートからにしたいです。 どうか、お知恵をお貸しください。

専門家に質問してみよう