TL;DR
- 一行づつ削除すると、非常に遅い
-
deleteRows
は、隣り合う列しか削除できないので、ソートしてから一括削除する - 単なるソートで対応できない場合は、作業用の列を一時的に追加する
よくある方法
ググると、逆順で走査して、deleteRow
で1行づつ削除する方法が出てきます。
ただし、この方法は非常に遅いです。1
特定要素の行を削除する
deleteRows
を使えば複数行を削除できますが、
これは、削除開始行と削除行数を指定する形になっており、
並んだ行しか削除することができません。
飛び地になったものを削除するにはどうすればいいか?
飛び地でなくすれば良いのです。
1列目が Foo の物を消すなら、
- 1列目をソート
- 1列目の内容を取得
- Fooの開始行と個数を確認
-
deleteRows
で削除
とすれば良い訳です。
特定条件の行を削除する
1列目に Foo を含む行を削除するにはどうしたら良いでしょう?
単にソートしただけでは、対象の行が固まってくれません。
作業用の列を一時的に追加し、削除対象の行に印を付けましょう。
ソートで対象の行が固まる様にすれば良い訳です。
- 作業用の列を追加
- 作業用の列に、削除対象なら0を,削除対象で無いなら1 をセット
- ソートして、0が入っている行を削除
- 作業用の列を削除
-
ちょっと大きなデータだとタイムアウトするレベルで遅い。 ↩