##追記
えくせるちゅんちゅんーVBAのデバッグにおける真のイミディエイトウィンドウの使い方
直接Deleteするのではなく、一度選択してからまとめてDeleteすること
##コード① ~行を一つ飛びで削除~
・エクセルシートが表示されている状態で [Alt] + [F11]→ [Ctrl] + [g]でイミディエイトウィンドウに移る
・以下のコードを打ち、[Enter]で実行
For i = 100 to 2 step -2: Rows(i).delete: Next i
###ポイント
・イミディエイトウィンドウは複数行の命令を書いて実行はできないので「 : 」で繋げて一行で書く
・2 to 100じゃなく下の行から削除していく
###注意
・他の VBAマクロと同様に消したあとに[Ctrl]+[z]で元に戻すことは出来ない。
・Rowsは Worksheetオブジェクトのプロパティ
・ワークシートオブジェクトを指定しない場合 Acitivesheet.Rowsを省略したものとして実行される。
・なので ActiveSheetの間違いに注意
###メリット
・慣れると他の方法より楽。多分
##コード② ~1000行→100行に間引き~
IF文が使えないので Select Caseで評価する
For i = 1000 to 1 step -1: Select Case (i mod 10) <> 0: Case True:Rows(i).delete: End Select: Next i
###見やすく書き直し
Private Sub Test2
For i = 1000 to 1 step -1
Select Case (i mod 10) <> 0
Case True
Rows(i).delete
End Select
Next i
End Sub
###メリット?
・個人的にはイケルと思うがどうだろう
・せめて IF Statementが使えれば。
###参考
【teratail】 Excel VBA イミディエイトウィンドウで「分岐のあるループ処理」を実行したい
https://teratail.com/questions/110791
##コード③おまけ ~FizzBuzz~
For i = 1 to 100: Select Case ((i mod 3) = 0) * 2 + ((i mod 5) = 0): Case -3: ?"Fizz Buzz": Case -2: ?"Fizz": Case -1: ?"Buzz": Case 0 : ?i: End Select: next i
・イミディエイトウィンドウ上では「? プラス 値」 or 「? プラス 変数」で値を出力してくれる。
###書き下し
Private Sub Test3No1
For i = 1 to 100
Select Case ((i mod 3) = 0) * 2 + ((i mod 5) = 0)
Case -3
Debug.Print "FizzBuzz"
Case -2
Debug.Print "Fizz"
Case -1
Debug.Print "Buzz"
Case 0
Debug.Print i
End Select
Next i
End Sub
・複雑な制御構造はスラスラと書けないかなーと思ったけれどなんとかなった。
####真理値表
・Trueは -1なので、True × 2 = -2
・Falseは 0
A | B | 2A+B |
---|---|---|
True | True | -3 |
True | False | -2 |
False | True | -1 |
False | False | 0 |
###結論
If文が使えないとちょっと厳しいかな