ITのえんぴつ

Google Blockly開発者ツールやIT・プログラミングを研究して発信するブログ

Google Apps Script (GAS) を利用して、指定列でグループ化し、区切り文字で結合した結果を別の列に出力する方法

スプレッドシートのデータを特定の形式でグループ化して整理する方法を紹介します。この例では、入力データを基に「シート番号」と「地域名」でグループ化し、句読点区切りで結合した結果を別の列に出力します。

前提条件

  • 入力データは「加工1」シートの B列(シート番号), C列(地域名), D列(加支店名) にあるものとします。

  • 出力結果は同じシートの F列(シート番号), G列(地域名), H列(加工結果) に書き込みます

GASコード

以下のコードをGoogle Apps Scriptにコピーして実行します。

function groupData() {
  // スプレッドシートとシートを取得
  const sheetName = "加工1";
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName(sheetName);

  // 入力データを取得(B~D列)
  const range = sheet.getRange(2, 2, sheet.getLastRow() - 1, 3); // データ範囲(ヘッダーを除く)
  const data = range.getValues();

  // データをグループ化
  const groupedData = {};
  data.forEach(row => {
    const key = `${row[0]}_${row[1]}`; // シート番号_地域名をキーとする
    if (!groupedData[key]) {
      groupedData[key] = [row[0], row[1], []]; // [シート番号, 地域名, 支店名の配列]
    }
    groupedData[key][2].push(row[2]); // 支店名を配列に追加
  });

  // 出力データを整形
  const output = Object.values(groupedData).map(group => [
    group[0], // シート番号
    group[1], // 地域名
    group[2].join("、") // 加工結果をタブ区切りで結合
  ]);

  // 出力データを書き込み(F~H列)
  const outputRange = sheet.getRange(2, 6, output.length, 3); // F~H列の範囲(ヘッダーを除く)
  outputRange.setValues(output);

  // 終了メッセージ
  SpreadsheetApp.getUi().alert("データのグループ化が完了しました。");
}

実行手順

  1. スプレッドシートを準備

    • 「加工1」シートに以下のようなデータを用意します:

B列 (シート番号) C列 (地域名) D列 (支店名)
3 東北地方 山形
3 東北地方 宮城
  1. Apps Script を開く

  2. コードを貼り付け

    • 上記のコードをコピーしてスクリプトエディタに貼り付けます。

  3. スクリプトを実行

    • スクリプトエディタ上部の「関数を選択」ドロップダウンから groupData を選択して実行します。

    • 実行中に「権限を許可」するよう求められた場合は、指示に従って許可してください。

  4. 結果を確認

    • 「加工1」シートの F列(シート番号), G列(地域名), H列(加工結果) に結果が出力されます。

出力例

F列 (シート番号) G列 (地域名) H列 (加工結果)
3 東北地方 山形、宮城
 

補足

  • このコードは簡単なデータ構造を前提としており、大量データや複雑な条件には追加の最適化が必要になる場合があります。

  • 区切り文字以外のフォーマット(例えば改行)で出力したい場合は、join("、") の部分を変更してください。

以上でデータ加工・グループ化の手順は完了です。