• 締切済み

複数シートのデータを別シートに結合させたい

複数シートのデータを別シートに結合させたい Excelの2つのシートに以下のようなデータがあります。 シート1       シート2 名前  金額1     名前   金額2 aaaa  100      aaaa  100 bbbb  100      cccc  200 これをシート3に新たに以下のように作りたいんです。 名前  金額1  金額2 aaaa  100   100 bbbb  100 cccc       200 シート1と2の名前は重複しているものもあり、 名前を基準にして重複しているものは、両方データを 重複してないものは、それぞれのデータのみをひろいたんですが、 件数が多いため、どのようにするのが一番効率よくできるのか わからないんです。 Accessへシートをインポートとして、クエリでなんとか できないものかと考えたのですが、いまいちうまくできません・・・。 元がExcelのデータなので、Excelの関数などを使って出来る方法が あればいいんですが、ExcelかAccessで効率よく出来る方法を 教えていただけないでしょうか? よろしくお願いします!

みんなの回答

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

こんばんは! 参考になるかどうか判りませんが・・・ 質問文によるとデータ量がかなり多いようなので、あえて配列数式やSUMPRODUCT関数を使わずにやってみました。 ↓の画像で説明します。 準備作業として、Sheet2のA・B列の間に1列挿入します。 まず、Sheet1のA・B列すべてをSheet3のE・F列にコピー&ペーストします。 次に先ほど1列挿入し、B列が空白になっているSheet2のA~C列のデータをSheet3の最終行以下にコピー&ペーストします。 すると画像のSheet3のE~F列のようになるはずです。 これに作業用の列を1列使います。 作業列H2セルに =IF(COUNTIF($E$2:E2,E2)=1,ROW(),"") という数式をいれ、オートフィルで下へずぃ~~~!っとコピーします。 結果のSheet3のA2セルに =IF(COUNT(H:H)<ROW(A1),"",INDEX(E:E,SMALL(H:H,ROW(A1)))) B2セルに =IF($A2="","",SUMIF($E:$E,$A2,F:F)) という数式をいれ、隣のC2セルまでコピー 最後にA2~C2セルを範囲指定し、C2セルのフィルハンドルで下へコピーすると 画像のような感じになります。 尚、名前の昇順に表示させたい場合はSheet1・Sheet2のデータをあらかじめ昇順に並び替えしておきます。 これで当方使用のExcel2003であれば約6万5000行までExcel2007であれば100万以上のデータがあっても対応できると思います。 以上、ちょっと強引な方法ですが 他に良い方法があれば読み流してくださいね。m(__)m

usausa125
質問者

お礼

画像付で教えていただきありがとうございます! 試してみたらできました。 使ったことのない関数もあるので、じっくり意味を調べて 理解しようとおもいます。 ありがとうございます。

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

VBAでやる課題だと思う。 ーー 関数ばかり言っているが、適した課外課題で無いと、式は複雑になって、分かりにくい場合が多い。 ーー メニューのデーター統合の機能でやってみる。 例データ Sheet1 氏名 計数1 a 11 b 12 c 13 e 10 f 5 d 35 Sheet2 氏名 計数2 a 11 b 12 c 13 e 10 d 5 g 45 両シートで行数は同じでなくて良い。内容は似た計数でもシートごとに別名をつけること。 同じ項目名にすると足されたりする。 ーーー Sheet3で 結果を出す左上済む隅セルをA1(何処でも良いが)として選択。 データー統合 集計の方法 合計 範囲選択ボタンでSheet1のデータのある範囲A1:C7を指定。 追加ボタンクリックで 統合元ボックスにセットされる ーー 範囲選択ボタンでSheet2のデータのある範囲A1:C7を指定。 追加ボタンクリックで 統合元ボックスににセットされる ーー 統合元にセットれた範囲は Sheet1!A1:B7 Sheet2!A1:B7 -- 統合の基準 上端行、左端行の両方チェック OK 結果 Sheet3 - 計数1 計数2 a 11 11 b 12 12 c 13 13 e 10 10 f 5 d 35 5 g - 45 -は空白セル(左寄せ表示防止)。

usausa125
質問者

お礼

分かりやすく教えていただきありがとうございます! 試してみたら、できました!感動です。 統合という機能で出来るんですね。 とても助かりました。 どうもありがとうございます!

回答No.2

>ExcelかAccessで効率よく出来る方法を 効率よく作るということなら、ピボットテーブルや統合が使えます。

usausa125
質問者

お礼

画像付きでありがとうございます。 統合やピボットでできるんですね! 複数シートのピボットは使った事がなかったので、驚きました。 ありがとうございます!

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

シート1およびシート2ではA列に名前、B列に金外1および金額2の項目名がそれぞれ入力されておりデータは2行目から下方に入力されているとします。 それぞれのシートには作業列を設けます。 シート1のC2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(A$2:A2,A2)=1,MAX(C$1:C1)+1,"") シート2のC1セルには次の式を入力します。 =MAX(Sheet1!C:C) C2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(Sheet1!A:A,A2)>0,"",IF(COUNTIF(A$2:A2,A2)=1,MAX(C$1:C1)+1,"")) そこでお求めの表ですが例えばシート3のA1セルには名前、B1セルには金額1、C1セルには金額2と項目名を入力します。 A2セルには次の式を入力してC2セルまでオートフィルドラッグしたのちに下方にもオートフィルドラッグします。 =IF(ROW(A1)>MAX(Sheet2!$C:$C),"",IF(ROW(A1)<=MAX(Sheet1!$C:$C),IF(COLUMN(A1)<=2,INDEX(Sheet1!$A:$B,MATCH(ROW(A1),Sheet1!$C:$C,0),COLUMN(A1)),IF(COLUMN(A1)=3,IF(COUNTIF(Sheet2!$A:$A,$A2)=0,"",INDEX(Sheet2!$B:$B,MATCH($A2,Sheet2!$A:$A,0))),"")),IF(ROW(A1)<=MAX(Sheet2!$C:$C),IF(COLUMN(A1)=1,INDEX(Sheet2!$A:$A,MATCH(ROW(A1),Sheet2!$C:$C,0)),IF(COLUMN(A1)=3,INDEX(Sheet2!$B:$B,MATCH(ROW(A1),Sheet2!$C:$C,0)),"")))))

usausa125
質問者

お礼

教えていただき、ありがとうございます。 いろんな関数がでてきているので、じっくり意味を調べ 理解しながら、試してみます。 ありがとうございました。