• ベストアンサー

複数シートのデータをまとめたい

複数のシートを下の例のように一つにまとめたいのですが、どうすればよいでしょうか? 注)見づらい例で申し訳ありません。 --------------------------------(例)---------------------------- [sheet1]と[sheet2]のデータを[sheet3]に出力させたい。 ※例では[sheet1][sheet2]共,5行目までしかデータがありませんが、  これより少ない時も多い時もあります。 [sheet1] (A1):担当者A (A2):項目A (B2):項目B (C2):項目C (D2):項目D (A3):テキスト1 (B3):15 (C3):2 (D3):テキスト4 (A4):テキスト2 (B4):3 (C4):1 (D4):テキスト5 (A5):テキスト3 (B5):4 (C5):2 (D5):テキスト6 [sheet2] (A1):担当者B (A2):項目A (B2):項目B (C2):項目C (D2):項目D (A3):テキスト7 (B3):5 (C3):3 (D3):テキスト10 (A4):テキスト8 (B4):7 (C4):2 (D4):テキスト11 (A5):テキスト9 (B5):9 (C5):4 (D5):テキスト12 [sheet3] (A2):項目A(B2):項目B(C2):項目C(D2):項目D(E2):担当者 (A3):テキスト1(B3):15(C3):2(D3):テキスト4(E3):担当者A (A4):テキスト2(B4):3(C4):1(D4):テキスト5(E4):担当者A (A5):テキスト3(B5):4(C5):2(D5):テキスト6(E5):担当者A (A6):テキスト7(B6):5(C6):3(D6):テキスト10(E6):担当者B (A7):テキスト8(B7):7(C7):2(D7):テキスト11(E7):担当者B (A8):テキスト9(B8):9(C8):4(D8):テキスト12(E8):担当者B ----------------------------------------------------------------

noname#102081
noname#102081

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

  • ベストアンサー
  • kuma3f
  • ベストアンサー率63% (28/44)
回答No.2

Sheet3を選択したらSheet1とSheet2のデータをSheet3に出力させるのはどうでしょうか。 参考までに次のコードをSheet3のコードに貼り付けてみてください。 元を壊してはいけないので、コピーしたもので試してみてください。 また、Excel2003での手順になりますのでExcel2007では動作確認はできていないので了承ください。 Alt+F11 キーを押します。 Microsoft Visual Basic が開きます。 Ctr+R キーをお押します。 左側に プロジェクト-VBAProject が開きます。(あればOK) プロジェクト-VBAProjectの中のSheet3(Sheet3)を右クリックし、コードの表示をクリックします。 Sheet3のコードを入力する白い画面になりましたら、下記のコードをコピーして貼り付けしてください。 Private Sub Worksheet_Activate() Dim s1cnt, s2cnt, s3cnt, s1max, s2max As Long If Sheets("sheet3").Range("A2") = "" Then Application.ScreenUpdating = False Sheets("sheet1").Activate s1max = Application.WorksheetFunction.CountA(Worksheets("sheet1").Range("a1:a65536")) Sheets("sheet2").Activate s2max = Application.WorksheetFunction.CountA(Worksheets("sheet2").Range("a1:a65536")) Sheets("sheet1").Select s3cnt = 2 s1cnt = 2 Do Sheets("sheet3").Cells(s3cnt, 1) = Sheets("sheet1").Cells(s1cnt, 1) Sheets("sheet3").Cells(s3cnt, 2) = Sheets("sheet1").Cells(s1cnt, 2) Sheets("sheet3").Cells(s3cnt, 3) = Sheets("sheet1").Cells(s1cnt, 3) Sheets("sheet3").Cells(s3cnt, 4) = Sheets("sheet1").Cells(s1cnt, 4) Sheets("sheet3").Cells(s3cnt, 5) = Sheets("sheet1").Cells(1, 1) s3cnt = s3cnt + 1 s1cnt = s1cnt + 1 Loop Until s1cnt > s1max Sheets("sheet2").Select s2cnt = 3 Do Sheets("sheet3").Cells(s3cnt, 1) = Sheets("sheet2").Cells(s2cnt, 1) Sheets("sheet3").Cells(s3cnt, 2) = Sheets("sheet2").Cells(s2cnt, 2) Sheets("sheet3").Cells(s3cnt, 3) = Sheets("sheet2").Cells(s2cnt, 3) Sheets("sheet3").Cells(s3cnt, 4) = Sheets("sheet2").Cells(s2cnt, 4) Sheets("sheet3").Cells(s3cnt, 5) = Sheets("sheet2").Cells(1, 1) s3cnt = s3cnt + 1 s2cnt = s2cnt + 1 Loop Until s2cnt > s2max Sheets("sheet3").Range("E2") = "担当者" Sheets("sheet3").Select Application.ScreenUpdating = True End If End Sub Private Sub Worksheet_Deactivate() Sheets("sheet3").Cells.ClearContents End Sub '****コピー貼り付けはここまで **** Microsoft Visual Basicの画面を×で閉じます。 Excelシートに戻ったらSheet3を開くと出力されると思います。

noname#102081
質問者

お礼

コピーしてみたらうまく機能しました。 本当にありがとうございました。

その他の回答 (1)

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

これは課題解決の方向 (1)VBA (2)関数 (3)操作 がはっきり質問者は書いてないので、答えの方向に困るが (3)はコピペなんで、やる気は無いでしょう。 (1)Sheet3の最終行を捉える簡単なコードがあるのでそれを使えば、 (A)Sheet1をSheet3にコピぺ (B)Sheet3の最終行を捉える (C)その次の行を始点にSheet2をコピペ (D)Sheet3の最終行を捉える。その次の行を始点にSheet3をコピペ 以下最終Sheetまでこれの繰り返し。 ーー もうひとつはSheet3での書き出す行番号を保持する変数Kを儲け (A)Sheet1のデータ第1行から最終行まで、Sheet1の上から1行ずつSheet3に各列の値を代入。kには次の行に備えて+1する。 (B)Sheet1が最終行まで行けば、Sheet2のデータ第1行から最終行まで、1行ずつSheet3にSheet2の各列の値を代入。kには次の行に備えて+1する。 この2つの方法がある。 (2)は私がやってみると、非常にむつかしいと思う。 他に良い回答が出ればよいが。 A列だけの例に簡略化している。 Sheet1 項目 a b c d Sheet2 項目 x y z u v Sheet3 項目 k l m ーーー Sheet4 統合表 判りやすいように作業列をそのまま残して見る E列  F列   G列    H列       I列 0 4 4 1 Sheet1!$A$2 0 5 9 1 Sheet1!$A$2 0 3 12 1 Sheet1!$A$2 0 ー   ー 1 Sheet1!$A$2 0 ー   ー    2    Sheet2!$A$2 4 ー   ー 2 Sheet2!$A$2 4 ー   ー 2 Sheet2!$A$2 4 ー   ー 2 Sheet2!$A$2 4 ー   ー 2 Sheet2!$A$2 4 ー   ー 3 Sheet3!$A$2 9 ー   ー 3 Sheet3!$A$2 9 ー   ー 3 Sheet3!$A$2 9 ー   ー 4 Sheet4!$A$2 12 ーは列を揃えるための詰め物(実は空白) E2の式 =COUNTA(Sheet1!A:A)-1 F2の式 =F1+E2 G2の式 =MATCH(ROW()-2,$F$1:$F$4,1) H2の式 ="Sheet" & G2 & "!$A$2" I2の式 =INDEX($F$1:$F$100,G2,1) これらを適当行数下方向に式を複写 結果 上記の通り。 以上で下準備が完了。 ーー A2に =OFFSET(INDIRECT(H2),ROW()-2-I2,0) 下方向に式を複写 結果 A2:A13 a b c d x y z u v k l m この式 =OFFSET(INDIRECT(H2),ROW()-2-I2,0) をE-I列の式で1つ1つ置き換えると、非常に長い式になるが、1つの式になる。 ・1列で考えたが、普通は多列データでそのときの修正箇所 ・Sheet4に多めに事前に式を入れておくとき、変なデータが出ないようにする対策。 ・シート名がSheet1などで無い場合の修正 など他にも難題が控えていて、上記では手をつけていない。 とりあえずここで措く。

noname#102081
質問者

補足

すごく丁寧に書いて下さってありがとうございます。 すごく大変そうですね。。 やりたい事は、sheet1,sheet2に入力をしたらsheet3に自動的に統合されたものが出力されるようにしたいです。

関連するQ&A

  • 別のシートにデータを出す方法

    シート1に 番号 A1に1 A2に2 A3に3 A4に4 データ↓ B1に43 B2に45 B3に47 B4に55 C1に733 C2に890 C3に826 C4に94 D1に57 D2に67 D3に41 D4に52 E1に301 E2に104 E3に719 E4に441 という表があるとします。 番号1の場合は、B1の43、C1の733、D1に57、E1に301というデータです。 シート2の、 A3に、1という数字(シート1のA1の、1という番号)をいれれば、 シート2の B3に、シート1の、B1の43というデータ。 C3に、シート1の、C1の733というデータ。 D3に、シート1の、D1の57というデータ。 E3に、シート1の、E1の301というデータ。 がでるようにしたいのですが、 VLOOKUPを使ってできますか? どのような関数の立て方したらいいでしょう? XPのExcel2003です。 よろしくお願いしますm(_ _)m

  • エクセルで複数のシートからデータを集計したい。

    エクセルで複数のシートから、あるデータを取り出し、別のシートに集計したいのですが、関数を入力すると莫大な量になってしまいました。 関数とは別の方法で集計する方法をご教授お願いします。 1日~31日のシートがあります。 シート1日内容は A   B    C    D      E     1  NO  原因(1) 原因(2)  原因(3)   2 101   10       15   (b2+c2+d2)  3 105   20   40       (b3+c3+d2) 4 108       20   100 (b4+c4+d4) といった内容です。 1日から31日のセルA2などは固定した数値でありません。 なんで、例えばA3に101が入っている場合があります。 集計シートは A   B    C    D      E     1  NO  原因(1) 原因(2)  原因(3)   2 101               (b2+c2+d2)  3 102               (b3+c3+d2) 4 103              (b4+c4+d4) のようになってます。 B2に=SUMIF('1日'!A2:A4,A2,'1日'!b2:b4)+SUMIF('2日'!A2:A4,A2,'2日'!b4:b4)+・・・・・が31日のシート分まで作成するとファイルが重くなりすぎてしまい困っております。 よろしくお願いします。

  • sheet1、sheet2の値をsheet3に集めたい。

    エクセルについて教えてください。 山田君のテストの結果 sheet1に、中間テスト結果A1B1C1D1E1、 sheet2に、期末テスト結果A1B1C1D1E1があり、 sheet3のA1B1C1D1E1、A2B2C2D2E2に 移動させていと考えています。 されに、小島さんのテスト 中間テスト結果が、sheet1のA2B2C2D2E2、 期末テスト結果が、sheet2のA2B2C2D2E2 にあり、それら2つを sheet3のA3B3C3D3E3、A4B4C4D4E4 に続けて移動させたいです。 実際は、2人だけではなく、 約200人以上を続けてsheet3に集めたいと思っています。 連続的に集めるためには、 どうすればよいか教えてください。 よろしくお願いします。

  • 各シートのデータを集めたいのですが・・・

    【sheet2】            【sheet3】  C    H         C     H 4さくら 10         4バラ 22 5つばき 20         5もも 40 6すみれ 35         6うめ 50 7レモン 25         7ゆり 30 ・・・              8きく 15                  ・・・ ★同じ表を使って作成しています。 ★同じようなsheetが50枚くらいあります。 【sheet1】にデータを集めたいのですが・・・ D1に"さくら"、E1に"10"、F1に"つばき"、G1に"20"、H1に"すみれ",I1に"35" D2に"レモン"、E2に"25"・・・・【sheet2】のデータ D3に"バラ"、E3に"22"と【sheet3】のデータを集計したいのです。 〔sheet2!c4〕〔sheet2!H4〕とセル1個づつに設定するのは大変なので、 数式があればお教えいただきたいのですが・・・ よろしくお願いいたします。

  • エクセルでの複数シートの比較

    【シート1】 A B C D 1 A社 B社 C社 D社 2 50 30 20 80 3 あ い う え 4 aa bb cc dd 【シート2】 A B C D 1 A社 B社 C社 D社 2 50 30 20 80 3 あ い う こ 4 aa bbb cc dd こういった風に、基本的に同じデータ構造で作られたデータがあった時に 2つのシートで、入力されてるデータが違うかをチェックしたい時、 (ここではD3とB4のセルのデータが書き換わってる) どういった風なやり方が考えられますか? 方法としては、関数、マクロ、VBA等あると思いますが、 当方初心者に毛のはえた程度のレベルですので、 関数ぐらいしか分かりません(-_-;) ●同一ブック内にあるシートの比較 ●別ブック内にあるシートの比較   の2種類が知りたいです。 ○ここではD3とB4のセルの内容が違うということが分かればいいのです。  (D3・・・【シート1】え、【シート2】こ)←ここまで分かると必要はないです。 よろしくお願い致します。

  • Excelで表のセルの操作

    Excelのファイルがあります。 例として sheet1: ********************************************* Jan-O4 Feb-04 Mar-04 Apr-04 a1-------b1------c1-----d1 a2-------b2------c2-----d2 a3-------b3------c3-----d3 May-04 Jun-04 e1-------... e2-------... e3-------... ********************************************* (注:-は空白の事です。) sheet2: ********************************************* Feb-04 Mar-04 Apr-04 May-04 b1------c1-----d1------e1 b2------c2-----d2------e2 b3------c3-----d3------e3 Jun-04 July-04 ...----... ...----... ...----... **************************************** (注:-は空白の事です。) sheet1からsheet2ができるようにしたいです。 (毎月同じようなの操作の繰り返しです) すなわち、来月になるとsheet1の最初の月のデータを削除して、残りのデータをsheet2にコピー、最後sheet2に新しい月のデータを入力する、データの量はいつも半年のデータです、表のデザインも同じです。 ただ、実際データの量が多いので、普通のセルコピーのようなのやり方、時間が掛かります。 ほかにいい方法がありますか?教えてください! できれば、サンプルも欲しいです。 お願いします。

  • エクセルVBAの問題?

    Excelのファイルがあります。 例として sheet1: ********************************************* Jan-O4 Feb-04 Mar-04 Apr-04 a1-------b1------c1-----d1 a2-------b2------c2-----d2 a3-------b3------c3-----d3 May-04 Jun-04... e1-------... e2-------... e3-------... ********************************************* (注:-は空白の事です、04は2004年の事です。) sheet2: ********************************************* Feb-04 Mar-04 Apr-04 May-04 b1------c1-----d1------e1 b2------c2-----d2------e2 b3------c3-----d3------e3 Jun-04 July-04 ...----... ...----... ...----... **************************************** (注:-は空白の事です。) sheet1からsheet2ができるようにしたいです。 (毎月同じようなの操作の繰り返しです) すなわち、来月になるとsheet1の最初の月のデータを削除して、残りのデータをsheet2にコピー、最後sheet2に新しい月のデータを入力する、データの量はいつも半年のデータです、表のデザインも同じです。 ただ、実際データの量が多いので、普通のセルコピー、シートコピーのようなのやり方、時間が掛かります。 ほかにいい方法がありますか?(VBAなど?) 教えてください! できれば、サンプルも欲しいです。 お願いします。

  • 4元連立方程式について

    Excelで方程式を解いたのですがひとつだけ答えが合わないのです。どなたかこの式の違うところを教えてください。 5x-2y+4z+3m=75 x+3y-5z-m=-36 4x-3y+z+4m=51 3x+5y-3z-2m=-12 Excel上での計算式↓ =(A1*E2*C3*D4-A1*E2*C4*D3-A1*E3*C2*D4+A1*E3*C4*D2+A1*E4*C2*D3-A1*E4*C3*D2-A2*E1*C3*D4+A2*E1*C4*D3+A2*E3*C1*D4-A2*E3*C4*D1-A2*E4*C1*D3+A2*E4*C3*D1+A3*E1*C2*D4-A3*E1*C4*D2-A3*E2*C1*D4+A3*E2*C4*D1+A3*E4*C1*D2-A3*E4*C2*D1-A4*E1*C2*D3+A4*E1*C3*2+A4*E2*C1*D3-A4*E2*C3*D1-A4*E3*C1*D2+A4*E3*C2*D1)/(A1*B2*C3*D4-A1*B2*C4*D3-A1*B3*C2*D4+A1*B3*C4*D2+A1*B4*C2*D3-A1*B4*C3*D2-A2*B1*C3*D4+A2*B1*C4*D3+A2*B3*C1*D4-A2*B3*C4*D1-A2*B4*C1*D3+A2*B4*C3*D1+A3*B1*C2*D4-A3*B1*C4*D2-A3*B2*C1*D4+A3*B2*C4*D1+A3*B4*C1*D2-A3*B4*C2*D1-A4*B1*C2*D3+A4*B1*C3*D2+A4*B2*C1*D3-A4*B2*C3*D1-A4*B3*C1*D2+A4*B3*C2*D1)

  • excelでデータを別シートに引っ張ってきたい

    excelで値を検索し、返す時、返す値の横にあるデータを違うシートのセルの下に一緒に引っ張ってきたいときの関数(方法)を教えてください。 素人なので分かりにくいと思いますが、お知恵をお借りしたいと思います。 あるデータのシートの検索値を別シートに持ってきたいのですが、シート1をシート2のようにしたいのです。 /は空白 例)シート1 /A B C D E 1(1) □ ○ ▽ ◎ 2 (2) ▼ ■ ◇ ◎ シート2 / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 分かりにくいかもしれませんが、 シート1の(1)(A1)を検索すると、シート2(B1)に□(これはVLOOKで引っ張ってこれるのはわかります。) 次にシート1の(C1)○をシート2の(B2)へ持ってきたいのです。シート1(D1)(E1)はシート2の(C2)(D2)へ。 しかもシート1のC列は空白セルもあり、シート1のC列が空白の場合、下にずれることなくシート1の(D1)(E1)はシート2の(C1)(D1)へ。下記<図a>のようになるようにしたいのです。 そして、シート2のA列に検索値として入力する(1)や(2)の値は連番ではなく、(2)の次に(5)に飛んだりします。(2)の行のC列にデータがあっても、(5)のC列にデータはないこともあります。<図b> <図a> /A B C D 1 (1) □ ▽ ◎ 2 (2) ▼ ◇ ◎ <図b> / A B C D 1 (1) □ 2 /○ ▽ ◎ 3 (2) ▼ 4 /■ ◇ ◎ 5 (5) □ ▽ ◎ 6 (7) ▼ ◇ ◎ vlookとかCLUMN関数とか考えてはみたのですが、どうもうまくいきません。 毎回作成するデータなのですが、毎回コピペで作成しています。 とても面倒なので(1)を検索したらデータが一瞬で検索できるようにしたいと試みてはみたものの、私の知識では不可能でした。 関数では無理なのでしょうか。。。 関数はあまり詳しくないので分かりやすい方法があれば、教えていただければ助かります。 関数に詳しい方、よろしくおねがいいいたします。 関数にはこだわっていません。違う方法があればそれも含めておねがいいたします。

  • エクセルで2枚のシート参照で行列を入れ替える方法

    Sheet1のB6~B505の参照を Sheet2のC3,D3,E3・・・・と行う必要があります。 (Sheet1のB6がSheet2のC3,Sheet1のB7がSheet2のD3という風にです) 同様にSheet1のC6~C505の参照を Sheet2のC4,D4,E4・・・・と以降相当な回数行います。 効率的にCOPY可能な関数を教えて頂けますでしょうか、よろしくお願いします。

専門家に質問してみよう