2023/03/11に更新

【GASで時短】指定した列のすべての組み合わせを生成する

スプレッドシート小技

2つの列を指定し、すべての組み合わせを出力してくれるGoogle Apps Scriptです。列はプロンプトで指定するので繰り返せば何列でも組み合わせることができます。

こんな悩みを解決します


  • スプレッドシートの値の全組み合わせを作ることになったが、手動ではやる気にならない

用意するもの


特にありません。今お使いのスプレッドシートに組み込めます。

このスクリプトで出来ること


  • 指定した2つの列の値のすべての組み合わせを出力することができます。
  • 同じ手順を繰り返すことで、3列以上の組み合わせも生成することができます。

使い方


1.データの準備

サンプルは「何年何組何番」の全通りを出力したいという設定です。
組み合わせたいデータは1列ずつ格納しておきます。

2.スクリプトの実行

さっそくスクリプトを実行してみます。
上のメニューにある「スクリプト実行」から「指定した2つの列の全組み合わせを生成する」を実行します。

プロンプトが表示されますので、組み合わせたい列の1つ目を指定します。
列名をアルファベットで入力してください。

続いて組み合わせたいもう1つの列も同じように入力します。

3.結果の確認

少し待つと使われていない列に結果が書き込まれます。
データが多いと少し時間がかかるかもしれません。

4.3列以上組み合わせたい場合

今回のサンプルでは、ABCの3列を組み合わせる必要がありました。
D列にAとBの組み合わせが書き込まれているので、今度はD列とC列でスクリプトを実行すれば3つの列の全通りの組み合わせが完成します。

スクリプト


/**
 * このスクリプトの説明、使い方はこちら。
 * https://myfunc.jp/items/00157/index.html
 */

function onOpen() {
  // スプレッドシートを開いたときに実行される関数

  // UIの取得
  const ui = SpreadsheetApp.getUi()

  // メニューの表示名
  const menu = ui.createMenu('スクリプト実行');

  // メニューに追加するボタン
  menu.addItem('指定した2つの列の全組み合わせを生成する', 'concat_and_combination');

  // メニューを画面に追加する
  menu.addToUi();
}

function concat_and_combination() {

  // 開いているスプレッドシートオブジェクトを取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  // アクティブなシートを取得
  const sheet = ss.getActiveSheet();

  // プロンプトを表示するためのUIオブジェクトを取得
  const ui = SpreadsheetApp.getUi();

  // プロンプトを表示し、何列目を結合するか指定する(1個目)
  const response1 = ui.prompt('組み合わせる列(1個目)を入力してください', '例:A', ui.ButtonSet.OK_CANCEL);

  // キャンセルボタンが押されたときは何もせず終了する
  if (response1.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // プロンプトを表示し、何列目を結合するか指定する(2個目)
  const response2 = ui.prompt('組み合わせる列(2個目)を入力してください', '例:B', ui.ButtonSet.OK_CANCEL);

  // キャンセルボタンが押されたときは何もせず終了する
  if (response2.getSelectedButton() == ui.Button.CANCEL) {
    return;
  }

  // 入力された文字(列)を取得する
  const col1 = response1.getResponseText();
  const col2 = response2.getResponseText();

  // 入力された列全体の値を取得する
  const vals1 = ss.getRange(col1 + ':' + col1).getValues();
  const vals2 = ss.getRange(col2 + ':' + col2).getValues();

  // 組み合わせを格納するための変数を定義
  const result = [];

  // 1つ目に指定された列でループ
  for (let i = 0; i < vals1.length; i++) {
    if (vals1[i][0]) { // 空白セルは飛ばす

      // 2つ目に指定された列でループ
      for (let j = 0; j < vals2.length; j++) {
        if (vals2[j][0]) { // 空白セルは飛ばす
          // それぞれの列の値を結合する
          let concat_val = vals1[i][0] + vals2[j][0];

          // 結果用の配列に追加する
          result.push([concat_val]);
        }
      }
    }
  }

  // 最終列の1つとなりに書き込むため、今使われている最後の列を取得する
  let last_col = sheet.getLastColumn();

  // 書き込み先範囲の定義
  let range = sheet.getRange(1, last_col + 1, result.length, 1);

  // 結果を書き込む
  range.setValues(result);

}

関連するアプリ


【GASで便利に】2つのセルの値を入れ替える

選択した2つのセル(範囲)の値を、入れ替えるGoogle Apps Scriptです。行や列の入れ替えもできます。

【GASで便利に】セルの順番を逆にする(行)

選択した行範囲の順番を逆にするGoogle Apps Scriptです。ソートではなく、単純に順番を逆にします。関数の組み合わせでも実現できますが、GASを登録してしまったほうが早いかもしれません。

【GASで便利に】セルの順番を逆にする(列)

選択した列範囲の順番を逆にするGoogle Apps Scriptです。行バージョンを作ったので、列バージョンも。ニーズはあるのでしょうか。

【GASで便利に】指定した文字数でセルに分割する(行方向)

1つのセルに入力されている文字列を、指定した文字数で分割するGoogle Apps Scriptです。区切りに使用する文字が無くても大丈夫です。行方向に分割します。

【GASで便利に】指定した文字数でセルに分割する(列方向)

1つのセルに入力されている文字列を、指定した文字数で分割するGoogle Apps Scriptです。区切りに使用する文字が無くても大丈夫です。列方向に分割します。

【GASで時短】結合されたセルを検索&解除する

選択範囲に存在する結合されたセルを検索し、解除することもできるGoogle Apps Scriptです。予想外の結合によって困ったことがある方は多いと思います。このアプリが転ばぬ先の杖になれば幸いです。結合を解除するかどうかはダイアログで選択できます。

【GASで便利に】キーワードを含むセル番地を一覧表示する

検索キーワードを全シートから探して、ヒットしたセル番地をまとめて表示するGoogle Apps Scriptです。標準の検索機能ではヒットしたセルが1個ずつ分かりますが、まとめて知りたくなったので作成しました。

【GASで時短】選択範囲に存在する「改行」を検索&削除する

選択範囲に改行が含まれているセルを検索し、削除することもできるGoogle Apps Scriptです。想定外の改行によって困ることが稀によくありますので作ってみました。改行を削除するかどうかはダイアログで選択できます。

【GASで時短】データ・文字が入っていない行を削除する

シート内の「何も書き込まれていない行」を削除してくれるGoogle Apps Scriptです。スプレッドシートをメモ帳代わりにしていると、特に意味のない空白行がたくさんあったりして、消すのが面倒だったので作成してみました。すべての列に何も文字が入っていない行を消し去ります。

【GASで時短】1行ごとに空白行を挿入する

1行ごとに任意の空白行を挿入してくれるGoogle Apps Scriptです。データを整理中に「今ある行の間に1行ずつ足したい・・・」ということが稀によくあるので作成しました。追加する行数はプロンプトで指定が可能です。

【GASで時短】全シートの行・列固定を解除する

全てのシートの行固定、列固定を解除するGoogle Apps Scriptです。ニーズはあんまりなさそうですが、思いつきで作ってみました。

タグ一覧

最新のアプリ

人気のアプリ

ページトップに戻る
myfunc.jp