回答:
OLEDBを使用することが選択肢ではない場合、関数を使用して外積を生成できます。
Option Base 1
Function Cross_Product_range(r1 As Range, r2 As Range) As Variant
Cross_Product_range = Cross_Product_array(r1.Value, r2.Value)
End Function
Function Cross_Product_array(a1 As Variant, a2 As Variant) As Variant
On Error GoTo ErrorHandler
Dim TempArray(), k, m
ReDim TempArray(UBound(a1) * UBound(a2), UBound(a1, 2) + UBound(a2, 2))
k = 1
For i = 1 To UBound(a1)
For j = 1 To UBound(a2)
m = 1
For u = 1 To UBound(a1, 2)
TempArray(k, m) = a1(i, u)
m = m + 1
Next
For u = 1 To UBound(a2, 2)
TempArray(k, m) = a2(j, u)
m = m + 1
Next
k = k + 1
Next
Next
Cross_Product_array = TempArray
Exit Function
ErrorHandler:
Debug.Print Err
End Function
上記の関数がvbaモジュールに追加されたら、
のクロス積を生成する A1:B5 そして C1:D5 目的の細胞を選択し(例:E1:H25)、式を入力してCtrl + Shift + Enterを押します。
=Cross_Product_range(A1:B5,C1:D5)