エクセルVBA 重複を表示したい
A列で重複すると警告するコードを以下のように作成しました。
これを修正してA列で重複して、なおかつB列でも重複した場合警告するコードにしたいのです。
添付した図では「同姓同名あり、確認してください、鈴木一郎、山口」と表示したいのです。
ご教授よろしくお願いします。
Sub test()
Dim myRange As Range
Dim 同一flag As Boolean
Dim MsgStr As String
For Each myRange In Range("A2:A10")
If WorksheetFunction.CountIf(Range("A2:A10"), myRange) > 1 Then
If 同一flag = False Then 同一flag = True
If InStr(1, MsgStr, myRange) = 0 Then
MsgStr = MsgStr & myRange & vbCrLf
End If
End If
Next
If 同一flag = True Then
MsgBox "同姓同名あり" & Chr(13) & _
"確認してください" & Chr(13) & _
vbCrLf & MsgStr
Else
End If
End Sub
No.1
- 回答日時:
アイデア次第で,いくらでもやりようはあります。
例:
Sub macro1()
Dim a, b(), c
Dim res As String
a = Range("A1:B" & Range("A65536").End(xlUp).Row)
ReDim b(1 To UBound(a))
For c = 1 To UBound(a)
b(c) = a(c, 1) & "、" & a(c, 2)
If c <> Application.Match(b(c), b, 0) Then
res = res & vbCr & b(c)
End If
Next c
If res <> "" Then
MsgBox "found " & res
End If
End Sub
ご回答ありがとうございます。
ご教授いただいたコードだとB列が空白でも表示されてしまいます。
A列=B列が重複した場合にのみ表示したいのです。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
たとえば C列に =A2&B2 として下にフィル
コードのA2:A10をC2:C10とかに変更すると単純かもです
ただA10まで必ずデータがある(またはそれ以上ない)とかなら別ですが
For Each myRange In Range("A2:A10")
よりも
m_Rows = Range("A" & Rows.Count).End(xlUp).Row
For Each myRange In Range("A2:A" & m_Rows)
とかにしたほうが良いと思います。
ご回答ありがとうございます。
>たとえば C列に =A2&B2 として下にフィル
>コードのA2:A10をC2:C10とかに変更すると単純かもです
仰るとおり単純化できました。
あと、以下のコードも取り入れさせていただきます。
m_Rows = Range("A" & Rows.Count).End(xlUp).Row
For Each myRange In Range("A2:A" & m_Rows)
No.3
- 回答日時:
最初、同じコードの発想で良いのかと思いましたが、出身地が別だと、違う人ということのようなので、コードがまったく違ってしまいますね。
個人的なことですが、最近は不勉強なので、安直にCollection オブジェクトを使ってしまいました。本来は、このようなスタイル専用のアルゴリズムがあったような気がします。'-------
Sub DupulicateChecking()
Dim rng As Range
Dim ArNames() As String
Dim colNames As Collection
Dim n As Variant, i As Long, j As Long
With ActiveSheet
'スタート範囲
Set rng = .Range("A1", .Cells(Rows.Count, 1).End(xlUp))
End With
ReDim ArNames(0): ArNames(0) = "" 'ダミー
Set colNames = New Collection
For i = 1 To rng.Rows.Count
On Error Resume Next
With rng
n = .Cells(i, 1).Value & "、" & .Cells(i, 2).Value
End With
If Len(n) > 1 Then
colNames.Add i, n
End If
If Err.Number > 0 Then
ReDim Preserve ArNames(j)
ArNames(j) = i & "行目: " & n
j = j + 1
End If
On Error GoTo 0
Next
If ArNames(0) <> "" Then
MsgBox "同姓同名、同出身地あり、確認してください" & _
vbCrLf & Join(ArNames, vbCrLf), vbExclamation
Else
MsgBox "重複はありませんでした。", vbInformation
End If
End Sub
ご回答ありがとうございます。
ご教授いただいたコードで無事、解決しました。
私のレベルではよくわからないコードもあるので、今後勉強します。
お世話様でした。
No.4
- 回答日時:
ANo.1は、"A1、B1"と結合して一度の比較にしてます。
効率いいです。ただ、2度比較できないのは、一致したA列のアドレスを特定できないのかな・・・
A一致B不一致とかは、ANo.1じゃ対応できないので、↓参考になれば。
'a1~4はいずれもアドレス"$B$3"を返します。
a1 = Range("B3").Address
a2 = Range(a1).Address
a3 = Range("A3").Offset(0,1).Address '※縦0,横1移動したセルB3
a4 = Cells(3,2).Address
myRange.Offset(0,1)でB列比較がわかりやすいかと。
データ数でforループして、Cells(i,1)というのもよくある。
.Rowで縦と.Columun横の番号だけ取得も可能です。
No.5
- 回答日時:
ANo.1は、"A1、B1"と結合して一度の比較にしてます。
効率いいです。ただ、2度比較できないのは、一致したA列のアドレスを特定できないのかな・・・
A一致B不一致とかは、ANo.1じゃ対応できないので、↓参考になれば。
'a1~4はいずれもアドレス"$B$3"を返します。
a1 = Range("B3").Address
a2 = Range(a1).Address
a3 = Range("A3").Offset(0,1).Address '※縦0,横1移動したセルB3
a4 = Cells(3,2).Address
myRange.Offset(0,1)でB列比較がわかりやすいかと。
データ数でforループして、Cells(i,1)というのもよくある。
.Rowで縦と.Columun横の番号だけ取得も可能です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
Excel 日付を比較したら、同じ...
-
英数字のみ全角から半角に変換
-
会社PCのメールが更新されない
-
Outlookを立ち上げたらGoogleロ...
-
outlookのメールが固まってしま...
-
Excelで空白以外の値がある列の...
-
ウィンドウィズ メモ帳で日付だ...
-
Excelに貼ったリンクについて E...
-
Microsoft Formsの「個人情報や...
-
Excelで時間計算(負)
-
microsoft office
-
【Excel VBA】PDFを作成して,...
-
エクセルでXLOOKUP関数...
-
マイクロソフト 一時使用コード...
-
Outlookでの時間指定送信機能に...
-
【スプレドシート】目標達成の...
-
Googleのスプレッドシートでシ...
-
Microsoft Officeを2台目のPCに...
-
MicrosoftOfficeについて質問で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【スプレドシート】IMPORTRANGE...
-
【スプレッドシート】指定の日...
-
英数字のみ全角から半角に変換
-
会社PCのメールが更新されない
-
マイクロソフト 一時使用コード...
-
Office 2021 Professional Plus...
-
エクセルで例えば、関数を使っ...
-
Microsoft Formsの「個人情報や...
-
1つのPCに「Excel 2010」「Exc...
-
エクセルで例えば、A1に㈱ベ...
-
理由を教えてください。
-
エクセルでXLOOKUP関数...
-
マイクロソフト オフィスについて
-
VLOOKUP関数について
-
teams設定教えて下さい。 ①ビデ...
-
Googleのスプレッドシートでシ...
-
【Excel VBA】PDFを作成して,...
-
Microsoft365で写真をアルバム...
-
Outlook で宛先が複数の場合の人数
-
Excel テーブル内の空白行の削除
おすすめ情報