Script Labのカスタム関数でクロス結合
クロス結合ってわりと使いませんか
機械的に二つのリスト(範囲)のすべての組み合わせをするためにはクロス結合を用います。(デカルト積や直積なんて呼び方もする模様)
SQLでクロス結合を解説しているネットの記事を見ると、あまり使わない的な解説をよく見ますが、個人的には左外部結合の次に使う機会が多いJOINです。
PowerQueryでももちろん可能です。
ただし、GUIのボタン操作では不可能で、すこし面倒な手順を踏みます。わざわざテーブル化してさらに数ステップ必要だなんて、なんて面倒。できるだけマシですが、もっとインスタントに、直感的に関数で処理したいのです。
そこでScript LabによるUDFの出番。コードは以下のとおり。
/** * @customfunction * @param {any[][]} array1 * @param {any[][]} array2 * @returns {any[][]} A dynamic array with multiple results. */ function CROSSJOIN(array1, array2) { // 空の新しい配列を作成 const combinedArray = []; // 与えられた2つの配列をループ for (let i = 0; i < array1.length; i++) { for (let j = 0; j < array2.length; j++) { // 新しい要素を作成し、変換された配列に追加 const newElement = [...array1[i], ...array2[j]]; combinedArray.push(newElement); } } return combinedArray; }
けっこう便利。