[英]Excel VBA type mismatch in range concatenation for multiple range match attempt
我正在嘗試使用Application.match查找范圍A1:Z1和A2:Z2中的值匹配的列。 例如,第一行包含不同的水果名稱,第二行包含顏色。 因此,假設我正在尋找帶有藍色香蕉的色譜柱,則應如下所示:
mycolumn = Application.Match("Banana" & "Blue", Worksheet("Coloured_Fruit").Range(A1:Z1) & Worksheet("Coloured Fruit").Range(A2:Z2), 0)
為了匹配以下數據表中的藍色香蕉:
A1:banana B1:apple C1:banana D1:orange
A2:green B2:blue C2:blue D2:green
這應該返回C,因為C列是代表藍色香蕉的列。
但是我遇到類型不匹配的情況。 范圍與進行匹配的代碼在不同的工作表上。 當我只嘗試匹配一行而不匹配兩行時,這種方法很好用。 網絡搜索表明上述行應該有效。
我嘗試對表達式使用Evaluate,但這也不起作用。
有什么建議怎么做?
代碼中的MATCH失敗,因為“&”運算符僅對VBA中的字符串起作用。 在Excel工作表中,如果將“&”作為數組公式的一部分輸入,則可以聯接范圍。
似乎應該在VBA中使用的對MATCH公式的修改也會返回“類型不匹配”錯誤。 其中包括通過將兩個范圍分配給單個范圍變量(Range(“ A1:Z1”,“ A2:Z2”))或使用UNION函數(Union(“ A1:Z1”,“ A2:Z2 “))出於相同的目的。 使用“ .Value”限定任何一個都無濟於事。
以下代碼可以解決問題:
Sub matchit()
Dim mycolumn As Long
Dim oRng1 As Range, oRng2 As Range
With ThisWorkbook.Sheets("Coloured_Fruit")
Set oRng1 = .Range("A1:Z1")
Set oRng2 = .Range("A2:Z2")
.Names.Add Name:="nRng1", RefersTo:=oRng1
.Names.Add Name:="nRng2", RefersTo:=oRng2
mycolumn = Evaluate("IFERROR(MATCH(1,--(nRng1=""Banana"")*--(nRng2=""Blue""),0),0)")
.Names("nRng1").Delete
.Names("nRng2").Delete
End With
End Sub
關注於MATCH表達式(並去除了EVALUATE函數所需的多余雙引號),
由於子例程返回單個值,因此您可能需要考慮將其重鑄為VBA函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.