|    | 
     こんにちは。 
できるだけ元のコードを生かして書いてみました. 
ホントは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)は削除しても構いませんが 
  これは削除してはいけません.理由が分かりますか? 
   
※ 行や列を削除するコードは, 後ろから前へループするのが定石です. 
  そのほうが簡単だからです. 
  ですが,ここでは「元のコードを生かして」前から後ろへループしています. 
  そのため,特別な工夫を凝らしてあります. どんな工夫か,なぜそれが必要か見いだして下さい. 
 | 
     
    
   |