web-dev-qa-db-ja.com

クロス結合またはデカルト積をExcelで実行する方法はありますか?

現時点では、一般的なデータベースは使用できないため、一時的にExcelを使用しています。何か案は?

の enter image description here

13
user1248831

ここには、dim1(ABC)、dim2(123)、dim3(XYZ)の3つの次元があります。

これは、VBAを使用せずに標準のExcelを使用して2次元のデカルト積を作成する方法です。

1)dim1を垂直に、dim2を水平にプロットします。交差のディメンションメンバーを連結します。

Step 1 - plotting dimensions

2)データのピボット解除。 ALT-D-Pを使用してピボットテーブルウィザードを起動します(Altを押さないで、1回押します)。 「複数の統合範囲」を選択します->単一のページを作成します。->すべてのセル(ヘッダーを含む!)を選択してリストに追加し、[次​​へ]を押します。

step2 - unpivoting data

3)結果のを垂直にプロットし、連結された文字列を分解します

step 3 - disassemble strings

ほら、クロスジョインです。別の次元を追加する必要がある場合は、このアルゴリズムをもう一度繰り返します。

乾杯、

コンスタンティン。

7

この記事は、Excelでクロス結合を実行するのに役立ちました。

http://www.excelguru.ca/blog/2016/05/11/cartesian-product-joins-for-the-Excel-person/

ExcelのMicrosoft Power QueryにMicrosoft Addが必要 https://www.Microsoft.com/en-us/download/details.aspx?id=39379

1
Terry

ピボットテーブルを使用して、任意の数のリストのデカルト積を生成する非常に簡単な方法を次に示します。

https://chandoo.org/wp/generate-all-combinations-from-two-lists-Excel/

この例は2つのリストの場合ですが、任意の数のテーブルや列で機能します。

ピボットテーブルを作成する前に、 値リストをテーブルに変換 する必要があります。

0
warakawa

VBAを使用すると、次のことができます。ここに小さな例があります:

Sub SqlSelectExample()
'list elements in col C not present in col B
    Dim con As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set con = New ADODB.Connection
    con.Open "Driver={Microsoft Excel Driver (*.xls)};" & _
           "DriverId=790;" & _
           "Dbq=" & ThisWorkbook.FullName & ";" & _
           "DefaultDir=" & ThisWorkbook.FullName & ";ReadOnly=False;"
    Set rs = New ADODB.Recordset
    rs.Open "select ccc.test3 from [Sheet1$] ccc left join [Sheet1$] bbb on ccc.test3 = bbb.test2 where bbb.test2 is null  ", _
            con, adOpenStatic, adLockOptimistic
    Range("g10").CopyFromRecordset rs   '-> returns values without match
    rs.MoveLast
    Debug.Print rs.RecordCount          'get the # records
    rs.Close
    Set rs = Nothing
    Set con = Nothing
End Sub
0
Patrick Honorez