Google スプレッドシートでチェックボックスと並び替えを GAS で実装する方法:文字順ソート+A列以外のチェックボックス対応解説

Excel

Google スプレッドシートにて「B列の文字を文字順に並べたい」「チェックボックスを A 列以外の列に配置して、それを読み取って処理したい」というご要望をお持ちの方向けに、Google Apps Script(GAS)を使った具体的なコード例と手順を整理してご紹介します。

ステップ1:データ範囲とチェックボックス列を確認する

まず、対象となるシートの構成を確認しましょう。たとえば、以下のような構成が一般的です。

  • B列:文字データ(この列を文字順に並べ替えたい)
  • A列以外(例:C列)にチェックボックスを配置し、「TRUE/FALSE」で選択状態を管理

このように構成されていれば、チェックボックス列の状態=行を処理対象かどうか、という判定が可能です。

ステップ2:文字順ソートを GAS で実装する

GAS の Range.sort() メソッドを使えば、指定範囲を文字順(A→Z)で並び替えることができます。([参照](https://developers.google.com/apps-script/reference/spreadsheet/range#sortsortspecobj)) ([turn0search18])

以下は B 列の文字データを 2 行目以降で文字順に昇順ソートする例コードです(ヘッダー行あり想定)。

function sortByBColumn() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('シート名');
  const lastRow = sheet.getLastRow();
  const range = sheet.getRange(2, 2, lastRow-1, sheet.getLastColumn()); // 2 行目から、B列=2列目
  range.sort({column: 2, ascending: true});
}

このコードを実行すると、B列を基準に行全体が文字順で並び替えられます。

ステップ3:チェックボックス列が A 列以外の場合の読み取り処理

次に、「チェックボックスが A 列以外(例:C列=3列目)にある場合」に、チェックされた行のみを対象に何らかの処理を行いたいケースを考えましょう。

例として、C列のチェックボックスが TRUE の行を別シートに移す、あるいは色付けする処理を入れてみます。

function processCheckedRows() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('シート名');
  const lastRow = sheet.getLastRow();
  const data = sheet.getRange(2, 1, lastRow-1, sheet.getLastColumn()).getValues();
  for (let i = 0; i < data.length; i++) {
    const row = data[i];
    const isChecked = row[2]; // C列=インデックス2(0起点)
    if (isChecked === true) {
      // チェックされている行の処理をここに書く
      // 例:色を付ける
      sheet.getRange(i+2, 1, 1, sheet.getLastColumn()).setBackground('#FFFF00');
    }
  }
}

このように、「チェックボックス列が何列目か」を意識してインデックス指定を調整すれば、A列以外の列でも読み取りが可能です。

ステップ4:チェックボックス+文字順ソートを組み合わせる実例

ここまでの内容を統合して、「チェックボックスが TRUE の行だけを文字順(B列)で並び替える」というフローを実装してみましょう。

function sortCheckedByB() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('シート名');
  const lastRow = sheet.getLastRow();
  const fullRange = sheet.getRange(2, 1, lastRow-1, sheet.getLastColumn());
  const values = fullRange.getValues();
  const filtered = values.filter(row => row[2] === true); // C列チェックボックス列
  // 先に対象行だけを並び替え
  filtered.sort((a, b) => {
    const valA = a[1].toString(); // B列 = index1
    const valB = b[1].toString();
    return valA.localeCompare(valB);
  });
  // 並び替えた後、元シートの2行目以降に戻す(例)
  sheet.getRange(2, 1, filtered.length, filtered[0].length).setValues(filtered);
}

この実例では、チェックボックス列が C 列で、文字列が B 列にあり、TRUE の行だけを抽出し、JavaScript の localeCompare メソッドで文字順に並び替えています。

注意点とよくあるトラブル解決

以下のような注意点があります。

  • チェックボックス列がブランクや文字列の場合、`=== true` で判定できないため `row[2] == true` や `row[2] === true` どちらが適切か注意。
  • 文字列が混在していたり空白があったりすると、sort の挙動が思わしくない場合があります。事前に `trim()` などでクリーニングしておくと安心です。
  • 並び替えの際にヘッダー行を除外するよう範囲指定を忘れないこと。また複数列でソートしたい場合、`range.sort([{column:2, ascending:true}, {column:3, ascending:false}])` といった複数基準も可能です。([参照](https://developers.google.com/apps-script/reference/spreadsheet/range#sortsortspecobj)) ([turn0search18])

まとめ

GA S を使って Google スプレッドシート内の「列の文字順並び替え(B列)」「チェックボックスの列を A 列以外(例えば C列)に設定して読み取り処理」という両方の要件に対応するには、

①対象シート・列構成を確認し、②文字列列を sort メソッドで並び替え、③チェックボックス列のインデックスを正しく使って TRUE 判定、④必要ならフィルタリングしてソート対象を制限、という流れが有効です。この記事のコード例を基に、あなたの環境に合った「チェックボックス列」「ソート対象列」を設定すれば、目的を果たせるはずです。

コメント

タイトルとURLをコピーしました