[英]Compare value of cells of a column in VBA
我在列中的數據如下:
8856
8867
8876
8856
8898
我的目標是比較列的每個單元格,如果值相同則執行if語句。
Private Sub CommandButton2_Click()
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim C1row As Long
Dim C2row As Long
Dim C2TotalRows As Long
Dim CustID As String
Set sht1 = Worksheets("Report")
sht1.Activate
C2TotalRows = Application.CountA(Range("A:A"))
C1row = 2
Do While sht1.Cells(C1row, 3).Value <> ""
CustID = sht1.Cells(C1row, 3).Value
For C2row = 2 To C2TotalRows
If CustID = Cells(C2row, 3).Value Then
MsgBox CustID
Exit For
End If
Next
C1row = C1row + 1
Loop
End Sub
只是假設,我看到C2TotalRows=C2TotalRows = Application.CountA(Range("A:A"))
,由於范圍“ A:A”,它等於1。 因此, For C2row = 2 To C2TotalRows
此循環將永遠不會運行。 嘗試指定另一個單元格范圍。
似乎您想知道CustID(例如8856)在數據中出現的頻率以及在哪個行號出現。 我為此創建了一個簡單的類 cInfo,然后將這些信息放到字典中 。 最后,我只是打印了信息,但您可以添加要運行的代碼
這是類cInfo
Option Explicit
Public rowNr As String
Public ocur As Long
這就是收集信息的代碼
Sub UniqueValues()
Dim dict As Scripting.Dictionary
Dim rg As Range, sngCell As Range
Dim i As Long
Dim lRow As Long
Dim cellInfo As cInfo
lRow = Range("A1").End(xlDown).Row 'Assumption now free rows and at least on entry in row 2
Set rg = Range("A2:A" & lRow)
Set dict = New Dictionary
For Each sngCell In rg
If dict.Exists(sngCell.Value) Then
dict.Item(sngCell.Value).ocur = dict.Item(sngCell.Value).ocur + 1
dict.Item(sngCell.Value).rowNr = dict.Item(sngCell.Value).rowNr & ";" & CStr(sngCell.Row)
Else
Set cellInfo = New cInfo
cellInfo.rowNr = CStr(sngCell.Row)
cellInfo.ocur = 1
dict.Add sngCell.Value, cellInfo
End If
Next
' Do sth here. I will print some info
For i = 0 To dict.Count - 1
Debug.Print "CustID:", dict.Keys(i), dict.Items(i).ocur, "occurence(s) in rows", dict.Items(i).rowNr
Next
End Sub
這與您提供的示例數據很好用
產量
試試這個修改您的代碼:
Private Sub CommandButton2_Click()
Dim sht1 As Worksheet
Dim C1row As Long
Dim CustID As String
Dim R As Range
Set sht1 = Worksheets("Report")
sht1.Activate
C1row = 2
Do While sht1.Cells(C1row, 3).Value <> ""
CustID = sht1.Cells(C1row, 3).Value
Set R = sht1.Range("C:C").Find(CustID, sht1.Cells(C1row, 3))
If R.Row > C1row Then
MsgBox CustID
End If
C1row = C1row + 1
Loop
End Sub
祝你好運,謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.