VBA 评估 - 匹配
VBA Evaluate - Match
我的以下代码有问题,
如您所见,我正在尝试查找搜索的行值。我有 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)")
我愿意接受任何建议..
这样试试:
Satir_bul = WorksheetFunction.Match ( Egitim_Adi & " & " & SlideNo & " & " & Gorev & ", Check1 & Check2 & Check3, 0)
Here is a bit more about Match.
不行。您应该在 Match 中包含范围的联合。 Read more about Unions here.
您有三个字符串 str1
、str2
、str3
。您有三个搜索区域:rng1
、rng2
和 rng3
。现在,您必须在每个范围内执行以下操作(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
然后您将使用 rng2
和 rng3
执行此操作。
你那里有一大堆问题。 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)")
如果您可以限制范围而不是使用整列,您也会获得更好的性能。
我的以下代码有问题, 如您所见,我正在尝试查找搜索的行值。我有 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)")
我愿意接受任何建议..
这样试试:
Satir_bul = WorksheetFunction.Match ( Egitim_Adi & " & " & SlideNo & " & " & Gorev & ", Check1 & Check2 & Check3, 0)
Here is a bit more about Match.
不行。您应该在 Match 中包含范围的联合。 Read more about Unions here.
您有三个字符串 str1
、str2
、str3
。您有三个搜索区域:rng1
、rng2
和 rng3
。现在,您必须在每个范围内执行以下操作(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
然后您将使用 rng2
和 rng3
执行此操作。
你那里有一大堆问题。 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)")
如果您可以限制范围而不是使用整列,您也会获得更好的性能。