• 締切済み

エクセル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,"","×") ""内を適宜変更してみてください。

全文を見る
すると、全ての回答が全文表示されます。
  • chie65535
  • ベストアンサー率43% (8536/19406)
回答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

  • Excelマクロの大量行の処理速度を上げたい

    Excel VBA 勉強中です。 Excel VBA を利用して大量の行の処理をしたいのですが、時間がかかってしまい、場合によっては固まってしまうので困っています。 色々と調べながら自分で作ってみたのですが、少量の行で試しに行った時にはきちんと動いたのですが、大量の行で行った時には固まってしまう(動かなくなってしまう)ので困っています。 転記先(シート1)には番号とコードが入っていて、基データ(シート2)にある番号とコードが一致した場合のみ基シート(シート2)にある日付を転記先(シート1)へ転記させたいと思っています。 ・シート1にもシート2にもそれぞれ、データが10000行ぐらいあります。 シート1(転記先) D列   E列    I列 番号   コード   日付←転記させたいセル 12345   123    4/30 23456   234 34567   345 シート2(基データ) B列   G列    I列 番号   コード   日付 23456   123    3/31 12345   123    4/30 45678   345    5/1 Dim sh1, sh2 Set sh1 = Sheets("シート1")  ’転記先 Set sh2 = Sheets("シート2")  ’基データ d = sh1.Range("A65536").End(xlUp).Row On Error Resume Next For i = 2 To d r = 2 d1 = sh1.Cells(i, 4) & sh1.Cells(i, 5) d2 = sh2.Cells(r, 2) & sh2.Cells(r, 7) Do While d2 <> "" If d1 = d2 Then sh1.Cells(i, 9) = sh2.Cells(r, 9) Exit Do End If r = r + 1 d2 = sh2.Cells(r, 2) & sh2.Cells(r, 7) Loop Next i どこがいけないのか、教えていただけると大変助かります。

  • Excel VBA データの転記

    Excel2003を使用しています。 Sheet1のB1セルとSheet2のB1セルのデータが一致したら、Sheet2のB1セル~E1セルのデータをSheet1のF1セル~Iセルに転記するというコードを書いています。 Sheet1のデータ最終行を取得して、上記の条件を満たさなかったSheet2のB1セル~E1セルのデータをSheet1のデータ最終行の1行下から順に転記するという内容を追加したいのですが、転記先の指定の仕方が悪いのか、希望通りになりません。 どなたか一例を示していただけないでしょうか? スマホからの投稿で、実際に書いているコードを記載できず、分かりづらくて申し訳ないのですが、よろしくお願いします。

  • エクセルで繰り返しデータ入力

    エクセル初心者です。 Sheet1のH列2から20行に毎日複数のデータ入力があり、その入力データはSheet2に日付順で1日から31日までの行を割り当て、転記される設定は可能でしょうか。翌日は又Sheet1のH列2から20行に毎日複数のデータ入力しこの繰り返しです。

  • エクセルで、データのある行だけを抽出したい。

    エクセルのSheet1にデータが入っており、セルが空白でない行のデータのみを、Sheet2に抽出したいと思っています。 Sheet2にあらかじめ関数を入れておく方法にしたいため、関数について教えてください。 タイムテーブルで予定を管理するような表で、A~Hまでにデータが入っています。 予定を入れる際にはE列には必ず入力をするため、E列が空白でない行のみを抽出したいです。 A|B|C|D|E|F|G|H 月|日|時間|… 11|22|10:00|… 11|22|10:30|… 時間枠は10:00~17:00の30分刻みで、1日15行使用するので、1年で5475行まで使用します。 1行目はタイトル行なので、データは2行目から入力しています。 フィルタオプションで抽出する方法や、それをマクロで登録しておく方法は分かったのですが、あとから予定を追加することがあるため、マクロを実行する度にデータが置き換わると困ってしまいます。 また、抽出したSheet2のI列以降には備考などを入力したいため、やはり後から列がずれると困るため、A~H列に関数を入れておく方法で実行したいと思います。 よろしくお願いいたします。

  • Excelの複数Bookでの転記と行移動処理

    Excel2003を使っています。 質問内容のシナリオは以下です。 1)Book1-Sheet1の行単位データをBook2-Sheet1に転記させる。 2)Book2-Sheet1ではデータの入っていない最終行に1)のデータが入る。 3)2)が終わると自動的に次の行に移動する 4)1)~3)を繰り返す(複数あるため) これの2)と3)のVBAをどちらのBookにどのように記載するのかがよくわかりません。 現在はBook1とBook2をどちらも開き、Book1でマクロをで転記しています。 Book2では転記される行を選択し、 次のデータのために手動で(転記された次の)1行を選択しております。

  • エクセルのマクロについて

    マクロのコードについて教えていただきたいと思います。 sheet1のA2に[=today()]の数式があって、その下の表がであります。表にもオートサムなどの関数 B2~H 70まであります。 sheet2の 1行目が日付欄で、この日付とsheet1のA2が一致した時にB2~H 70の表の数値だけを転記することは可能でしょうか。 わかりにくくて申し訳ありませんがコードがわかれば助かります。

  • エクセルでのマッチング

    色々エクセルでのマッチングのページを見ましたが自分の状況に該当するのがなかったので質問させて頂きます。 エクセルでのデータが2つあります。 Sheet1 A列→注文NO B列→金額 C列→製造番号 D列→金額 E列→商品名 Sheet2 A列→注文NO B列→金額 C列→品名 D列→数量 E列→単価 の2つのシートがあります。2つのシートを比較して、 A列の注文NOが一致してたら、Sheet1,Sheet2のG列に”注文NOが一致してます”と記載します。 さらに注文NOも一致し、同じ行の金額も一致したら、”金額も一致してます”とH列に記載します。 できましたら、 注文NOと金額が一致した物に関してSheet2のF列にSheet1の製造番号を記載するようなプログラムを作りたいと思います。 ↓に私が調べた結果、注文NOだけをキーにしてマッチングさせて、動くプログラムがありますしたが、2つをキーにする場合や別シートから一致したデータの一部を持ってくるものは探してもわかりませんでした。 http://www.okweb.ne.jp/kotaeru.php3?q=507722 質問された方と違い、データは人が入れていることもあり、間違いがある可能性があり2つ以上をキーにして、どこの製造番号の物かわかるようなプログラムをできる方教えて頂けませんでしょうか? ちょっと複雑ですのでここに出すべきか迷いましたが、プログラムの組める方、お願い致します。

  • Excel VBAを使った重複行の抜き出しについて教えてください

    以下のような2シートから、重複する「商品番号」のあるsheet1の行を抜き出して、別シートに書き出したいと思っております。 sheet1  |  A   |  B   | C -+--------+-------+----- 1|      |      | -+--------+------+-------- 2|商品番号|商品名|責任者 -+--------+------+-------- 3|  123456|  ガム|山田太郎 -+--------+------+-------- 4| 2345678| チョコ|田中花子 ・・・ sheet2  |  A   |  B   | C -+--------+-------+----- 1|      |     | -+--------+------+-------- 2|商品番号|商品名|責任者 -+--------+------+-------- 3| 3987624|     | -+--------+------+-------- 4| 193678|      | ・・・ そこでVBAを作成したのですが、例えば商品番号「222011001」の行を抜き出したいのに、「22011001」の行も一緒に抜き出してしまいます。 どこがいけないのか、教えて頂けないでしょうか。 作成したVBAは以下の通りです。 VBA初心者で本を見ながら作ったため、大変見にくくなっているかと思います。申し訳ありませんが、どなたかおわかりになる方がいらっしゃいましたら、どうぞ宜しくお願い致します。 Option Base 1 Option Explicit Sub 重複データ抽出書き直し() Dim シート(2) As Worksheet Dim 比較列(2) As Integer Dim 一致セル As Range Dim 検索範囲 As Range Dim i As Integer Set シート(1) = Sheets("sheet1") Set シート(2) = Sheets("sheet2") 比較列(1) = 1: 比較列(2) = 1 シート(2).Activate ActiveCell.CurrentRegion.Select Selection.Offset(1, 比較列(2) - 1) _ .Resize(Selection.Rows.Count - 1, 1) _ .Select Set 検索範囲 = Selection Sheets.Add After:=Sheets(Sheets.Count) シート(1).Activate ActiveCell.CurrentRegion.Select Selection.Resize(1).Copy With Sheets(Sheets.Count).Range("A1") If Application.Version >= 9 Then .PasteSpecial 8 End If .PasteSpecial End With For i = 2 To Selection.Rows.Count Set 一致セル = 検索範囲.Find(Selection.Cells(i, 比較列(1)).Value) If Not 一致セル Is Nothing Then Selection.Offset(i - 1).Resize(1) _ .Copy Sheets(Sheets.Count) _ .Range("A65536").End(xlUp) _ .Offset(1) End If Next i Sheets(Sheets.Count).Activate End Sub

  • EXCELでの行の抽出

    sheet1に   A    B    C    D 1 日付 金額  備考  コード 2 01  1000 あいう    1 3 10  2000 えおか    3 4 20  3000 きくけ    4 5 30  4000 こさし    1 . . . という感じで元データ(100行ほど)が入っています。 これを元にしてsheet2に   A    B    C    D 1  1 2 日付 金額  備考  コード 3 01  1000 あいう    1 4 30  4000 こさし    1 . . . というふうに表示したいのです。 sheet2のセルA1に入っているコードと一致するコードが入っているsheet1の行を抽出してsheet2に行の隙間なく表示させたいのです。 こんなことはできるのでしょうか? メニューからコマンドを選択して・・・という方法ではなく、計算式かマクロで実現したいのです。 エクセル2000、Win98です。よろしくお願いします。

  • エクセルでのマッチング(ちょっと複雑)

    色々エクセルでのマッチングのページを見ましたが自分の状況に該当するのがなかったので質問させて頂きます。 エクセルでのデータが2つあります。 Sheet1 A列→注文NO B列→金額 C列→製造番号 D列→金額 E列→商品名 Sheet2 A列→注文NO B列→金額 C列→品名 D列→数量 E列→単価 の2つのシートがあります。2つのシートを比較して、 A列の注文NOが一致してたら、Sheet1,Sheet2のG列に”注文NOが一致してます”と記載します。 さらに注文NOも一致し、同じ行の金額も一致したら、”金額も一致してます”とH列に記載します。 できましたら、 注文NOと金額が一致した物に関してSheet2のF列にSheet1の製造番号を記載するようなプログラムを作りたいと思います。 シート1は2千件。シート2も同じく2千件くらいで、データはランダムに入ってます。 ↓に私が調べた結果、注文NOだけをキーにしてマッチングさせて、動くプログラムがありますした。ロジックとしてはシンプルで素晴らしいのですが、そっから先自分で組むことができませんでした。 2つをキーにする場合や別シートから一致したデータの一部を持ってくるものは探してもわかりませんでした。 http://www.okweb.ne.jp/kotaeru.php3?q=507722 質問された方と違い、データは人が入れていることもあり、間違いがある可能性があり2つ以上をキーにして、どこの製造番号の物かわかるようなプログラムをできる方教えて頂けませんでしょうか? ちょっと複雑ですのでここに出すべきか迷いましたが、プログラムの組める方、お願い致します。 エクセルで関数を使う方法ではなく、毎月チェックしないといけませんので、マクロで一発!で考えています。 宜しくお願い致します。

専門家に質問してみよう