重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Excel 2003です。
関数やメニューにある機能でできると、とても助かります。

2つのシートの情報を統合して、1つのシートにしたいのですが、方法が分からず途方にくれています。どうぞお知恵をお貸しください!!!
---
【GOAL】2つのシートを、「アイテムID」をキーに、マッチング。

1. <シート2>を名寄せして、1アイテム=1行のデータにする
2. <シート1>と、名寄せした<シート2>を、「アイテムID」をキーにマッチングし、<シート1>と<シート2>の情報を、全て1つのシートに統合。

---
▼具体的には、以下のようなデータです。

<シート1> 23,000件ほどのアイテム名リスト

・アイテムはユニークで、重複なしです

【例】
アイテム名,アイテムID
いろは,1111
にほへと,2222
ちるぬ,3333
るを,4444

<シート2>
30,000件ほどのアイテムカテゴリー分け表

・アイテムによって、割り当てられているカテゴリ数が異なる。
・「1行=1アイテム1カテゴリ」で、1アイテムにつき、割り当てられたカテゴリ数分だけ行が発生している。

【例】
アイテムID,カテゴリ名,カテゴリID
1111,エンタメ,aaaa
2222,ビジネス,bbbb
3333,エンタメ,aaaa
3333,趣味,cccc
4444,エンタメ,aaaa

---
▼したいこと。

1. まず、<シート2>を名寄せ。1アイテム=1行のデータにする。

【結果】
1111,エンタメ,aaaa
2222,ビジネス,bbbb
3333,エンタメ,aaaa,趣味,cccc
4444,エンタメ,aaaa

2. アイテムIDで、<シート1>と<シート2>をマッチング

【結果】
いろは,1111,エンタメ,aaaa
にほへと,2222,ビジネス,bbbb
ちるぬ,3333,エンタメ,aaaa,趣味,cccc
るを,4444,エンタメ,aaaa

以上です!
---

エクセルしかない環境で、困っています。どうぞよろしくお願いします!!

A 回答 (3件)

関数式を組み合わせてやる方法もありますが以下の方法が簡単だと思います。



シート2を別シートにコピーして、A列(アイテム名)を挿入します。コピーしたシートのA2セルの式は以下になります。

=IF(ISNA(MATCH(B2,Sheet1!B1:B24000,0)),"",INDEX(Sheet1!A1:A24000,MATCH(B2,Sheet1!B1:B24000,0)))

A2セルをデータ行数分だけコピーします。これでアイテム名がつきました。

重複行を取り除くにはフィルタオプションを使用します。B列(アイテムID)を選択して
「データ」→「フィルタ」→「フィルタオプションの設定」を選択します。「リストまたは選択範囲の…」というメッセージが出たら「OK」でかまいません

「抽出先」は「選択範囲内」を選択し、「重複するレコードは無視する」にチェックして「OK」で重複がないリストになります。
    • good
    • 0

#02です。

訂正です。回答中の式は以下に差し替えてください

=IF(ISNA(MATCH(B2,Sheet1!B$1:B$24000,0)),"",INDEX(Sheet1!A$1:A$24000,MATCH(B2,Sheet1!B$1:B$24000,0)))

この回答への補足

ありがとうございます!

シート2の重複データは、除いてしまわず
名寄せして、情報は引き継ぎたいのです。。

アイテムID,カテゴリ名,カテゴリID
1111,エンタメ,aaaa
2222,ビジネス,bbbb
3333,エンタメ,aaaa
3333,趣味,cccc
4444,エンタメ,aaaa


×
アイテムID,カテゴリ名,カテゴリID
1111,エンタメ,aaaa
2222,ビジネス,bbbb
3333,エンタメ,aaaa
4444,エンタメ,aaaa

 ↓
 ○
アイテムID,カテゴリ名,カテゴリID
1111,エンタメ,aaaa
2222,ビジネス,bbbb
3333,エンタメ,aaaa,趣味,cccc
4444,エンタメ,aaaa

この名寄せがやっかいで・・困り果てています。
どうぞ宜しくお願いします!

補足日時:2006/10/04 13:40
    • good
    • 0
この回答へのお礼

ありがとうございました。

<シート2>の名寄せ(行の再構成)は、IF関数でアイテムID(Bの列)をキーに、とにかく同じ行の横の列へチマチマともってくることで対応しました。

=IF(B2=B3,C3,""),=IF(B2=B4,C4,""),=IF(B2=B5,C5,"")

↑コレを延々と、振り分けられている最大カテゴリ数分だけ横に展開。

<シート1>と<シート2>のマッチングは、これもチマチマとVLOOKUPで、値を移しました。

みなさま、本当にありがとうございました。

お礼日時:2006/10/04 19:18

以下のような方法はいかがでしょうか?



<シート2>
例のデータがA1:C5に入っているものとします。
D1に以下の式を入力してD5までフィルコピー

=COUNTIF(A$1:A1,A1)+10*A1

<シート1>
例のデータがA1:B4に入っているものとします。
C1に以下の式を入力してC4までフィルコピー

=IF(COUNTIF(シート2!$A$1:$A$5,$B1)<(COLUMN()-1)/2,"",INDEX(シート2!$B$1:$B$5,MATCH($B1*10+(COLUMN()-1)/2,シート2!$D$1:$D$5,0)))

D1に以下の式を入力してD4までフィルコピー

=IF(C1="","",VLOOKUP(C1,シート2!$B$1:$C$5,2,0))

C1:D4を選択して必要なだけ右にフィルコピー

あとは全体をコピー-形式を選択して貼り付け-値とするなどして取り出してください。

カテゴリ数が10を超える場合は修正が必要になります(式中の*10を*100などにする)。

この回答への補足

ありがとうございます!!

試してみているのですが、うまくいきません・・。

COLUMN()の範囲指定はしないでこのままでよいでしょうか?

補足日時:2006/10/03 18:12
    • good
    • 0

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