電子書籍の厳選無料作品が豊富!

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

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で効率よく出来る方法を
教えていただけないでしょうか?
よろしくお願いします!

A 回答 (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
「複数シートのデータを別シートに結合させた」の回答画像4
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/08/22 03:31

VBAでやる課題だと思う。


ーー
関数ばかり言っているが、適した課外課題で無いと、式は複雑になって、分かりにくい場合が多い。
ーー
メニューのデーター統合の機能でやってみる。
例データ
Sheet1
氏名計数1
a11
b12
c13
e10
f5
d35
Sheet2
氏名計数2
a11
b12
c13
e10
d5
g45
両シートで行数は同じでなくて良い。内容は似た計数でもシートごとに別名をつけること。
同じ項目名にすると足されたりする。
ーーー
Sheet3で
結果を出す左上済む隅セルをA1(何処でも良いが)として選択。
データー統合
集計の方法 合計
範囲選択ボタンでSheet1のデータのある範囲A1:C7を指定。
追加ボタンクリックで
統合元ボックスにセットされる
ーー
範囲選択ボタンでSheet2のデータのある範囲A1:C7を指定。
追加ボタンクリックで
統合元ボックスににセットされる
ーー
統合元にセットれた範囲は
Sheet1!A1:B7
Sheet2!A1:B7
--
統合の基準 上端行、左端行の両方チェック
OK
結果
Sheet3
-計数1計数2
a1111
b1212
c1313
e1010
f5
d355
g-45
-は空白セル(左寄せ表示防止)。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/08/22 03:37

>ExcelかAccessで効率よく出来る方法を



効率よく作るということなら、ピボットテーブルや統合が使えます。
「複数シートのデータを別シートに結合させた」の回答画像2
    • good
    • 1
この回答へのお礼

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

お礼日時:2010/08/22 03:42

シート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)),"")))))
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/08/22 03:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!