ADVERTISEMENT

【Googleスプレッドシート】Apps Scriptで列の挿入と削除をプログラム的に!動的な構造変更

【Googleスプレッドシート】Apps Scriptで列の挿入と削除をプログラム的に!動的な構造変更
🛡️ 超解決

スプレッドシートでデータを管理していると、列の追加や削除を頻繁に行う場面があります。手動で操作するとミスが起きやすく、大量のシートを扱う場合は非効率です。この記事では、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つ追加するコードを示します。

  1. スクリプトエディタを開く
    スプレッドシートを開き、メニューの「拡張機能」→「Apps Script」をクリックしてスクリプトエディタを開きます。
  2. 関数を作成する
    デフォルトのコード.gsに以下の関数を記述します。
    function insertColumn() {
    var sheet = SpreadsheetApp.getActiveSheet();
    sheet.insertColumnBefore(2);
    }
  3. スクリプトを実行する
    関数名「insertColumn」を選択し、実行ボタン(▶)をクリックします。初回は権限承認が必要です。承認後、B列の左に新しい列が挿入されます。

複数列を一度に挿入したい場合は、insertColumns メソッドを使います。例えば、2列目から3列追加するには sheet.insertColumns(2, 3); と記述します。これでB列・C列・D列が左に3列分追加されます。

列を削除するスクリプトの書き方

列の削除も同様の手順で行います。例として、アクティブシートの3列目(C列)を削除するコードを示します。

  1. スクリプトエディタを開く
    上記と同じ手順でスクリプトエディタを開きます。
  2. 関数を作成する
    以下の関数を追加します。
    function deleteColumn() {
    var sheet = SpreadsheetApp.getActiveSheet();
    sheet.deleteColumn(3);
    }
  3. スクリプトを実行する
    関数「deleteColumn」を選択して実行します。C列が削除され、D列以降が左に詰められます。

複数列を一度に削除するには、deleteColumns メソッドを使用します。例えば、2列目から2列削除するには sheet.deleteColumns(2, 2); と記述します。これでB列とC列が削除されます。削除する列番号が範囲外の場合はエラーになるため注意が必要です。

ADVERTISEMENT

特定の条件に基づいて列を動的に操作する

実際の業務では、特定の条件を満たす列だけを削除したり、データに応じて列を追加したい場合があります。ここでは、列見出しを読み取り、特定の文字列を含む列を削除する例を紹介します。

  1. 関数を作成する
    以下の関数を記述します。
    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);
    }
    }
    }
  2. スクリプトを実行する
    この関数を実行すると、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

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。