• ベストアンサー

Excel 2007 マクロ 同列のデータの重複チェック

Excel 2007 マクロ 同列のデータの重複チェック A列で重複しているデータをチェックします。 重複しているデータについて、B列にフラグをつけます。 フラグはどの行とどの行が重複しているのかわかるようにしたいです。 そのため重複している行同士ごとにフラグをつけます。 上記の内容はマクロで実現できるのでしょうか。 元データと完成形の画像を添付します。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.4

データを1回だけ読む方法で一案。 見出し(A1,B1) データ(A2~~) マクロ実行前に結果B列のクリアー不要。   '---------------------------------------- Sub Test()  Dim myDic  Dim Cnt As Long  Dim Rng As Range  Dim myRange As Range  Set myRange = Range("A2", Cells(Rows.Count, "A").End(xlUp))  myRange.Offset(0, 1).ClearContents  Set myDic = CreateObject("Scripting.Dictionary") For Each Rng In myRange  If myDic.Exists(Rng.Value) = False Then    If WorksheetFunction.CountIf(myRange, Rng) > 1 Then      Cnt = Cnt + 1      myDic.Add Rng.Value, Cnt      Rng.Offset(0, 1).Value = Cnt    End If  Else    Rng.Offset(0, 1).Value = myDic.Item(Rng.Value)  End If Next Rng End Sub '---------------------------------------------- 以上です。  

hyogara777
質問者

お礼

ご回答ありがとうございました。参考にさせて頂きます。シンプルな内容で助かります。

その他の回答 (3)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

A1セルに型番とありA2セル以降にデータがあるとしたらB2セルには次の式を入力して下方にオートフィルドラッグすればよいでしょう。マクロで処理することもないように思いますが。 =IF(A2="","",IF(COUNTIF(A:A,A2)>1,IF(COUNTIF(A$1:A1,A2)>0,INDEX(B$1:B1,MATCH(A2,A$1:A1,0)),MAX(B$1:B1)+1),""))

hyogara777
質問者

お礼

ご回答ありがとうございました。参考にさせて頂きます。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

バリエーションを二つ追加させていただきます。 なお、B列は事前に空にしておく必要があります。 '連想配列を用いる方法 Sub test2() Dim targetRange As Range, myCell As Range Dim myDic As Object Dim myKeys As Variant Dim strKey As String Dim i As Long, j As Long Set myDic = CreateObject("Scripting.Dictionary") With ActiveSheet Set targetRange = .Range(.Range("A2"), .Range("A" & .Rows.Count).End(xlUp)) End With For Each myCell In targetRange.Cells strKey = myCell.Value If Not myDic.exists(strKey) Then myDic.Add strKey, myCell Else Set myDic(strKey) = Union(myDic(strKey), myCell) End If Next myKeys = myDic.keys j = 1 For i = 0 To myDic.Count - 1 If myDic(myKeys(i)).Cells.Count > 1 Then myDic(myKeys(i)).Offset(0, 1).Value = j j = j + 1 End If Next i Set myDic = Nothing End Sub 'オーソドックスな方法、但し高速化の為配列に入れて処理してみました 'あまり検証してないので、バグがあったら悪しからず Sub test3() Dim targetRange As Range Dim i As Long, j As Long, k As Long Dim buf As Variant Dim hitFlag As Boolean With ActiveSheet Set targetRange = .Range(.Range("A2"), .Range("A" & .Rows.Count).End(xlUp).Offset(0, 1)) End With buf = targetRange k = 1 For i = 1 To UBound(buf, 1) hitFlag = False If IsEmpty(buf(i, 2)) Then For j = i + 1 To UBound(buf, 1) If buf(i, 1) = buf(j, 1) Then buf(i, 2) = k: buf(j, 2) = k hitFlag = True End If Next j End If If hitFlag Then k = k + 1 Next i targetRange = buf End Sub

hyogara777
質問者

お礼

ご回答ありがとうございました。参考にさせて頂きます。

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

こんばんは! A列の2行目以降にデータがありB列に表示させるとします。 無理やりって感じになります。 一例ですが・・・ Sub test() Dim i, j As Long j = Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To j If WorksheetFunction.CountIf(Range(Cells(2, 1), Cells(j, 1)), Cells(i, 1)) > 1 _ And WorksheetFunction.CountIf(Range(Cells(2, 1), Cells(i, 1)), Cells(i, 1)) = 1 Then Cells(i, 2) = WorksheetFunction.Count(Range(Cells(2, 2), Cells(i, 2))) + 1 End If Next i Dim k, L As Long L = Cells(Rows.Count, 1).End(xlUp).Row For k = 2 To L If WorksheetFunction.CountIf(Range(Cells(2, 1), Cells(L, 1)), Cells(k, 1)) > 1 Then Cells(k, 2) = WorksheetFunction. _ VLookup(Cells(k, 1), Range(Cells(2, 1), Cells(L, 2)), 2, False) End If Next k End Sub 2段階でやってみました。 重複数が2以上で初回に出てくるデータ行に1からの連番をB列に表示させ、 その結果を元にもう一度B列に重複数が2個以上の物は VLOOKUPで既出数値を表示するようにしてみました。 以上、参考になればよいのですが 他に良い方法があればごめんなさいね。m(__)m

hyogara777
質問者

お礼

ご回答ありがとうございました。参考にさせて頂きます。

関連するQ&A

  • Excel 2007 重複データのチェックについて

    Excel 2007 重複データのチェックについて A列にあるデータ(約100件)で重複している値がある 行についてB列にフラグをつけます。 やりたいことはどの行とどの行が重複しているのかを すぐに分るようにしたいです。 添付画像のように重複している行に番号をつけていくことは可能でしょうか。 番号は1から順番に増えていきます。 自分は下記を考えましたが、これでは重複している行に「重複データ」と入る だけでわかりづらいです。 =IF(COUNTIF($A$2:A2,A2)>1,”重複データ”,”○”) よろしくお願いいたします。

  • エクセル2010での重複データチェック

    エクセル2010で作成したデータの重複データチェックをしたいです。 顧客コードと、接触日 の両方とも同じデータが入っていれば 最初に出てきた行に1回目 再度出てきたデータ行に重複と表示したいです。 シートの項目(見出し)は下記のようになっています。 A列:顧客コード B列:顧客名 C列:接触日 D列:面談要旨 F列:結果 皆様、年末のお忙しいところ申し訳ありませんが、ご教示ください。 上記説明では、わかりにくいかと思い、スクリーンショットも添付いたします。 よろしくお願いいたします。

  • 【エクセル】データの重複チェック

    次のようなデータが入力されているとします。 A列/B列/C列/D列/E列/F列 1行:都道府県/市区町村/data1/check1/data2/check2 2行:東京/新宿/1/""/1/"" 3行:東京/新宿/2/""/2/"重複" 4行:東京/新宿/3/""/3/"" 5行:東京/渋谷/1/重複/4/"" 6行:東京/渋谷/2/""/5/"" 7行:東京/渋谷/3/""/6/"" 8行:東京/渋谷/4/""/2/"重複" 9行:東京/渋谷/1/重複/7/"" ここで、check1は、 「都道府県」のグループでdata1に重複があれば、「重複」表示をさせます。 また、check2は、 「市区町村」のグループでdata2に重複があれば、「重複」表示をさせます。 例えば、 セルD2=IF(COUNTIF($C$2:$C$4,$C$2:$C$4)>1,"重複","") セルF2=IF(COUNTIF($E$2:$E$9,$E$2:$E$9)>1,"重複","") というように関数を入力して、2行目以下にコピペすればいいのですが、 実際は1万行以上のデータがあり、「都道府県」「市区町村」も多くのグループがあるため いちいち範囲を指定するのも大変です。 そこで、上記関数のように手動で範囲を指定しなくても、 自動で範囲指定をして重複チェックができる良い方法があれば教えてください。 できれば関数がいいのですが、VBAでも構いません。 ご教授のほど、よろしくお願いします。

  • Excel マクロ 重複チェックについて

    Excel マクロ 重複チェックについて Sheet3のA列とB列に製品番号が入っています。 A列とB列を比較して、A列と同じ番号がB列に2個以上ある場合のみ C列にフラグ「1]を入れたいです。 Sub RetsuCheck() Dim i As Long Dim ws1 As Worksheet Set ws1 = Worksheets("Sheet3") '「Sheet3」シートでA列とB列の重複をチェック。 For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row If ws1.Cells(i, "A") = ws1.Cells(i, "B") Then ws1.Cells(i, "C") = 1 End If Next i End Sub 1個の場合には上記マクロで解決するのですが、 2個以上の場合にどうようなマクロを記載すればよいのか アドバイスを頂けませんでしょうか。 よろしくお願いいたします。

  • エクセルのマクロで重複データの削除

    横17列、縦、約1000行の表があります。 4行目が項目で、5行目以降は次のように並んでいます。 A列(日付)、B列~H列(各データ) I列(契約番号)J列~Q列(各データ) 縦の並び順は、ばらばらで、日付順ではありません。しかも結構重複があります。 そこで、I列の商品番号をキーにして、重複をチェックし、重複しているものは、日付が新しいものを生かし、古い方は削除しようと思います。 しかし、手作業でやるにはあまりに多すぎるため、出来ればマクロでやりたいのですが、このように高度なものは、わたしが出来るマクロの記録程度では手におえそうもありません。 どのようにやったらよいのかどなたかお教え願えませんでしょうか?

  • マクロにて重複データの削除を行う方法

    エクセルにてD列、H列において重複が両方に存在する場合に (D列にて重複かつH列にても重複する場合) そのデータを行ごと削除したいのですが、 上記のマクロの記述が分からず困っております。 どなたか方法をご伝授いただけたらうれしいです。

  • Excelで同列に同じ数字が入っている場合の見つけ方

    こんにちは。 仕事でExcel使用中ですが、初心者で非常に困っています。 A列 100 101 102 103 100 102 104 上記の場合、同列内で、【100】と【102】の2つが重複しています。 このような、重複している部分を見つけたいのですが、5000行くらいあるデータなので、ひとつひとつ見つけてはいられません。 どのような方法で、重複を見つけることができるでしょうか? よろしくお願い致します。

  • エクセル2007の[重複の削除]をエクセル2003でしたいです。

    列データーが10ほどあり、ある特定の列が2つや3つを条件に重複してる場合は削除をしたいです。 できればチェックボックスのようなものがあって、毎回違った特定列を条件にしたいです。 列データは減らせません。 マクロでやり方が解ればくめるかと思ったのですが特定の列を指定して、重複を探し削除するという方法が思いつきません。 エクセル2007の[重複の削除]という機能できるようですが、エクセル2003などで実現する方法はないでしょうか?

  • Excelの難しい重複チェックについて悩んでいます

    Excelの難しい重複チェックについて悩んでいます。 ★本文     列A     列B     列C     行1  愛      青      パンチ 行2  愛      勇気     友達    行3  勇気     愛      友達   行4  勇気     弁護士    正義    行5  勇気     愛            行6  アイ     ユウキ    トモ    行7  ユウキ    トモ     アイ     ExcelのA列~C列に上記のようにキーワードが記載されているとします。 記載されているキーワードは同一で並び順のみ違うものは重複として記載する関数を教えていただきたいです。 更に、並び順だけが違う行の2つ目以降の行にのみ「重複」と記載させたいです。 (例)     列A     列B     列C    列D 行1  愛      青      パンチ   行2  愛      勇気     友達    行3  勇気     愛      友達   重複 行4  勇気     弁護士    正義    行5  勇気     愛            行6  アイ     ユウキ    トモ    行7  ユウキ    トモ     アイ   重複 行2と行3は順番が異なるだけですべて同じキーワードが掲載されています。 この時、行3のみに「重複」と記載させたいです。 また、 行6と行7は順番が異なるだけですべて同じキーワードが掲載されています。 この時、行7のみに「重複」と記載させたいです。 この様に表全体のキーワードで重複しているキーワードがあるかないのかチェックしたいです。 様々な関数を調べて組み合わせをしてみましたが、 どうしても出来ませんでした。 ものすごく困っているので、お力になっていただけないでしょうか? 宜しくお願いいたします。

  • 同列にある重複文字列のチェック方法

    Googleスプレッドシート上で同列にある文字列の重複をチェックする方法として、隣のセル(B列)に「=COUNTIF(A$2:A$999;A4)>1」と書く方法を使っています。この方法を使うとA列に重複した文字列を入力すると、重複した文字列横のB列にTRUEと表示されます。 しかしこのやり方だとA列に文字列を入力後、B列もエクセルで言うオートフィルみたいなことをしなければならず面倒なので、スクリプトで重複チェックできないものかと考えています。 ですがJavaScriptは初心者なので書き方が分からず苦戦中です。どなたか、手がかりとなるスクリプトやヒントをご教示いただけませんでしょうか。

専門家に質問してみよう