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 判定、④必要ならフィルタリングしてソート対象を制限、という流れが有効です。この記事のコード例を基に、あなたの環境に合った「チェックボックス列」「ソート対象列」を設定すれば、目的を果たせるはずです。


コメント