[英]Find the exact value of a different cell - Excel - VBA
我希望能夠比較VBA中的2個單元格。 我遇到的問題是,它沒有完全匹配。
Dim WeekNum2 As Integer
WeekNum2 = Cells(1, 12).Value
Range("F2:F60").Find(WeekNum2).Activate
U = ActiveCell.Row
Range(Cells(U, 7), Cells(U, 7)).Value = GreenCountP4
Range(Cells(U, 8), Cells(U, 8)).Value = YellowCountP4
Range(Cells(U, 9), Cells(U, 9)).Value = RedCountP4
以上是無法正常運行的代碼部分。 Cells(1,12)
的值是使用=WEEKNUM(K1)
公式生成的,因此根據K1中的日期,它會返回1-52的值。 我希望它采用此值,然后在F2:F60范圍內找到等效值。
在F2:F60
我的值從“ w46”-“ w52”開始依次為“ w1”-“ w52”。 問題是,例如,如果Cells(1, 12)
(1,12 Cells(1, 12)
值為5,它將選擇范圍為5(在本例中為w50)的第一行。
是否可以僅比較單元格中的數字(因此不包括仍存在的“ w”)。 如果不是,我該如何做才能使它獲得准確的值(因此,如果Cells(1, 12)
是5,那么它將轉到右邊的5,而不是范圍中的前5)
您可以“作弊”一點,將5的值設為“ W5”,然后在您的范圍內找到與之匹配的內容。 只需添加另一個變量,我們將其WeekNum2String
並添加“ W”作為前綴。 現在,您可以使用Range("F2:F60").Find(WeekNum2String)
搜索范圍。
Dim WeekNum2String As String
WeekNum2String = "W" & Cells(1, 12).Value
注意 :您應該使用Find
方法來定義一個Range,然后將其設置為Find
結果(而不是使用Activate
)。如果沒有Find
方法將允許您捕獲錯誤。
像這樣:
Dim FindRng As Range
Set FindRng = Range("F2:F60").Find(WeekNum2String)
If Not FindRng Is Nothing Then
U = FindRng.Row
Else
MsgBox "Week number " & Cells(1, 12).Value & " not found in Range"
End If
我建議您對find方法使用一個可選參數,該參數可讓您堅持要匹配整個單元格,而不僅僅是內部文本的某些子集。 您要使用LookAt參數,並將其設置為xlWhole。 現在將找不到“ 5”的任何內容,因為沒有單元格將完全匹配“ 5”。 包含“ w5”的單元格與LookAt:= xlWhole不匹配。 我知道,參數的命名完全不直觀。
此外,如果僅在搜索中使用字符串“ w5”,則生活會容易得多。 一種替代方法是將w移出查找(搜索)范圍內的單元格。 這可以通過split方法完成。
使用xlWhole
值作為Find()
方法的lookat
參數:
Range("F2:F60").Find("W" & WeekNum2, lookat:=xlWhole, LookIn:=xlValues).Activate
U = ActiveCell.Row
此外,您可以避免Select
並直接執行以下操作:
U = Range("F2:F60").Find("W" & WeekNum2, lookat:=xlWhole, LookIn:=xlValues).Row
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.