簡體   English   中英

比較VBA中列的單元格值

[英]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

祝你好運,謝謝。

參考: Range.Find方法(Excel)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM