ExcelのVBAにて、表などを1行ずつ見ていって、ある条件を満たした行だけ行削除したいような場合があると思います。
そのような場合の方法についての説明になります。
通常、For~Next文で処理をする場合、1行目からはじめて処理をしたい最後の行までというように記述する場合が多いと思います。
自分もはじめはそのように思い、行削除の場合でもそのやり方でなんとかよろうとしていました。
ただし、行削除の場合には、そうしてしまうと削除するたびに現在処理している行や最終行の行番号がずれてしまって非常に大変な処理になってしまうと思います。
そのようになってしまう場合には、逆に、最終行から先頭行に向かってFor~Next文を組んで処理をしてあげればいいということがわかりました。
たとえば、以下のような処理になります。
'1行目から20行目まで1列目が空白の場合は行削除する。 For i = 20 To 1 Step -1 If Cells(i, 1) = "" Then Rows(i).Delete End If Next i
この例の場合には。20行目から1行目まで1行ずつさかのぼって1列目が空白の場合には行削除するというような内容になります。
このようにすれば、処理の方向が上への方向なので行削除をしてもこれから処理をしていく上方向の行番号には影響がなく、最終行も先頭の1行目なので行削除の影響は受けないので処理のわずらわしさはなくなります。
はじめて知ったときは目からうろこでした。
ちなみに
Rows(1).Delete
のように、削除にDeleteを使用した場合は行が削除されて上に移動しますが、
Rows(1).Clear
のようにClearを使用すると、行の中身の値や書式だけが削除されて空白の行となるだけでそれ以降の行が上に移動することはありません。
関連記事:
【Excel】の「開発」タブを表示させる方法 - Django Girls and Boys 備忘録
Microsoft EdgeでのInternet Explorerモード設定手順 - Django Girls and Boys 備忘録
【Excel】プルダウンリストの設定方法 - Django Girls and Boys 備忘録
【Excel】ボタンの表示文字を改行する方法 - Django Girls and Boys 備忘録
【Excel】プルダウンリスト 設定方法、元データ追加方法、元データ変更方法 - Django Girls and Boys 備忘録
はてなブログの見たままモードの記事へのプログラムコード挿入方法 - Django Girls and Boys 備忘録
Google Chromeの右下の迷惑な広告、ウイルス侵入メッセージを消す方法(削除方法) - Django Girls and Boys 備忘録
【Googleサーチコンソール Googleアナリティクスの登録方法】サイト作成後の分析、活用に欠かせない登録 - Django Girls and Boys 備忘録
【Excel 名前の定義】「名前"○○○"は既に存在します。この名前にする・・・」のメッセージ表示を解決する方法 - Django Girls and Boys 備忘録
【Excel マクロ(VBA) 行削除】条件を満たした行を削除する方法(For~Next文を使用) - Django Girls and Boys 備忘録
【Excel マクロ(VBA)】最大行番号、最大列番号を取得する方法 - Django Girls and Boys 備忘録
【ExcelマクロからのI.E.操作】I.E.のセキュリティに絡むエラー(オートメーションエラー)発生時の対応方法 - Django Girls and Boys 備忘録
【Python Excel】ExcelからのPython実行ファイル(アプリケーションファイル)起動方法 - Django Girls and Boys 備忘録
【Excel VBA】シート削除時などに確認メッセージを表示しない方法 - Django Girls and Boys 備忘録
【Excel】数式の計算方法について、計算方法の自動/手動変更方法 - Django Girls and Boys 備忘録