複数シートから一覧を作成するためのVBA

このQ&Aのポイント
  • VBAを使って複数のシートから一覧を作成する方法を知りたい。
  • 現在アンケート集計をしており、各シートの平均値を一覧にしたいが、手作業でのコピペが大変。
  • VBAを使用することで、各シートの平均値を簡単に一覧にまとめることができる。
回答を見る
  • ベストアンサー

複数シートから一覧を作成VBAについて

VBA超初心者です。 仕事でアンケート集計をしているのですが、効率よくするために質問させてください。 1つのブックに50程のシートがあり、1行目には1~30の設問Noがあり、2行目以降に回答(1~5の数字)が縦に並んでいます。 回答者数は最大で150名です。 アンケート集計として、152行目に回答が”1”の個数、153行目に”2”の個数といった感じで、156行目まで回答1~5の個数が並んでいます。 その次の157行目に平均値が入力されています。 集計用のシートを作成し、そのシートの2行目以降に、各シートの平均値(157行目)を縦に一覧として並べたいのですが、各シートをコピペしていくのは大変なので、VBAで何とかできないかと、いろいろなサイトを参考にやっているのですが、なかなかうまくできず、困っています。 どなたかご教授願えませんでしょうか。 よろしくお願いいたします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.5

ご質問の直接の回答としてはこんなカンジで十分です。 タイトル行を準備した集計用シートを開いて実行する: sub macro1()  dim w as worksheet  for each w in worksheets   if w.name <> activesheet.name then    range("A1:AD1").offset(range("A65536").end(xlup).row).value = w.range("A157:AD157").value   end if  next end sub #具体的に何列から何列の表になってるのか情報提供がありませんので、ご自分で適切に修正してご利用ください。 ただし、実際にはご質問でやろうとしてるのでは色々使い難くて、もうちょっと工夫したほうがよさそうです。 準備: 1枚目から50枚のデータシートのA列には空列を挿入しておく 集計シートのA列も空列にしておく 集計シートの1行目(B列から)にはタイトル行を用意しておく sub macro2()  dim w as worksheet  for each w in worksheets   if w.name <> activesheet.name then    with range("A65536").end(xlup).offset(1)     .value = w.name     .offset(0, 1).resize(1, 30).formula = "=INDIRECT(RC1&""!R157C"",FALSE)"    end with   end if  next end sub 実際にはマクロを使うのは(不定の)シート名一覧を列記させるだけで、手で数式を準備しておけば十分です。

key-tom
質問者

お礼

多くの方にご回答いただきありがとうございました。 様々なやりかたがあるものだと、非常に勉強になりました。 結果としまして、一つのマクロで簡単にできるkeithinさんの回答をBAとさせていただきました。 みなさまありがとうございました。

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! すでに回答は出ていますので、余計なお世話かもしれませんが・・・ 「集計用」Sheetがない場合は「集計用」(Sheet名)を追加して 「集計用」SheetのA列に各SheetのSheet名を、B列以降に各SheetのA157~AD157の値を表示するようにしてみました。 標準モジュールです。 Sub Sample1() Dim k As Long, cnt As Long, myFlg As Boolean '▼「集計用」SheetがなければSheet見出しの一番左に「集計用」Sheetを追加 For k = 1 To Worksheets.Count If Worksheets(k).Name = "集計用" Then myFlg = True Exit For End If Next k If myFlg = False Then Worksheets.Add before:=Worksheets(1) ActiveSheet.Name = "集計用" End If '▼「集計用」SheetのA2以降に各Sheet名を、B列以降に各SheetのA157~AD157セルの値を表示 cnt = 1 For k = 1 To Worksheets.Count If Worksheets(k).Name <> "集計用" Then cnt = cnt + 1 With Worksheets("集計用").Cells(cnt, "A") .Value = Worksheets(k).Name .Offset(, 1).Resize(, 30).Value = Worksheets(k).Cells(157, "A").Resize(, 30).Value End With End If Next k End Sub こんな感じではどうでしょうか?m(_ _)m

  • weboner
  • ベストアンサー率45% (111/244)
回答No.3

>シート名は各アンケートを実施した地名(神戸・大阪等)になっています。 ですか、マクロでの回答もすでに出ていますが 一応関数での対処法も http://www.tipsfound.com/Excel2010/01306.vbhtml ↑ このサイトの名前定義の部分を参考に 名前に「book」を入力し、参照範囲に=GET.WORKBOOK(1)を入力して「OK」 そうすると 前回提示した計算式を一部変更して =INDIRECT(INDEX(book,ROW(1))&"!R157C"&COLUMN(),0) これで取得できます

回答No.2

集計シート名は Sheet1 として、ブックの一番左にあるとします。その右側以降に各地区のシートが並ぶとします。 Sub Macro2() Dim WS1 As Worksheet Set WS1 = Worksheets("Sheet1") With WS1 For i = 1 To 30 .Cells(i + 1, 1).Value = i Next i For i = 2 To Worksheets.Count .Cells(1, i).Value = Worksheets(i).Name For j = 1 To 30 .Cells(j + 1, i).Value = Worksheets(i).Cells(157, j).Value Next j Next i End With End Sub

  • weboner
  • ベストアンサー率45% (111/244)
回答No.1

シート名がSheet1~Sheet50になっているのであれば VBA使わなくても 集計用のシートA2セルに =INDIRECT("Sheet"&ROW(A1)&"!R157C"&COLUMN(),0) 後は↓→とドラッグして必要な分だけコピー このままでは横方向の並びなので、範囲をコピーして縦横変更で値のみ貼り付ければいい シート名が番号一覧でなければ他の方法が必要にはなるけど

key-tom
質問者

補足

weboner 様 ご回答ありがとうございます。 説明不足でした。 シート名は各アンケートを実施した地名(神戸・大阪等)になっています。

関連するQ&A

  • 複数のブックにある複数のシートを種別に統合するには

    仕事で、アンケートのとりまとめを行います。アンケート100先に対して、1エクセルファイルに1シートにひとつの設問を設定し、合計30程度の設問を行う予定です。設問ごとのレイアウトは、相違しておりますが、2行目に見出し項目があり、3行目以降に回答を記載するルールです。 設問は、一列一行に数字のみ記載させるタイプ(シート)のもの(3行目までしか記載されない)と、複数列に複数行記載させるタイプ(シート)のもの(複数行記載の可能性があり)が入り混じっています。 すべての設問に対して、最終行までを切り出し、合体させたあと、合計件数を計算したり、とりまとめていくイメージは同じです。(設問により、回答行が1行のものと、複数のものとがシートごとに混在しています) アンケート先から回答された100エクセルファイルにある各30シートを、設問ごとに結合するには、コピー&ペーストする他ないのでしょうか? 検索してみましたが、しっくりくる質問を見つけることが出来ずご相談させていただきました。 どうぞ宜しくお願いします。 【アンケートファイルイメージ】 ファイル名(事業所名):シート名(設問番号) (例)   A事業所.xls:問1、問2、問3・・・問30  B事業所.xls:問1、問2、問3・・・問30   ・   ・  100事業所.xls:問1、問2、問3・・・問30 【集計イメージ】  合計(100事業所分).xls:問1、問2、問3・・・問30  説明が下手ですみませんが、宜しくお願いします。

  • マクロで複数シートを1つにまとめ、転記する方法を教えてください。

    マクロ初心者のため、どなたかご教示ください。 EXCELで以下の3sheetあるアンケートを複数名(300人近く)に送りました。 sheet1 sheet2 sheet3 表紙  設問  設問2 (1)sheet2の設問のみ1つの集計専用のブックにまとめたいです (2)(1)でまとめたブックで、アンケート結果を回答ごとに振り分けたいです。 Aさんのアンケート   A   B   C 1 質問  回答A 回答B 2 質問1  1   △ 3 質問2  3   ○ 4 質問3  5   △     Bさんの回答   A   B   C 1 質問  回答A 回答B 2 質問1  1   ○ 3 質問2  5   ○ 4 質問3  5   △ 上記のアンケート内容を以下ように振り分けたいです。 回答A集計 A   B   C 1 質問  Aさん Bさん 2 質問1   1  1 3 質問2   3  5 4 質問3   5  5 回答B集計 A   B   C 1 質問  Aさん Bさん 2 質問1   △  ○ 3 質問2   ○  ○ 4 質問3   △  △ のように、質問項目は残したまま、回答A、Bを振り分けたいのですが、 何かいい方法はございますか?? 説明がへたで申し訳ございません。 よろしくお願いいたします! sheet3  

  • VBAを使わずに複数シートの列データを縦に並べたい

    フォーマットの異なる表が4種類あり、集計用シートと合わせて5シートを1つのブックにまとめています。各表はカテゴリーが異なるWebサイトのURLリストの列を持っていて、そのURLを集計用シートにまとめたい(縦に並べたい)のですが、Web検索で調べながらOFFSET、ROW、MATCH関数などで挑戦するも、関数の整理がつかず、セル位置の指定と入れ子の式が複雑でうまくいきません。 シート1のURL列の2行目(タイトル行があるので)から最終行までを参照した後、シート2の頭から順番に最終行まで参照し、それをシート4まで繰り返し行うというものです。 VBAは使わずに関数だけで完結させたいです。 どうかご教示ください。 よろしくお願いいたします。 ◆環境:Excel 2016/Windows10 ◆ブックの構成(添付画像ご参照)  ・シート1:参照元シート(1)  ・シート2:参照元シート(2)  ・シート3:参照元シート(3)  ・シート4:参照元シート(4)  ・シート5:参照先集計シート  ※シート1~4はフォーマット及び行数がバラバラの表。  ※各表にはWebサイトのURL一覧の列がそれぞれ含まれている。  ※各表のURL列の1行目のタイトルは「URL」で共通。(列番号はバラバラ) ◆やりたいこと  ・シート1~4のURLの列をまるごとシート5に縦に並べてまとめて参照したい。  ・マクロではなく関数で完結させたい。  ・シート1~4をそれぞれ更新(新データをペースト)すれば、シート5も最新に更新される運用としたい。

  • excel vba 複数シートをまとめる

    お世話になります。 A.xlsというブックがあります。 その中に[集計]というシートがあります。 このシートに[ボタン]を配置してクリックしたら以下の動作を実現させたいのです。 (1)[集計]シートのA2に位置セット (2)[東京]、[大阪],[名古屋]という名称のシートの列=A2~A62、行=A2~データ最下行にある全データを[集計]シートにどんどんコピー貼り付けして追加していきたいのです。 上記動作を実現するVBAのロジックをどなたかご教授いただけますでしょうか。 よろしくお願い致します。

  • Excel2003で、複数のシートに記入されたアンケートの解答欄を、集計用シートに転記し一覧表を作りたい。

    Excel2003を使用中です。複数のシート(700シート以上)に同一フォームで記入されたアンケートの解答欄(設問により、シート内での解答欄の列はばらばらです)のみを、一枚の集計用シートに転記し、一覧表を作りたいのですが、何か良い方法はありませんでしょうか?どなたかご存知の方、いらっしゃいましたら教えてください。

  • 複数シートの内容を1つのシートに集計するVBA

    お世話になります。 ExcelのVBAについて質問させていただきます。 集計.xlsというブックがあります。 この中に[集計]、[東京支店]、[名古屋支店]、[大阪支店]というシートがあります。 やりたい事は[東京支店]、[名古屋支店]、[大阪支店]のシート内容を[集計]シートに順番にコピペしていきたいのです。 下記のVBAを組んでみましたがうまくいきません。 [東京支店]はうまくコピペ出来ますが、[名古屋支店]がコピペされず、[大阪支店]はコピペされますが東京支店のデータのすぐ下ではなく、50行ぐらい下の位置にコピペされてしまいます。 各支店のシートの内容は次の通りです。この内容を[集計]シートにコピペしたいのです。 [日付] [担当者] [金額] 11/1 田中 100円 11/2 山田 500円 どなたかご教授いただけますでしょうか? 環境 Windows XP SP3 Excel2003 ****VBA**** Sub test() Dim 下 As Integer '東京支店 Sheets("東京支店").Select Range("A2").Select '東京支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートに貼り付け Sheets("集計").Select Range("A2").Select ActiveSheet.Paste '次は名古屋支店 Sheets("名古屋支店").Select Range("A2").Select '名古屋支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートの最下行を取得 Sheets("集計").Select 下 = Range("A1").CurrentRegion.Rows.Count + 1 '集計シートに貼り付け Range("A2").Select ActiveCell.Offset(下 & "," & 0).Select ActiveSheet.Paste '最後に大阪支店 Sheets("大阪支店").Select Range("A2").Select '大阪支店シートの見出し以外の全データをコピー Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy '集計シートの最下行を取得 Sheets("集計").Select 下 = Range("A1").CurrentRegion.Rows.Count + 1 '集計シートに貼り付け Range("A2").Select ActiveCell.Offset(下 & "," & 0).Select ActiveSheet.Paste End Sub

  • 別bookのシート名一覧を作成するVBA(都度)

    初めまして。エクセルVBA初心者です。 別bookのシート名を取得するマクロをつくりたいのですがご教示頂けないでしょうか? その際、マクロを実行すると最初にどのbookを開くか?ファイル場所を聞いてくるマクロを設計したいのです。 その後、今開いているアクティブbookのA列の1行目に別bookのシート名一覧が入力されるというものです。 ファイル場所を聞いてくるマクロは調べてもでてこないため、質問しました。 完了したら別bookは閉じてある状態であることが理想です。 そして、その隣のB列はまたさらに他の別bookのシート名一覧を比較用に入力予定ですので、B列用の別マクロを続きで作成したいと思っています。 ご教示のほど宜しくお願いします。

  • 10個のブックからの一覧表作成について

    区域別に分けた10のブックに、同一規格で作成したその区域の集計表シートがあり、複数の条件別集計としているため1シートあたり約30万のデータ数となっています。 現状は、ある条件に該当するものがどうであるのか、を見るために各ブックを開いて該当シートの同一行を別シートにメモ的にコピーし10個のデータを並べて比較している、という極めて原始的なやりかたをしています。 ある条件に合致するデータがどうであるのか、を全区域一覧で比較できるものを作成したいのですが、単純計算すると60列、5万行くらいの表ができることになり、どう作業をすすめるべきか思案しております。 イメージとしては、各ブックの2行目が10行並び、次に3行目が10行並び・・・となるのですが、自分のレベルで考えつくのは、各ブックから1行ずつコピーするか、各ブックの該当行を参照する式を入れて10行ずつコピー、参照先を修正、これを延々と繰り返す。完成したら条件別にシートを分割して見やすいものにする。 この程度しかできないのですが、このレベルでも可能な方策があるでしょうか。

  • 複数のExcelブックから特定シートのセル範囲抽出

    同一フォルダ内にある複数のExcelブックから特定シートの特定セル範囲を抽出して一覧表にまとめるExcel マクロ(VBA)を教えてください。 このサイトで殆どよく似た回答を読んだのですがうまくいきません。VBA初心者です。 よろしくお願いします。 【前提】 ・実行する端末のOSはWindows 10 ExcelはOffice365 ProPlus ・対象フォルダはネットワーク接続フォルダ  この中に、複数のExcelブック(xlsx、xlsm)があります。 ・抽出したい対象は、各ブック内の「台帳」シートの「A3:Cの最終行」で  複数のブックの中には「台帳」シートが含まれていないブックも混在しています。 【抽出一覧作成イメージ】 ・「集約.xlsm」ブックの「集計」シートの2行目から抽出した結果を一覧表示する。 ・「集約.xlsm」ブックにマクロは登録する ・表示はA列に抽出元ブック名(=ファイル名)、B列からD列に抽出元「A3:Cの最終行」セルの値。 ・「A3:Cの最終行」セルの値を「集約.xlsm」ブックの「集計」に貼り付ける際には「値で貼り付ける」が望ましい。

  • Excelマクロ:複数シート同座標セルの値を、連番で一覧に参照したい

    マクロは素人なのでご教授お願いします。 Excelブック一つにシートが20あったとします。 ○20シート全ての同座標セルに、ある商品の「合計」と「個数」の値がある ○「集計」シートが別にあり、「sheet1」から「sheet20」までを連番で一覧にしてある 該当のセルに「合計」と「個数」の値を参照させる <「集計」シート 結果例>    A      B       C  1 シート名  合計数   個数(表見出し) 2 sheet1    78      5 3 sheet2    90      17 4 sheet3    112     224 また、以前まったくの逆の条件で質問をしまして、良回答いただきました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=715150 参考までにご覧になってみて下さい。 よろしくお願い致します。

専門家に質問してみよう