• ベストアンサー

【VBA】重複データがあったら印をつける

H列に重複データがあったら、B列に丸印を付けたいです。 重複データのうち、1件に印をつけることはできました。(Do LoopとIf文で) (例えば、Aという重複データが2つあったら、そのうちの1つに印はつきました) しかしながら、重複データ2つ共に印を付けるように出来ません。 H列は可変、また並べ替えをしており、上下のデータを確認すれば重複が分かる状態です。 どなたか教えていただけますでしょうか。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#2です。 回答に、無駄な範囲指定している部分 がありましたので、下記に訂正します。 c = Application.WorksheetFunction.CountIf(Range("h2:H" & lr), Cells(i, "H")) に訂正します。 ーー Application.WorksheetFunction.関数名の利用は、エクセルのワークシート関数とは関数とは機能的に使い方が別だとおもう。VBAの関数を使っていると馬鹿にしないでね。小生は、長年の経験で、よく考えて回答しているよ。 別のやり方もあるが、重複行の全部に、印をつけるなら、これが最も簡潔なコードと思う。処理速度も、1回の全行読みで完了するので、悪くはないだろう。

jojojo5k
質問者

お礼

ご丁寧にありがとうございます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

関数COUNTIFを使うのが一番コードが簡単だろう。 両方や複数の行に印を付ける場合、単純な繰り返し判別で済む。 http://www2.moug.net/tech/exvba/0030005.html ーー Sub test01() lr = Range("H10000").End(xlUp).Row For i = 1 To lr c = Application.WorksheetFunction.CountIf(Range("h2:H10000"), Cells(i, "H")) If c >= 2 Then Cells(i, "B") = "●" End If Next i End Sub

jojojo5k
質問者

お礼

ご回答ありがとうございます! 関数であれば、やり方が分かったのですが、マクロだと分からず困っておりました。 参考にさせていただきます。

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.1

データがH列の1行目から下方向に並び、 かつ、ソートしてあるとのことであれば、 マクロによらずとも B1=IF(H1=H2,"重","〇") B2以下は =IF(OR(H2=H3,H2=H1),"重","〇") という計算式でいけるだろと思います。 VBAなら、 Sub abc()  Dim RowCounter As Long  With ThisWorkbook.Sheets(1)      RowCounter = 1      Do    If .Cells(RowCounter, 8).Value = "" Then Exit Sub    If RowCounter = 1 Then     If .Cells(RowCounter, 8).Value = .Cells(RowCounter + 1, 8).Value Then      .Cells(RowCounter, 9).Value = "重"     Else      .Cells(RowCounter, 9).Value = "〇"     End If    Else     If ((.Cells(RowCounter, 8).Value = .Cells(RowCounter - 1, 8).Value) Or _       (.Cells(RowCounter, 8).Value = .Cells(RowCounter + 1, 8).Value)) Then      .Cells(RowCounter, 9).Value = "重"     Else      .Cells(RowCounter, 9).Value = "〇"     End If    End If    RowCounter = RowCounter + 1   Loop  End With End Sub

jojojo5k
質問者

お礼

ご回答ありがとうございます! マクロでのやり方が知りたかったので、ご丁寧に記載くださり、非常に助かりました。

関連するQ&A

  • 重複データの削除

    お世話になります。 現在、仕事でお客様のデータ(5万件くらい)を扱っています。 しかしデータをエクセルに取り込むシステムに難があり、同じお客様のデータを重複して取り込んでしまうことがあります。 そこで質問ですが、約5万件あるデータの中から効率よく重複データを削除する方法はありますか? 懸念事項は、同姓同名の方は削除してはいけないという点です。 データ項目は「名前」「住所」「生年月日」「性別」とあるので、 同姓同名でも生年月日や住所で判定することができます。 ちなみに私の考えは、 A列に名前、B列に生年月日とすると・・・ 1)ソート:優先順位はA列⇒B列 2)C列にIF(A1=A2,"重複","OK")として行方向へコピー   D列にIF(B1=B2,"重複","OK")として行方向へコピー   E列にIF(AND(IF(C1="重複",D1="重複")=TRUE,"重複","OK")として行方向へコピー 3)E列で"重複"でフィルタリングし、フィルタされた行の削除 スマートではないですが、私の知識では精一杯です。 何かスマートな方法はないものでしょうか? よろしくお願いいたします。

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

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

  • 重複チェック

    いま、重複チェックをしているのですが、MoveFirstで データをある分だけ調べていて、データが重複してなかったら、データを更新したいのですが、はじめにMoveFirst で、データを調べたので、カレント行が最終行にあると思うので、それを例えば、3行目のデータだったり、5行目のデータを変更したいのですが、よろしくお願いします。 重複チェック rs.MoveFirst   Do While Not rs.EOF    If Text2(0).Text <> rs.Fields(1) Then rs.MoveNext End If Loop rs.Fields(1) = Text2(0).Text

  • 重複データの表示

    教えてください。 ASP(クライアント側)の一部分です。 5件目にエクセルで表示したい列(A~Z)が入っています。 例えばDataの中身は 1: 001,aaa,111,bba,A,1 2: 002,aab,111,bbb,B,5 3: 003,aac,111,bbc,C,1 4: 004,aad,999,bbd,A,2 こんなデータが入ってるとすると3番目の111の重複しているものは1行のABCの列に1~3のデータを入れたいのです。そして4番目は次の行というふうに。 そのために1に入ってる111を別に格納して2のデータと比較。違ったら次の行へ。同じだったらその行のまま。 intCountには30件のデータが入っています。 アドバイスお願いします。 -------------------------------------- intCount = UBound(Data) Dim p ' ページカウント Dim L ' ラインカウント Dim R ' レコードカウント Dim Point ' 編集用ポイント Dim CodeSave ' Aコード退避用 p = 0 L = 2 R = 0 With objExcelSheet While R <= intCount intRow = (L + p * 40) ' カンマを認識しない strData = split(Data(R),",") CodeSave = strData(3) Do Until(CodeSave <> strData(3)) .Cells(intRow,strData(5)).Value = strData(??)  ←わからない・・・ R = R + 1 If R <= intCount Then strData = split(Data(R), ",") Else Exit Do End If Loop L = L + 1 Wend End With --------------------------------------

  • エクセルでデータの「どこで重複か」を見つける

    エクセルでデータが「どこで重複しているか」を見つける方法として 以前質問した際に教えていただいたのが B1セルに次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",IF(COUNTIF(A$1:A1,A1)<=1,"","重複No."&COUNT(A$1:A1,A1))) これで重複があれば上の行から数えてその行のA列に有るデータが何番目の重複であるかがB列に表示されます。 ということでしたがこれには漏れがありました。 =IF(A1="","",IF(COUNTIF(A:A,A1)<=1,"","重複No."&COUNT(A:A,A1))) とすると漏れはありませんが、No.はすべて「0」となるのです。 何番目の重複かが分かる方法はありませんか。

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

    過去ログを使っていろいろ試したのですが、うまくいかなかったので助言お願いします。 データ的には B列 C列 AAA 50 AAA 50 BBB 70 BBB 70 BBB 72 CCC 25 のようなデータあります。 これを「AAA」でC列のデータが同じやつはひとつにするということをやりたいのです。 B列 C列 AAA 50 BBB 70 BBB 72 CCC 25 のようになります。 B列第一優先にC列第二で並べ替えをして、過去ログ参照より、下のデータからループしてくというのを試したのですが、全部削除されてしまいます。 しかし、これでは並べ替えの場合によってはCの重複がおかしくなると思うので、B列参照したほうがいいのかな? 別シートに書き出しタイプでないやり方をしたいと思っています。お助けくださいよろしくお願いします。

  • エクセルの重複データ削除について

    B列に重複している数値が3件あります。 1件のみ消して行は詰めない方法はありませんか データツールの重複データ削除をすると行が詰まってしまいます。 1件のみ表示し空白行にしたい。

  • VBA教えてください。重複データの削除

    エクセルからエクセルへのデータ取り込み、重複データ削除の方法について、とても時間がかかっており、ご教授いただきたいと思い、質問させていただきます。 よろしくお願い致します。 台帳(エクセル)とシステムから出力するcsvファイル(エクセル)があります。 csvファイル(エクセル)のデータを、台帳(エクセル)で管理します。 ‘csvファイル:商品コード、商品名、注文日、納期、などなどA~AZ列まで、1行目は項目名で、その後、1行1商品で2000行ほどデータがあります。 現在進行形のデータが全て出力されるため、台帳にあるデータと重複するものと、新規データがあり、新規データのみを台帳に追加していきたいです。 重複かどうかの判断は、A列の通し番号で判断しています。 台帳:シート4つで進捗を管理しています。 シート(1);csvファイルからデータを取り込むシート      一度出力データ全てを取り込み(※1)、シート(2)、(3)に重複があるデータを削除します(※2)。 シート(2):(1)から次工程にデータを送ったらこちらに移動(0~500行ほどあります) シート(3):(2)から次工程にデータを送ったらこちらに移動(5000行ほどあります) ※1は3秒ほどで完了するのですが、※2は1分近く時間を要しています。 もう少し短くならないかと思うのですが、いかがでしょうか。よろしくお願い致します。早ければ早いほどいいですが、10秒以内を目標にしています。 今は、csvファイルから全データをエクセルに取り込んでから(3秒ほど)、重複削除していますが、csvファイルから取り込むときに、重複データを取り込まないほうがいいのでしょうか。 現状、このような感じです。 Sub 重複削除() Dim i As Long Application.ScreenUpdating = False Application.Calculation = xlCalculationManual ‘BA列にある重複チェックが2以上のとき、削除 For i = 5000 To 5 Step -1  If Worksheets("(1)").Cells(i, 53).Value > 1 Then Rows(i).Delete End If Next i ‘BA列に重複チェックを再設定 Application.Calculation = xlCalculationAutomatic Cells(5, 1).Select Range("BA5") = "IF(A5="""","""",COUNTIF($A$4:$A5,A5)+COUNTIF((2)!$A:$A,A5)+COUNTIF((3)!$A:$A,A5))" Range("BA5").Select Selection.Copy ‘関数を値へ変換 Range("BA6:BA2000").Select ActiveSheet.Paste Application.CutCopyMode = False ‘行幅を整える Rows("5:5").Select Range(Selection, Selection.End(xlDown)).Select Selection.RowHeight = 15.75 Range("A5").Select Application.ScreenUpdating = True '画面描画を静止 End Sub

  • 重複するデータの抽出

    どなたか教えてください。 Sheet1A列に入力されたデータ群と重複するデータを 別sheetから抽出したいのですがやり方がわかりません。 要は、Sheet1A列に10000件のデータが入力されているのですが、それらと重複するデータを別シートから検索したいです。(別シートで10000回検索しない方法が知りたいです。) よろしくお願いします。

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

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

専門家に質問してみよう