0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[GAS] スプレッドシートで複数行を高速に削除する

Posted at

TL;DR

  • 一行づつ削除すると、非常に遅い
  • deleteRows は、隣り合う列しか削除できないので、ソートしてから一括削除する
  • 単なるソートで対応できない場合は、作業用の列を一時的に追加する

よくある方法

ググると、逆順で走査して、deleteRow で1行づつ削除する方法が出てきます。
ただし、この方法は非常に遅いです。1

特定要素の行を削除する

deleteRows を使えば複数行を削除できますが、
これは、削除開始行と削除行数を指定する形になっており、
並んだ行しか削除することができません。

飛び地になったものを削除するにはどうすればいいか?
飛び地でなくすれば良いのです。

1列目が Foo の物を消すなら、

  1. 1列目をソート
  2. 1列目の内容を取得
  3. Fooの開始行と個数を確認
  4. deleteRows で削除

とすれば良い訳です。

特定条件の行を削除する

1列目に Foo を含む行を削除するにはどうしたら良いでしょう?
単にソートしただけでは、対象の行が固まってくれません。

作業用の列を一時的に追加し、削除対象の行に印を付けましょう。
ソートで対象の行が固まる様にすれば良い訳です。

  1. 作業用の列を追加
  2. 作業用の列に、削除対象なら0を,削除対象で無いなら1 をセット
  3. ソートして、0が入っている行を削除
  4. 作業用の列を削除
  1. ちょっと大きなデータだとタイムアウトするレベルで遅い。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?