簡體   English   中英

如何根據 VBA 中的另一個單元格為其他單元格着色

[英]How to color other cells based on another cell in VBA

我對 VBA 的了解有限,所以即使完成這個簡單的任務我也很掙扎。 我想檢查 B 列中的每個單元格,如果該單元格值在另一個工作表的 A 列中重復。然后,如果它在該范圍內具有重復值,則 colors 單元格變為黃色。 我已經讓這部分工作了。 接下來我要做的是為 C、D 和 F 列中同一行中的單元格着色。這部分對我不起作用,它給了我一個類型不匹配錯誤。 對此的任何幫助將不勝感激。

Sub Mark_Duplicates()

    Dim Cell As Variant
    Dim Source As Range
    Dim Source2 As Range
    Dim rownumber As Variant

    Set Source = Range("B1:B1000")
    Set Source2 = Worksheets("Chain").Range("A1:A1000")

    For Each Cell In Source

        If Application.WorksheetFunction.CountIf(Source2, Cell) > 1 Then

            rownumber = ActiveCell.Row
            Cell.Interior.Color = RGB(255, 255, 0)
            Range("C" & rownumber).Interior.Color = RGB(255, 255, 0)
            Range("D" & rownumber).Interior.Color = RGB(255, 255, 0)
            Range("F" & rownumber).Interior.Color = RGB(255, 255, 0)

        End If

    Next

End Sub

根據@BigBen,在您的代碼中要糾正的最明顯的事情是您連接范圍的方式。 您當前使用了算術加法 ( + ),而正確的 VBA 語法是&

除此之外,您也不應該引用ActiveCell 由於您從未激活任何其他單元格,因此引用的行將始終保持不變。 一般來說,根據我的評論,引用一些活躍的東西是不好的做法 而是使用Cell.Row

另一個好的做法是對完整的 integer 數字使用Long數據類型變量,而不是數據類型Variant 將它留給 VBA 來決定變體數據類型的缺點之一是使用Long需要4 個字節,而使用數字的變體需要 22 所以,你正在減慢你的代碼。 事實上,你本身並不需要它。

您也可以一次為一個范圍着色,而不是逐個單元格地着色。 您可以簡單地參考更大的范圍。

最后一點是,您至少從未完全限定Source的引用表,在這種情況下,它將再次引用B1:B1000 ,即ActiveSheet 我個人更喜歡參考工作表CodeName

總而言之,您可以重新編寫代碼,例如:

Sub Mark_Duplicates()

Dim Source1 As Range: Set Source1 = Sheet1.Range("B1:B1000") 'Use a worksheet's CodeName instead of sheet name (which can change)
Dim Source2 As Range: Set Source2 = Sheet2.Range("A1:A1000")
Dim cell As Range

For Each cell In Source1
    If Application.CountIf(Source2, cell) > 1 Then
        Sheet1.Range(Replace("B?:D?,F?", "?", cell.Row)).Interior.Color = RGB(255, 255, 0)
    End If
Next

End Sub

如果您的范圍將增長到更大的數據集,明智的做法是不再遍歷范圍,而是切換到數組,這樣可以加快處理速度。

問題仍然存在,您是否甚至需要 VBA (根據@BigBen),因為您可以通過條件格式來做到這一點(范圍越大,您的項目越慢,因為 CF 每個定義都不穩定)

暫無
暫無

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

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