excel-vba
ある範囲内の重複する値の検索
サーチ…
前書き
特定の時点で、データの範囲を評価することになり、重複したデータをその中に配置する必要があります。より大きなデータセットの場合、VBAコードまたは条件付き関数のいずれかを使用して、さまざまなアプローチを取ることができます。この例では、ネストされた2つのfor-nextループ内で単純なif-then条件を使用して、範囲内の各セルがその範囲内の他のセルと等しいかどうかをテストします。
ある範囲で重複を見つける
次のテストでは、重複する値についてA2からA7までの範囲です。 備考:この例は、ソリューションへの最初のアプローチとして考えられるソリューションを示しています。範囲よりも配列を使う方が速く、コレクションや辞書やxmlメソッドを使って重複をチェックすることもできます。
Sub find_duplicates()
' Declare variables
Dim ws As Worksheet ' worksheet
Dim cell As Range ' cell within worksheet range
Dim n As Integer ' highest row number
Dim bFound As Boolean ' boolean flag, if duplicate is found
Dim sFound As String: sFound = "|" ' found duplicates
Dim s As String ' message string
Dim s2 As String ' partial message string
' Set Sheet to memory
Set ws = ThisWorkbook.Sheets("Duplicates")
' loop thru FULLY QUALIFIED REFERENCE
For Each cell In ws.Range("A2:A7")
bFound = False: s2 = "" ' start each cell with empty values
' Check if first occurrence of this value as duplicate to avoid further searches
If InStr(sFound, "|" & cell & "|") = 0 Then
For n = cell.Row + 1 To 7 ' iterate starting point to avoid REDUNDANT SEARCH
If cell = ws.Range("A" & n).Value Then
If cell.Row <> n Then ' only other cells, as same cell cannot be a duplicate
bFound = True ' boolean flag
' found duplicates in cell A{n}
s2 = s2 & vbNewLine & " -> duplicate in A" & n
End If
End If
Next
End If
' notice all found duplicates
If bFound Then
' add value to list of all found duplicate values
' (could be easily split to an array for further analyze)
sFound = sFound & cell & "|"
s = s & cell.Address & " (value=" & cell & ")" & s2 & vbNewLine & vbNewLine
End If
Next
' Messagebox with final result
MsgBox "Duplicate values are " & sFound & vbNewLine & vbNewLine & s, vbInformation, "Found duplicates"
End Sub
必要に応じて、この例を変更することができます。たとえば、nの上限は、範囲内のデータを含む最後のセルの行の値にすることができます。True If条件の場合のアクションを編集して複製を抽出することができます他のどこかの価値。しかし、ルーチンの仕組みは変わらないだろう。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow