簡體   English   中英

查找其他單元格的確切值-Excel-VBA

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

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