繁体   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