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