- 締切済み
Excel 複数の項目合致するデータを抽出したい
是非、よろしくお願いいたします。 以下の状況です。 sheet1には A、B、C、Dという4列があります。データは1000行くらいです。 sheet2には A、B、C、Eという4列があります。データは2000行くらいです。 この状況で、sheet1のD列の右に新しい列を作り、 「sheet1の(例えば)A1、B1、C1と合致する行のsheet2のE列データ」を、 sheet2のABC列範囲を検索して抽出したいのです。 項目が一つであればvlookup関数でできるものを「複数項目に合致」のため上手くいきません。 この3列のデータを結合して一つにしてみましたが、結合後のデータが16桁以上のため末尾が「0」になってしまい、正確に検索できません。 何か上記を可能にする方法はないでしょうか? よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! >sheet1には A、B、C、Dという4列があります。データは1000行くらいです。 >sheet2には A、B、C、Eという4列があります。データは2000行くらいです。 とありますので、オートフィルでコピーするのも大変でしょうから、VBAでの一例です。 質問通り、両Sheetともデータは1行目からあるとします。 画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面がでますので ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i, j As Long Dim ws As Worksheet Set ws = Worksheets(2) Application.ScreenUpdating = False Columns(5).ClearContents For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To ws.Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1) = ws.Cells(j, 1) And Cells(i, 2) = ws.Cells(j, 2) _ And Cells(i, 3) = ws.Cells(j, 3) Then Cells(i, 5) = ws.Cells(j, 5) End If Next j Next i Application.ScreenUpdating = True End Sub 'この行まで ※ データ変更があるたびにマクロを実行します。 こんな感じではどうでしょうか? ご希望の方法でなかったらごめんなさいね。m(_ _)m
「sheet1の A1、B1、C1と合致する行」は、必ず sheet2 に1行のみ存在するのですか?
- hallo-2007
- ベストアンサー率41% (888/2115)
>この3列のデータを結合して一つにしてみましたが、 >結合後のデータが16桁以上のため末尾が「0」になってしまい、正確に検索できません。 Sheet2のA、B、Cには数値が入っているのですかね。 現在、どうやって結合されているのかわかりませんが =A1&B1&C1 と関数を使って結合させると文字列になります。 仮にA列に1列挿入して、作業列を準備しておいて Sheet1には =Vlookup(A1&B1&C1,Sheet2!A:D,2,False) とかの関数で検索できるはずです。
- keithin
- ベストアンサー率66% (5278/7941)
シート1のD列に1列挿入して今のD列をE列に移動し, D2に =A2&B2&C2 という式を入れて「結合」します。 こうするとご質問で書かれているような >結合後のデータが16桁以上のため末尾が「0」になってしまい のような事が起こらないことを,まず実際に手を動かして確認してみてください。 また,ABC列の具体的な内容が不明ですが,場合によっては D2 =A2&"_"&B2&"_"&C2 のようにABC列のデータを区切る記号を挿入してやる必要があるかも?しれません。 アナタの実際のデータをよく見て,対応を考えてください。 同様にシート2のD列にも1列挿入して今のシート2のD列E列を一つ右に追いやり, D2に =A2&B2&C2 という式を入れて検索のキーとします。 あとは簡単に シート1のF列に F2 =IF(COUNTIF(Sheet2!D:D,D2),VLOOKUP(D2,Sheet2!D:F,3,FALSE),"該当無し") 以下コピー のように,いつもの検索の式を入れてやればOKです。 #応用1 いまのABCDE列の並びを何かの理由で絶対崩したくないときは,VLOOKUPのための検索のキー列を「左側」に配置できないので, INDEX(Sheet2!E:E,MATCH(結合した検索値,Sheet2!結合した検索値列,0)) のように検索をします #応用2 具体的なデータの内容が不明ですが,シート2のE列が「数値」である場合 ここでご質問でご利用のエクセルのバージョンが明記されていませんが,Excel2007以降を使っている場合は =SUMIFS(Sheet2!E:E,Sheet2!A:A,A2,Sheet2!B:B,B2,Sheet2!C:C,C2) のように計算することも出来ます Excel2003以前を使っているときは =SUMPRODUCT((Sheet2!$A$1:$A$2000=A2)*(Sheet2!$B$1:$B$2000=B2)*(Sheet2!$C$1:$C$2000=C2),Sheet2!$E$1:$E$2000) のように計算することも出来ますが,データ数が少し多いので,Excel2003以前でこの方法はお薦めできません。
- KURUMITO
- ベストアンサー率42% (1835/4283)
「sheet1の(例えば)A1、B1、C1と合致する行のsheet2のE列データ」を、 sheet2のABC列範囲を検索して抽出したいのです。 この文章の意味が分かりにくいですね。例を示してこうなってほしいことを具体的に説明してくれませんか?