行を削除するためのfor文の書き方

huruhurupyotr 31views 更新:2017年2月16日

for文といえば、以下の形が一般的ですね。

for(var i = 1; i <= 10; i++){
//ここに処理を書く
}

上だと、なにがしかの処理を10回繰り返すプログラムです。

ところで、たとえば、googleのスプレッドシートで、1行ずつ見ていって、条件にあてはまる行を削除する処理を行いたいとしましょう。このとき、上のような形でfor文を回すと困ったことが起こることがあります。
単純な話なのですが、設定によっては、行を削除すると行数が減り、下にあった行がごっそり上に移動してきます。たとえば、8行目を削除したとすると、9行目以降が8行目以下にズラされるわけです。
次に見たいのは、もともと9行目にあったもの、つまり、ズレて8行目にやってきたものですよね。しかし、上の書き方では削除の処理を実行した時点でiが増えてしまうため、もともと10行目にあったものを見ることになります。1行飛ばされてしまうのです!

この事態を回避するためにはどうしたらよいでしょうか。実は、for文は、不要な制御部分は省略することができます。つまり、i++を制御部分から消して、カウントアップしたい部分にだけ書けばよい、ということになります。

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません