• ベストアンサー

エクセルで複数のシートのデータをまとめるには

エクセルで、book内にsheetが同じフォーム(検査成績書のように)で複数存在している 状態で、データが書かれているものを、同じbook内に新にsheetを作成して、 一覧表のようにして転記したいのですが、簡単にする方法はないでしょうか? 1個1個セルに転記するように番地を入力するのはわかるのですが、すごい手間が かかるので、もっと簡単に転記する方法はないでしょうか?

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

回答No3,4です。 シート1や2が縦に並んでいるのに対してお求めのまとめの表は横に並べるとのことでしたね。 回答No4のケースで横に並べる場合にはA1セルに氏名、A2セルに住所、A3セルに年齢、A4セルに性別、A5セルに電話番号と入力します。 そこでB1セルには次の式を入力して右横方向にオートフィルドラッグします。 =IF(COLUMN(A1)<=MAX(Sheet2!$C:$C),IF(COUNTIF(Sheet1!$E:$E,COLUMN(A1))>0,INDEX(Sheet1!$A:$A,MATCH(COLUMN(A1),Sheet1!$E:$E,0)),INDEX(Sheet2!$A:$A,MATCH(COLUMN(A1),Sheet2!$C:$C,0))),"") B2セルには次の式を右横方向にオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(OR(B$1="",$A2=""),"",IF(AND(COUNTIF(Sheet1!$A:$A,B$1)>0,COUNTIF(Sheet1!$1:$1,$A2)>0),INDEX(Sheet1!$A:$D,MATCH(B$1,Sheet1!$A:$A,0),MATCH($A2,Sheet1!$1:$1,0)),IF(AND(COUNTIF(Sheet2!$A:$A,B$1)>0,COUNTIF(Sheet2!$1:$1,$A2)>0),INDEX(Sheet2!$A:$B,MATCH(B$1,Sheet2!$A:$A,0),MATCH($A2,Sheet2!$1:$1,0)),""))) これでシート1と2のデータが項目を縦にして表示されます。

yasuhee
質問者

お礼

横方向に転記するほうが簡単にできたような気がするのは 気のせいでしょうか?上手くいきました有難うございました。 これを参考に複数枚の同じ帳票シートをまとめシートに 整理してみたいと思います。 出来なかったらまた質問しにきます。有難うございました。

その他の回答 (4)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

回答No3です。 シート1で新たにC1に年齢、D1に性別の項目名が作られたとします。 先ほどの作業列はシート1のE2セルに次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(A$2:A2,A2)=1,MAX(E$1:E1)+1,"") シート2は先ほどと同じと仮定します。 そこでまとめの表のシート3では次のようにします。 A1セルは氏名、B1セルは住所、C1セルには年齢、D1セルには性別、E1セルには郵便番号と項目名を入力します。 A2セルへの入力の式は先ほどと少し違って次の式になります。 =IF(ROW(A1)<=MAX(Sheet1!$E:$E),INDEX(Sheet1!$A:$A,MATCH(ROW(A1),Sheet1!$E:$E,0)),IF(ROW(A1)<=MAX(Sheet2!$C:$C),INDEX(Sheet2!$A:$A,MATCH(ROW(A1),Sheet2!$C:$C,0)),"")) 次にB1セルからD1セルまではシート1の項目になりますのでシート1からそれらのデータを自動的に表示させるための式をB2セルには次の式を入力してD2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF($A2="","",IF(COUNTIF(Sheet1!$A:$A,$A2)=0,"",INDEX(Sheet1!$A:$D,MATCH($A2,Sheet1!$A:$A,0),MATCH(B$1,Sheet1!$1:$1,0)))) ここではVLOOKUP関数を使ってもよいのですが行や列が変わるような場合には私はINDEX関数を使うことにしています。項目の順序が必ずしもシート1と同じでなくても容易にその列を表示してくれます。例えばシート3でC1セルが性別で、D1セルが年齢となってもよいのです。 E列ののデータはシート2になりますのでE2セルには次の式を入力して下方にオートフィルドラッグします。 =IF($A2="","",IF(COUNTIF(Sheet2!$A:$A,$A2)=0,"",INDEX(Sheet2!$A:$B,MATCH($A2,Sheet2!$A:$A,0),MATCH(E$1,Sheet2!$1:$1,0)))) シート2での項目の列が多くなってもシート1と同じように式をたて入力すればよいでしょう。 これらのテクニックをマスターすればエクセルをある程度理解しているといえるでしょう。頑張ってください。

yasuhee
質問者

お礼

重ね重ね有難うございます。 頭をすっきり整理させてからチャレンジしてみます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

簡単な例を示しますので参考に努力してみてください。 例えばシート1ではA1セルに氏名、B1セルに住所とあり、下方にデータがあるとします。 シート2ではA1セルに氏名、B1セルに電話番号とあり、下方にデータがあるとします。 C2シート3がまとめの表でA1セルに氏名、B1セルに住所、C1セルに電話番号と項目名が有るとします。 なお、氏名についてはシート1と2では並びの順序も違って、シート2にはシート1に無い氏名も含まれているとします。 そこでシート3に自動で氏名をすべて表示させるためにはシート1及びシート2に作業列を作って対応することにします。 シート1のC2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(A$2:A2,A2)=1,MAX(C$1:C1)+1,"") シート2ではC1セルには次の式を入力します。 =MAX(Sheet1!C:C) C2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(AND(COUNTIF(Sheet1!A:A,A2)=0,COUNTIF(Sheet2!A$2:A2,A2)=1),MAX(C$1:C1)+1,"") これで氏名についてはシート1及び2で出てくるすべての氏名に1から番号が付けられます。 そこでまとめのシート3ですがA2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)<=MAX(Sheet1!$C:$C),INDEX(Sheet1!$A:$A,MATCH(ROW(A1),Sheet1!$C:$C,0)),IF(ROW(A1)<=MAX(Sheet2!$C:$C),INDEX(Sheet2!$A:$A,MATCH(ROW(A1),Sheet2!$C:$C,0)),"")) シート3のB2セルには次の式を入力して下方にオートフィルドラッグします。 =IF($A2="","",IF(COUNTIF(Sheet1!$A:$A,$A2)=0,"",VLOOKUP($A2,Sheet1!$A:B,2,FALSE))) C2セルには次の式を入力して下方にオートフィルドラッグします。 =IF($A2="","",IF(COUNTIF(Sheet2!$A:$A,$A2)=0,"",VLOOKUP($A2,Sheet2!$A:B,2,FALSE))) ここでの例を具体的に試験してみて参考になれば幸いです。

yasuhee
質問者

お礼

回答ありがとうございます。 頭から煙が出てきそうですが、がんばってみます。

yasuhee
質問者

補足

質問者です。試験的にやってみましたが、上手くいきました!すごい! シート1や2のデータはタテ方向に入力されているものを、ヨコ方向に 転記するには同じ式では無理ですよね?どこをいじれば出来るでしょうか? 初めに説明しておけばよかった・・・。すいません

  • ponta34
  • ベストアンサー率25% (10/40)
回答No.2

同じフォームを同じ構成だと判断させていただくと 参考URLの方法はいかがでしょう

参考URL:
http://kokoro.kir.jp/excel/tougou.html
yasuhee
質問者

お礼

回答有難うございます。 同じフォーム構成なのですが・・・。 チャレンジしてみます。

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

しばしば寄せられるご相談ですが,そう上手い方法はありません。 一番簡単にできる方法: 各帳票の「シート名」を「計算可能なルール」に従って命名する運用を義務づける たとえばSheet1,Sheet2,Sheet3… たとえばNo0001,No0002,No0003… たとえば年月日日付 マトメシートのA列のA2に Sheet1などの1枚目の帳票シート名を記入 下向けにオートフィルドラッグしてSheet2,3,4…あるいはNo0002,0003,0004…を自動で作成させる マトメシートのB列のB2に =IF(ISERROR(INDIRECT($A2&"!C5")),"",INDIRECT($A2&"!C5")) のように記入して下向けにコピーすると,各シートのC5セルの値を順次並べることが出来ます。 オートフィルドラッグで自動生成できないデタラメなシート名でしか作成できないときは,簡単なマクロを使ってシート名一覧をA列に列記させるような手を併用する手もあります。 別の方法: ご利用のエクセルのバージョンが不明ですが,「データ追跡テンプレート付きアドイン」を追加して帳票をテンプレートとして登録しておくと,テンプレートに記入して保存する都度,組み込まれている自動マクロが勝手に一覧シートに所定のデータを記録していってくれます。 別の方法: マクロを勉強して,データをさくっと取ってこさせることも出来ます。 サンプル: sub macro1()  dim w as worksheet  dim h as range  for each w in worksheets  if w.name <> "まとめシート" then  set h = worksheets("まとめシート").range("A65536").end(xlup).offset(1)  h.range("A1") = w.range("C5")  ’C5とD10とF30のセルの値を集めてみる  h.range("B1") = w.range("D10")  h.range("C1") = w.range("F30")  end if  next end sub

yasuhee
質問者

お礼

やはりマクロが手っ取り早いんですかね? 素人には難しい!勉強してみます。 有難うございました。

関連するQ&A

  • 複数のシートの同じ位置にあるセルデータについて

    同ブック内複数のシート(100枚)にある同セルに入力されているデータを、新しいシート(別のブックでも可)に一覧表として作り直したいと思っているのですが・・これはエクセルで可能でしょうか??アクセスの環境はありません。 職場で使おうと思っておりますので、教えていただいた方法をその場で試すことはできないのですが、どうか良い方法をお教え下さい!!

  • エクセルでの複数ブックの特定範囲を一覧化する

    エクセルでイベントの参加者を数か所から集め、集計を行っています。 今までは紙ベースで受け取り、エクセルへ手打ちをしていましたが、もう嫌です。 エクセルベースで送付してもらい、集計し、一覧化を行いたいです。       【ブックα】      |     【ブックβ】    A    B    C    |    A    B    C  1  年齢 性別  名前   | 1  年齢 性別  名前 2  ・    ・    ・    | 2  ・    ・    ・ 3  ・    ・    ・    | 3  ・    ・    ・ 4  ・    ・    ・    | 4  ・    ・    ・ 様式としてはとしては以上のような一覧で送られてきます。(だいぶ簡略化してますが) この複数ブックの申し込みを以下のような一覧に仕上げたいです。    A   B    C    D 1  α 年齢  性別  名前 2   ・   ・    ・     ・ 3  ・   ・    ・     ・ 4  ・   ・    ・     ・ 5  β  ・    ・     ・ 6  ・  ・    ・     ・ 7  ・  ・    ・     ・ ちなみに、ブックごとの参加者は不定です。なので範囲としては(A1:C100)を抽出するようになると思います。 マクロなるもので、複数ブックを一つのブックにまとめ、複数シートとすることはできましたが、その複数シートの該当範囲のみを転記し、一覧化する(A行にシート名を転記する)ことができません。 また、ただ単に当該範囲を転記するだけでは、空欄セルが多数転記されてしまいそうですが、記入されているセルのみを転記することが可能であればなおいいです。 わたしが「こうできたらいいのに」と思うことはできると思っています。 ただ、私にはその知識がありません。 なのでお力添えいただければ幸いです。 つたない説明で伝わりにくい点もあるかと思いますが、よろしくお願いいたします。

  • Excel の複数シートの列幅を同じにするには?

    よろしくお願いします。 Excel2000についての質問です。 一つのブック内にある複数のシートの列幅や 行幅を一度に同じにしたいと考えています。 ただし、すべてのシートにはすでにデータや 表が存在します。 可能でしょうか。 可能であれば方法をご指導願えますでしょうか。 どうぞ宜しくお願い致します。

  • 複数シートの同じセル内容を1シートに順番に貼り付けたい

    複数あるシートの同じ番地のセルをコピーして、1シートの一覧にしたいと思っています。簡単な方法があったら教えてください。

  • エクセルの特定セルを別へのブックに行方向に転記

    エクセル2010で、専用フォルダーに入っている複数のエクセルファイルの特定のセル(A1,B2,C3等)を別のブック(まとめ)に行方向に転記したいのですが。 まとめ用のシートの上の行から順に各シートのセル内容を転記していきたいのですが何か方法がありませんでしょうか? 例えば各ファイルに住所、TEL No、名前が決まった書式のセルに入っていて、これが毎月新規データとして追加されるのですが、別のエクセルシートに必要な項目のみ転記して、一覧表を作成したいのです。 現在は、1つずつファイルを開いて、目的のセルのコピペでまとめのシートに貼り付けて作業していますので、これより少しでも簡単な方法があれば教えてください。

  • エクセルで一つのブックにある複数のシートを一つのシートにまとめる。

    エクセルで一つのブックにある複数のシートを一つのシートにまとめる。 各シートには同じ形式の表(大きさも同じ)が1枚ずつあります。 それを一つのシートに、縦に並べて表示したい。 シートが100枚ぐらいありますので、ひとつひとつコピーするのは 大変です。 よろしくお願いします。

  • Excelで複数シートの同一セルをカウントしたいのですが・・・。

    Excelで複数シートの同一セルをカウントしたいのですが・・・。 1bookに対して100sheetほどあります。 カウントするセルはA1。 数値は1~10のみで、それぞれ1が10個、2が15個・・・ とカウントしたいのです。 方法はありますでしょうか? 初心者ですので分かり易くご教授願います。。

  • エクセルで複数のシートから、データを取り出し、一覧表を作成。

    エクセルで複数のシートから、あるデータを取り出し、別のシート(又はブック)に一覧表を作成することはできますか? シート1 東京支店    A   B   C 1東京支店  2 3          50 シート2 大阪支店    A   B   C 1大阪支店  2 3          30 新シート(又は新ブック)    A   B   C 1東京支店 50  2大阪支店 30 3     

  • エクセル2013 シートのデータ読み込みで

    エクセル2013 あるBookにシートが複数枚あります。 各シートのL1に氏名が入力されていたら、他のセルのデータを氏名とともにシート40にある幾つかのセルに読み込みます。 氏名が入力されていないと、シート40の氏名その他のデータが「0」になってしまいます。 氏名が入力されていない場合は、シート40のセルが「0」ではなく「空白」にしたいのですが 方法を教えてください。

  • 複数のエクセルシートの表をひとつにまとめたい。

    複数のエクセルシートの表をひとつにまとめたい。 複数のエクセルシートにある表を、1つのシートにまとめたいのですが、いい方法はありますか? マクロは使い方がわからないので、簡単な方法があると助かります。

専門家に質問してみよう