0

在名为“Sheet2”的 Excel 工作表的单元格 A1 中,有以下公式(CSE 数组公式)

{=INDEX(Data1, MATCH(F26&G26,Data2&Data3,0),7)}
Data1 = Sheet1!$D$3:$J$604
Data2 = Sheet1!$D$3:$D$604
Data3 = Sheet1!$D$3:$E604

我想在 VBA 宏中重写它,下面是我到目前为止尝试过的(是的,它给了我一个错误(错误:无法分配给数组)

Sub Button1_Click()

Dim var1(1 To 10) As Integer
Dim var2(1 To 10) As Integer

With Application.WorksheetFunction
   var1 = .Match((F26 And G26), (Worksheets("Sheet1").Range("D3:D604") And Worksheets("Sheet1").Range("E3:E604")), 0)
   var2 = .Index(Worksheets("Sheet1").Range("D3:J604"), var1, 7) 
   Range("A1").Value = var2
End With

End Sub

请问有什么建议/更正吗?

4

1 回答 1

0

你为什么将var1和定义var2为数组?

要连接字符串,请使用与&公式相同的运算符:(F26 & G26)
要连接范围,请使用以下Application.Union()方法:Application.Union(range1, range2)

我从函数中假设,您想要返回您所在区域中与 F26 和 G26 中的值匹配的所有地点的数组

这将是我的尝试:

Option Explicit

Sub Button1_Click()
Dim Values()
Dim FindData
Dim Counter As Long
Dim DataPoints As Long
Dim ReturnData()
ReDim ReturnData(1)
DataPoints = 1

Values = Application.Union(Range("D3::D604"),Range("E3:E604"))
FindData = Range("F26").Value & Range("G26").Value

For Counter = LBound(Values) To UBound(Values)
    If findata = (Values(Counter, 1) & Values(Counter, 2)) Then
        ReDim Preserve ReturnData(DataPoints)
        ReturnData(DataPoints) = Counter
        DataPoints = DataPoints + 1
    End If
Next

Range("A1:A" & DataPoints) = ReturnData

End Sub
于 2013-01-22T22:15:23.070 回答