• 締切済み

エクセル2007で重複しない行を抜き出す

シート1、シート2には列行ともびっしりデータが入っています。 しかし、シート1のAJ行とシート2のH行は同じ発注コードが記載されている行であり、 シート1のAJ行とシート2のH行を比較して、一致しないシート1の行を抜き出しシート3に転記したいのです。 どのような方法が考えられるでしょうか。

みんなの回答

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

こんばんは! VBAになってしまいますが、一例です。 Sheet1のデータは1行目からあるとします。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, cnt As Long, c As Range Dim wS1 As Worksheet, wS2 As Worksheet, wS3 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") Set wS3 = Worksheets("Sheet3") Application.ScreenUpdating = False wS3.Cells.ClearContents For i = 1 To wS1.Cells(Rows.Count, "AJ").End(xlUp).Row Set c = wS2.Range("H:H").Find(what:=wS1.Cells(i, "AJ"), LookIn:=xlValues, lookat:=xlWhole) If c Is Nothing Then cnt = cnt + 1 wS1.Rows(i).Copy wS3.Cells(cnt, 1) End If Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 関数でないので、Sheet1・Sheet2のデータ変更があってもSheet3に反映されません。 データ変更があるたびにマクロを実行する必要があります。m(_ _)m

  • malixiang
  • ベストアンサー率38% (10/26)
回答No.2

シート1のAJ列にある発注コードをKeyにしてシート2のH行の発注コードとマッチングさせます。 シート3のA列にシート1のコードをコピーするか A1セル =Sheet1!AJ1で表示させます。 (以降のセルに計算式をコピーします。) シート3のB1セルに =A1=VLOOKUP(A1,Sheet2!$H:$H,1,FALSE) (以降のセルに計算式をコピーします。) 答えがTRUEなら一致、FALSEなら不一致です。 IFやを使って一致は○、不一致なら×と表示させるなら =IF(A1=VLOOKUP(A1,Sheet2!$H:$H,1,FALSE)=TRUE,"○","×") 不一致のみ表示なら =IF(A1=VLOOKUP(A1,Sheet2!$H:$H,1,FALSE)=TRUE,"","×") ""内を適宜変更してみてください。

回答No.1

COUNTIF関数を使って、 「シート2のH1の内容と同じ物がシート1のAJ列に何個あるか?」 「シート2のH2の内容と同じ物がシート1のAJ列に何個あるか?」 「シート2のH3の内容と同じ物がシート1のAJ列に何個あるか?」 (途中省略) 「シート2のH列の最終行の内容と同じ物がシート1のAJ列に何個あるか?」 という感じ、シート2の一番上から一番下まで、すべて個数を数えさせます。 で、数えた結果が「0」になったら「シート2のH列にはあるが、シート1のAJ列に無いもの」と判ります。 こんな感じで、逆の 「シート1のAJ1の内容と同じ物がシート2のH列に何個あるか?」 「シート1のAJ2の内容と同じ物がシート2のH列に何個あるか?」 「シート1のAJ3の内容と同じ物がシート2のH列に何個あるか?」 (途中省略) 「シート1のAJ列の最終行の内容と同じ物がシート2のH列に何個あるか?」 という感じ、シート1の一番上から一番下まで、すべて個数を数えさせます。 で、数えた結果が「0」になったら「シート1のAJ列にはあるが、シート2のH列に無いもの」と判ります。 これで「シート1にしかないもの」と「シート2にしかないもの」がわかるので「オートフィルタ」などで「数えた個数が0個になった物」だけ表示して、コピーペーストでシート3に貼り付けして下さい。

関連するQ&A