我希望能够在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个)
答案 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