Script Labのカスタム関数でクロス結合

クロス結合ってわりと使いませんか

機械的に二つのリスト(範囲)のすべての組み合わせをするためにはクロス結合を用います。(デカルト積や直積なんて呼び方もする模様)

SQLでクロス結合を解説しているネットの記事を見ると、あまり使わない的な解説をよく見ますが、個人的には左外部結合の次に使う機会が多いJOINです。

PowerQueryでももちろん可能です。

learn.microsoft.com

ただし、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;
}

けっこう便利。