找到不同单元格的确切值 - Excel - VBA

时间:2016-12-23 10:14:07

标签: excel vba find

我希望能够在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)中的值为5,例如,它将选择范围中包含5的第一行(在本例中为w50)。

是否可以只比较单元格中的数字(因此不包括" w"它仍然存在)。如果没有,我该怎么做才能获得准确的值(所以如果Cells(1, 12)中的值是5,那么它会转到右边5而不是范围中的前5个)

3 个答案:

答案 0 :(得分:0)

你可以“欺骗”一点,将5的值设为“W5”,然后在你的范围内找到匹配。只需添加另一个变量,我们称之为onInit: function () { // onAfterShow hook gets called every time the view is shown this.getView().addEventDelegate({onAfterShow: this._afterShow}, this); }, _afterShow: function () { jQuery.sap.delayedCall(0, this, function () { jQuery('input').blur(); }); } 并添加“W”作为前缀。现在,您可以使用WeekNum2String搜索范围。

Range("F2:F60").Find(WeekNum2String)

注意:您应该使用Dim WeekNum2String As String WeekNum2String = "W" & Cells(1, 12).Value 方法定义范围,然后将其设置为Find结果(而不是Find)。如果没有Activate,方法将允许您捕获错误。

像这样:

Find

答案 1 :(得分:0)

我建议你使用find方法的可选参数,它允许你坚持整个单元格匹配,而不仅仅是文本的某些子集。您想使用LookAt参数,并将其设置为xlWhole。现在没有找到" 5",因为没有单元格匹配" 5"完全。含有" w5"与LookAt匹配:= xlWhole。我知道,论证的命名根本不直观......

此外,如果你只是使用字符串" w5"那么生活会容易得多。在你的搜索中。另一种方法是将w#从查找(搜索)范围中的单元格中剥离出来。这可以通过拆分方法完成。

答案 2 :(得分:0)

xlWhole方法的lookat参数使用Find()值:

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