VBA评估 - 匹配

时间:2017-07-17 12:05:15

标签: excel vba match evaluate

我的代码有问题, 如您所见,我试图找到搜索的行值。我有3个不同的标准(它们之前已定义)和3个不同的范围(也在之前定义)。但不幸的是我无法找到这些行。

在这里你可以看到代码;

Gorev = Worksheets(WS_All).Cells(p, o).Value
SlideNo = Worksheets(WS_All).Cells(p, 34).Value
Egitim_Adi = Worksheets(WS_All).Cells(2, 3).Value
Check1 = Worksheets(j_WS).Range("A:A")   'Egitim_Adi Kontrolü için'
Check2 = Worksheets(j_WS).Range("B:B") 'SlideNo Kontrolü için'
Check3 = Worksheets(j_WS).Range("C:C")  'Gorev Kontrolü için'

Satir_bul = Evaluate("=Match(" & Egitim_Adi & " & " & SlideNo & " & " & Gorev & ", Check1 & Check2 & Check3, 0)")

我对任何建议持开放态度。

3 个答案:

答案 0 :(得分:0)

试试这样:

Satir_bul = WorksheetFunction.Match ( Egitim_Adi & " & " & SlideNo & " & " & Gorev & ", Check1 & Check2 & Check3, 0)

Here is a bit more about Match.

它无效。您应该在匹配中包含范围的联合。 Read more about Unions here.

答案 1 :(得分:0)

您有三个字符串str1str2str3。您有三个搜索区域:rng1rng2rng3。现在,在每个范围内,您必须执行以下操作(cell将是范围变量):

For Each cell In rng1
  'here you determine if one of your strings is contained uisng InStr function
  'if the above condition is satisfied, then get the number of a row
Next cell

您可以使用rng2rng3执行此操作。

答案 2 :(得分:0)

那里有一大堆问题。 WorksheetFunction.Match无法正常工作,因为您正在尝试复制数组公式,因此Evaluate肯定是更好的选择,但您需要为它构建正确的公式字符串。除非你知道三个单元格的内容是否总是文本或数字,否则更容易使用单元格地址而不是担心将值括在引号中:

Gorev = Cells(p, o).address
SlideNo = Cells(p, 34).address
Egitim_Adi = Cells(2, 3).address

Satir_bul = Worksheets(WS_All).Evaluate("=Match(" & Egitim_Adi & "&" & SlideNo & "&" & Gorev & ", '" & j_WS & "'!A:A&'" & j_WS & "'!B:B&'" & j_WS & "'!C:C, 0)")

如果您可以限制范围而不是使用整列,那么您也会获得更好的效果。