プロが教える店舗&オフィスのセキュリティ対策術

以下のシート1にある「市区町村」番号をシート2にも表示させたいです。
シート1とシート2ではデータの数も順番も異なっているため、
シート1にある「地域」「業種」「事業所番号」が一致する「市区町村」番号をそのままシート2にも表示させたいです。

シート1
地域 業種 事業所番号 市区町村番号
1   4    31     13102
8   15   75     11102
11    11    1     12101

シート2
地域  業種 事業所番号
8    15   75
11    1   11
1    4    31


以上、よろしくお願いいたします。

質問者からの補足コメント

  • 下の画像のように実際には事業所票シートには45000個ほどのデータがあり、
    そこから「地域」「業種」「事業所番号」の三つが一致する「市区町村」番号を
    抽出し、搬出入票シートの空欄の「市区町村」番号の欄を埋めたいです。

    左が搬出入票シートで、右が事業所票シートです。
    事業所票は重複がありませんが。搬出入票には重複があります。


    よろしくおねがいいたします。

    「Excelで二つのシートのデータの紐付け」の補足画像1
    No.2の回答に寄せられた補足コメントです。 補足日時:2016/08/18 13:59

A 回答 (5件)

こんにちは!



>事業所票シートには45000個ほどのデータがあり・・・
というコトですので、簡単な方法は↓の画像のように作業用の列を設けてみてはどうでしょうか?

まずSheet2の作業列E2セルに
=A2&"_"&B2&"_"&C2
という数式を入れフィルハンドルでダブルクリック!

そしてSheet1のE2セルに
=IFERROR(INDEX(Sheet2!D:D,MATCH(B2&"_"&C2&"_"&D2,Sheet2!E:E,0)),"")
という数式を入れフィルハンドルで下へコピー!
これで画像のような感じになります。

※ 作業列が目障りであれば遠く離れた列にするか
非表示にしておきます。m(_ _)m
「Excelで二つのシートのデータの紐付け」の回答画像4
    • good
    • 0
この回答へのお礼

ありがとうございました。
非常に分かりやすかったです。

お礼日時:2016/08/18 14:51

難しく考えずに、補助列を作ってvlookup関数を入れ込めば出来ます。


複雑な関数を捻り回すと、時間だけ掛って、後でメンテ出来なくなります。
趣味なら良いですが、仕事としてやるなら意味は有りません。
◆左シート(シート名:シート1)に列挿入追加 
・D-E列の間に列追加(現状のE列はF列になる)
・新E2 =B2&C2&D2を入れ、下へコピペ

◆右シート(シート名:シート1)に列挿入追加
・C-D列の間に列追加(現状のD列はE列になる)
・新D2 =A2&B2&C2を入れ、下へコピペ

左シートの新F列に関数を入れて、下までコピペ
=VLOOKUP(E2,シート2!$D$2:$E$999,2,FALSE)
$D$2:$E$999の 999は最終行に修正
「Excelで二つのシートのデータの紐付け」の回答画像5
    • good
    • 0
この回答へのお礼

ありがとうございました。
試すとすぐにできました。
シンプルに考えるの大切だと思いました。

お礼日時:2016/08/18 14:50

D2: =IF(SUMPRODUCT((Sheet1!C$2:C$10=C2)*(Sheet1!D$2:D$10=D2)*(She

et1!E$2:E$10=E2)*ROW(C$2:C$10)),INDEX(Sheet1!F$1:F$10,SUMPRODUCT((Sheet1!C$2:C$10=C2)*(Sheet1!D$2:D$10=D2)*(Sheet1!E$2:E$10=E2)*ROW(C$2:C$10))),"なし")
「Excelで二つのシートのデータの紐付け」の回答画像3
    • good
    • 0

ああ、いけない。


ちょっと訂正します。

訂正一つ目。
配列数式に確定されている状態を示していませんでした。

誤 数式を入力したらShift+Ctrl+Enterで数式を確定するのです。
誤 
誤 こんな感じ。
 ↓
正 数式を入力したらShift+Ctrl+Enterで数式を確定するのです。
正 {=INDEX(シート1!D$2:D$100 , MATCH(A2&"-"&B2&"-"&C2 , シート1!A$2:A$100&"-"&シート1!B$2:B$100&"-"&シート1!C$2:C$100 , 0) )}
正 こんな感じに数式の前後に{ }が付きます。

訂正二つ目。というか、追記。
あと、この数式は見やすいように全角のスペースを入れています。
実際には全角のスペースを削除して入力してください。
この回答への補足あり
    • good
    • 0

考え方はいくつもありますが、自分なら…


「地域」「業種」「事業所番号」のすべてが一致するということなので、これらを結合して1つの値にしてそれを比較します。

A1セルに「地域」
B1セルに「業種」
C1セルに「事業所番号」
D1セルに「市区町村番号」
ならば、
「A2&"-"&B2&"-"&C2」としてこれを比較対象にする。

=INDEX(シート1!D$2:D$100 , MATCH(A2&"-"&B2&"-"&C2 , シート1!A$2:A$100&"-"&シート1!B$2:B$100&"-"&シート1!C$2:C$100 , 0) )
としたいところですが、
これではMATCH関数内の2つ目のパラメータ「シート1!A$2:A$100&"-"&シート1!B$2:B$100&"-"&シート1!C$2:C$100」が正しく認識されません。
しかしこれは、この数式を「配列数式」とすることで解決できます。
数式を入力したらShift+Ctrl+Enterで数式を確定するのです。

こんな感じ。
この数式をシート2のD2セルに入力後、Shift+Ctrl+Enterで確定後、必要な行までフィルでコピーします。
なお、100行以上に渡って設定する必要がある場合は、「A2:A100」「B2:B100」「C2:C100」の「100」の数値を必要な行数と同じ数字か大きい値に変えてください。

ただし!!
範囲内に一致する「地域」「業種」「事業所番号」が無い場合のエラーに関しては、一切処理をしていません。
質問の例では、シート2の「11」「1」「11」に対応するデータがないため「#N/A」のエラーを返します。
それについては自身で対応してみましょう。
エラーに関する関数を使用して処理できます。

・・・余談・・・
基本はINDEX関数とMATCH関数の組み合わせです。
それを配列数式にして対応しています。
INDEX関数とMATCH関数の組み合わせについて、
そして「配列数式」とは何かについて自身で調べて理解したうえで使ってみてください。

なお、
ここで示した数式はExcel2016で動作を確認していますが、それ以前のバージョンでも動作すると思います。
しかしExcel Onlineでは「配列数式」を使うことができませんので、別の手段を使う必要があります。
    • good
    • 0

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