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

なぜvar1andvar2を配列として定義しているのですか?

文字列を連結するには、式と同じ&演算子を使用します:(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 に答える