|
こんにちは。
できるだけ元のコードを生かして書いてみました.
ホントはselect,activateしないコードの方が「偉い」のですけどね ^^
Option Explicit '(1)
Sub ppp()
Dim yyy As Range
' On Error Resume Next '(2)
' Application.ScreenUpdating = False '(3)
Range("A2").Select
Do
If IsEmpty(ActiveCell) Then
Range("A1").Select
Exit Do
Else
Set yyy = ActiveCell.EntireColumn '(4)
If Application.WorksheetFunction.CountA(yyy) = 1 Then '(5)
yyy.Delete
Else
ActiveCell.Offset(0, 1).Select
End If
End If
Loop
' Application.ScreenUpdating = True '(6)
On Error Resume Next '(7)
Set yyy = Nothing '(8)
On Error GoTo 0 '(9)
End Sub
■以下,解説です. クイズもあります.
(1) は必須です.モジュール冒頭に書きます.
(2)(3) コード作成中はコメントにしておきます.
(1)〜(3)のようにしておくと,エラーや不具合がどんどんおもてに出ます.
出たはしから対応していけば,不具合のない良いコードが書けます.
コード作成中に不具合が見えない設定にしていると , 不具合がそのまま残るため
エラーはでないけど期待通りに動かないコードが出来上がります.
(2)を書いたら必ず(9)を書きます.
(3)を書いたら必ず(6)を書きます.
(4)を書いたら必ず(8)を書きます.
開けたら閉める。出したらしまう.それと同じです.そういうものと思って下さい.
(4) この表の下に別の表やデータが無いという前提ですが
リサイズ200とか面倒なので 列全体を参照するようにしました.
これは好みです.
(5) 見出しの分、右辺を 1 に変更しました.
(7) この行には意味があります.(2)は削除しても構いませんが
これは削除してはいけません.理由が分かりますか?
※ 行や列を削除するコードは, 後ろから前へループするのが定石です.
そのほうが簡単だからです.
ですが,ここでは「元のコードを生かして」前から後ろへループしています.
そのため,特別な工夫を凝らしてあります. どんな工夫か,なぜそれが必要か見いだして下さい.
|
|