スプレッドシートでデータを管理していると、列の追加や削除を頻繁に行う場面があります。手動で操作するとミスが起きやすく、大量のシートを扱う場合は非効率です。この記事では、Google Apps Scriptを使ってプログラム的に列を挿入・削除する方法を詳しく解説します。スクリプトを活用すれば、繰り返しの作業を自動化でき、シートの構造を動的に変更できるようになります。
初心者でも実践できるよう、基本的なスクリプトの書き方から応用までを順に紹介します。具体的なコード例を交えながら、列操作のコツや注意点もお伝えします。この記事を読めば、スプレッドシートの列管理をプログラムで効率化できるようになるでしょう。
【要点】Apps Scriptで列を挿入・削除する3つのポイント
- SpreadApp.getActiveSheet() でシートを取得: 現在アクティブなシートを取得し、列操作の対象を指定します。
- insertColumnBefore() で列を挿入: 指定した列の直前に新しい列を追加します。引数に列番号を渡します。
- deleteColumn() で列を削除: 指定した列番号の列を削除します。削除後にデータが詰められます。
ADVERTISEMENT
目次
Apps Scriptで列を操作するための前提知識
Google Apps Scriptは、Googleのサービスを自動化するためのJavaScriptベースのスクリプト環境です。スプレッドシートでは、SpreadsheetAppオブジェクトを通じてシートやセルにアクセスします。列の挿入や削除には、Sheetオブジェクトに用意されたメソッドを使用します。代表的なものは以下の通りです。
- insertColumnBefore(columnIndex): 指定した列の左に新しい列を挿入します。
- insertColumns(columnIndex, numColumns): 指定した列の左に複数列を挿入します。
- deleteColumn(columnIndex): 指定した列を削除します。
- deleteColumns(columnIndex, numColumns): 指定した位置から複数列を削除します。
これらのメソッドを呼び出す前に、操作対象のシートを取得する必要があります。一般的には、getActiveSheet() でアクティブなシートを取得するか、getSheetByName() で名前を指定して取得します。なお、列番号は1始まりです。1列目がA列、2列目がB列というように数えます。
列を挿入するスクリプトの書き方
ここでは、列を挿入する基本的なスクリプトを紹介します。例として、アクティブシートの2列目(B列)の左に新しい列を1つ追加するコードを示します。
- スクリプトエディタを開く
スプレッドシートを開き、メニューの「拡張機能」→「Apps Script」をクリックしてスクリプトエディタを開きます。 - 関数を作成する
デフォルトのコード.gsに以下の関数を記述します。function insertColumn() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.insertColumnBefore(2);
} - スクリプトを実行する
関数名「insertColumn」を選択し、実行ボタン(▶)をクリックします。初回は権限承認が必要です。承認後、B列の左に新しい列が挿入されます。
複数列を一度に挿入したい場合は、insertColumns メソッドを使います。例えば、2列目から3列追加するには sheet.insertColumns(2, 3); と記述します。これでB列・C列・D列が左に3列分追加されます。
列を削除するスクリプトの書き方
列の削除も同様の手順で行います。例として、アクティブシートの3列目(C列)を削除するコードを示します。
- スクリプトエディタを開く
上記と同じ手順でスクリプトエディタを開きます。 - 関数を作成する
以下の関数を追加します。function deleteColumn() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.deleteColumn(3);
} - スクリプトを実行する
関数「deleteColumn」を選択して実行します。C列が削除され、D列以降が左に詰められます。
複数列を一度に削除するには、deleteColumns メソッドを使用します。例えば、2列目から2列削除するには sheet.deleteColumns(2, 2); と記述します。これでB列とC列が削除されます。削除する列番号が範囲外の場合はエラーになるため注意が必要です。
ADVERTISEMENT
特定の条件に基づいて列を動的に操作する
実際の業務では、特定の条件を満たす列だけを削除したり、データに応じて列を追加したい場合があります。ここでは、列見出しを読み取り、特定の文字列を含む列を削除する例を紹介します。
- 関数を作成する
以下の関数を記述します。function deleteColumnsByHeader() {
var sheet = SpreadsheetApp.getActiveSheet();
var lastColumn = sheet.getLastColumn();
// 右から左へ処理(削除によるインデックス変動を防ぐ)
for (var col = lastColumn; col >= 1; col--) {
var header = sheet.getRange(1, col).getValue();
if (header === "削除対象") {
sheet.deleteColumn(col);
}
}
} - スクリプトを実行する
この関数を実行すると、1行目の見出しが「削除対象」の列がすべて削除されます。右から左へループすることで、削除による列番号のズレを防いでいます。
同様に、データが空の列だけを削除する、特定の日付より古いデータがある列を削除するなど、条件を自由にカスタマイズできます。ループの方向や列番号の扱いには注意しましょう。
列挿入・削除でよくあるトラブルと対処法
列番号が範囲外でエラーになる
存在しない列番号を指定すると、スクリプトがエラーで停止します。例えば、シートの最終列が10列のときに deleteColumn(11) を実行するとエラーです。削除前に getLastColumn() で最終列を確認し、範囲内であることをチェックしましょう。挿入時も同様に、最大列数(通常は18278列)を超えないように注意します。
ループ内で列を削除するとインデックスがずれる
左から右へループしながら削除すると、削除後に列番号が繰り上がるため、正しく処理できません。例えば、2列目と3列目を削除したい場合、左から処理すると2列目を削除した後に元の3列目が2列目に移動し、次のループで3列目を削除しようとしても意図した列を削除できません。これを防ぐには、右から左へループするか、削除する列番号を一度配列に格納してからまとめて削除します。
大量の列操作でスクリプトが遅くなる
一度に多くの列を挿入・削除する場合、スクリプトの処理に時間がかかることがあります。パフォーマンスを改善するには、1回の操作で複数列を処理できるメソッド(insertColumns、deleteColumns)を使いましょう。また、不要な操作を減らすために、条件を絞り込むことも有効です。数千列を削除する必要がある場合は、シートを再作成する方法も検討します。
トリガーで実行する際の注意
時間主導型トリガーや編集トリガーから列操作を実行する場合、編集トリガーの中で列を削除すると、その変更がさらにトリガーを呼び出す可能性があります(無限ループ)。そのため、トリガー内で列を操作するときは、条件分岐を設けて特定の条件でのみ実行するようにしましょう。また、大量の列削除が頻繁に行われると、スプレッドシートの履歴が大きくなるため、必要最小限に留めます。
列操作に関する関数の比較
| メソッド | 動作 | 使用例 |
|---|---|---|
| insertColumnBefore(columnIndex) | 指定列の直前に1列挿入 | insertColumnBefore(3) でC列の左に挿入 |
| insertColumns(columnIndex, numColumns) | 指定列の直前に複数列挿入 | insertColumns(2, 3) でB列の左に3列挿入 |
| deleteColumn(columnIndex) | 指定列を1列削除 | deleteColumn(5) でE列を削除 |
| deleteColumns(columnIndex, numColumns) | 指定位置から複数列を削除 | deleteColumns(2, 2) でB列・C列を削除 |
これらのメソッドは、いずれもSheetオブジェクトのメソッドとして利用できます。insertColumnBeforeは単一列、insertColumnsは複数列に適しています。削除も同様です。大量の列を扱う場合は、複数列版を使うと効率的です。
まとめ
この記事では、Google Apps Scriptを使ってスプレッドシートの列をプログラム的に挿入・削除する方法を解説しました。基本的な insertColumnBefore や deleteColumn を理解することで、動的なシート構造の変更が可能になります。条件に応じた列の削除や複数列の一括操作も、応用次第で自由に実装できます。ぜひ実際の業務でスクリプトを試し、手動作業の負担を減らしてみてください。次のステップとしては、行の挿入・削除やセルデータの移動を組み合わせると、さらに高度な自動化が実現できます。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
