【GAS】 スプレッドシートの行や列を削除する方法

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

スプレッドシートでデータ管理をしていると大量のデータが溜まっていきます。もちろんそのまま保存して行くこともいいですがもう使うことのない不要なデータが多すぎてしまうのも検索時間や起動時間が長くなってしまう可能性もあります。

そこでデータ行や列を削除していくのですが、少ないデータでしたら検索して消していくという事も出来ます。

しかしながらせっかくGASを学んでいるので、今回紹介するdeleteRow deleteColumnプログラムでさくっと消していきましょう。

複数行を一気に削除する方法。ループを使って削除する方法、トリガーを使って定期的に要らない情報を削除する方法などもお伝えします。


単独の行・列を削除するdeleteRow deleteColumn

今回は以下のスプレッドシートのデータを用いてスクリプトを作成していきます。内容としては部品一覧表というシートの中に1行目は項目2行目以降にデータを入れています。・・・は省略しているので本来データ入っているものとします。

2020-08-20 13.07.41

今回は部品名C(4行目)とFAX(5列目)を削除してみます。

それでは以下のスクリプトをコピぺして実行してみてください。

function deleteRow1() {
  var sheet = SpreadsheetApp.getActiveSheet(); 
  sheet.deleteRow(4);
  sheet.deleteColumn(5);
}

deleteRow(行番号) deleteColumn(列番号)

sheet.deleteRow(4) sheet.deleteColumn(5)

3行目・4行目のスクリプトで現在開いているシートの4行目(部品名C)と5列目(FAX)を削除するプログラムが実行されました。

(  )の中に行番号を入れるだけなのでとてもシンプルに出来ます。次に複数行・列を削除する場合はどうすればいいのか説明していきます。

複数の行・列を削除するdeleteRows deleteColumns

先ほどのスプレッドシートは以下のようになっていますね。

今度は1行目の4行目「部品名D」5行目「E」と4列目のTELと5列目の管理番号の4・5行目をそれぞれ削除していきます。

2020-08-20 13.12.50
それでは以下のスクリプトをコピーして実行してみてください。

function deleteRows1() {
  var sheet = SpreadsheetApp.getActiveSheet(); 
  sheet.deleteRows(4,2);
  sheet.deleteColumn(4,2);
}

deleteRows(行番号,行数) deleteColumns(列番号,列数)

sheet.deleteRows(4,2) sheet.deleteColumns(4,2)

が該当スクリプトです。単数行列削除との違いは複数のsがつくところと行数・列数が必要になります。

4行目から2行・4列目から2列削除しますよとプログラムで指示しています。一気に並んだデータを削除することが可能ですが、これですと飛び飛びのデータを削除することが出来ません。

では該当する飛び飛びになったデータを削除するにはどうしたらいいのか次で説明します。

該当するデータを順番に削除していく方法

ループを使った削除方法(正しい削除手順)

ループを使用して該当データがあれば順番に削除していく方法です。

この方法であれば飛び飛びのデータであっても削除していくことが出来ます。しかしながら行・列を削除する際にはループの方法に注意が必要です。

今度はスプレッドシートのF列状態の廃番というセルがあれば行を消すプログラムを作成していきます。以下のコードを実行してみてください。

function deleteRowLoop() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var length = data.length;
  
  for (var i = length - 1; i >= 1 ; i--){
    var Data = data[i][5]; 
    if(Data === "廃番"){
      sheet.deleteRow(i+1);
    } 
  }
}

変数dataで全てのデータを配列で取得しlengthで最終行を取得しています。

配列で取得しているのでdeleteRow(i+1)の部分は必ずプラス1して通常の行・列番号にすることを忘れないようにしてください。

このようにスプレッドシートには廃番の行が削除されています。

2020-08-21 17.46.51

ループを使った削除方法(誤った削除手順)

では以下のコードでプログラムを起動してみるとどうなるでしょう。

function deleteRowWrongLoop() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var length = data.length;
  
  for (var i = 1; i <= length -1 ; i++){
    var Data = data[i][5]; 
    if(Data === "廃番"){
      sheet.deleteRow(i+1);
    } 
  }
}

結果はこうなります。廃番を対象にしているはずなのに廃番が残ってしまっていますね。さらにFなどの使用と記載されている行まで削除されてしまいました。

2020-08-21 18.41.21

削除する場合の注意点(逆ループの方法)

先ほどの最初のコードは逆ループを使用し、2番目のコードは通常のループを使用しました。行・列を削除するとそれ以降の行・列は繰り上がっていきます。

例えば3行目のデータを削除すると4行目のデータは3行目になります。その結果通常のループを行うと対象のデータがあるたびに順番がずれていき予期せぬ結果が出てしまうことになります。

ですのでデータを削除するループを作成する際は逆ループをする必要があります。
通常のループ(1・・・100の順)

  for (var i = 0; i <= length -1 ; i++){
  }

逆ループ(100・・・1の順)

  for (var i = length - 1; i >= 1 ; i--){
  }

このように逆からループをすることによって削除行・列があっても順番をずらすことなく確認をすることが出来ます。ですので逆ループを覚えることによってこのような削除方法が使えるようになります。

まとめ

今回は単独の行・列を削除するdeleteRow deleteColumn、複数の行・列をまとめて削除するdeleteRows deleteColumnsを説明しました。

それにともなった実践形式として対象データを削除する方法を逆ループを用いて作成していきました。これによって不要になった大量のデータであったり、削除が必要になった項目などを効率的に削除することができます。

またトリガーを使用することによって定期的に削除をする自動化プログラムを作成する方法なども今回紹介した内容で可能になります。

ここまでお読みいただきありがとうございました。

SNSでもご購読できます。

コメントを残す

*