|    | 
     UO3さん 
 
書いてくださったコードを理解しました。 
ActiveやSelectを使わないほうが良いということも分かりました。 
(でも、使わないでコードを書くというのには勉強不足なので、もっと思考を変えたりして勉強していきます。一番最初に自動記録で覚えたということもあるのか、Active等を使った思考になってしまいます。。。何かポイントはありますか?) 
 
>(ところで ActiveCell.Offset(-1, 1).Select これは 最初A2だったアクティブセルを、左下、左下と動かしているんですが、その認識ですか?) 
 
これは、少し前のコードで「ActiveCell.Offset(1, 0).Resize(200, 1).Select 
」としていたので、そこから右上(次項目)に移動させたかったのです。 
 
>行を削除したり、列を削除する場合の「鉄則」 
 
知らないわけではなかったのですが、コードの組み方が分からず最初(列)から削除していって最後に「If ActiveCell.Value = Empty Then」で逃げようとしていました(このような組み方しかできないのは勉強不足ですね・・・)。 
 
 
というわけで、UO3さんのコメントを基にブラッシュアップしてみました。 
(最終的にはUO3さんが作ってくださったSampleを引用させて頂こうと思っています:勝手にすいません) 
 
 
Sub ppp() 
 
  Application.ScreenUpdating = False 
 
  Dim bbb As Range 
 
  Range("C5").Select 
   
    Do 
      If Len(ActiveCell.Value) = 0 Then 
        Range("A1").Select 
        Exit Do 
      Else 
        ActiveCell.Offset(1, 0).Resize(200, 1).Select 
        Set bbb = Union(Selection, Selection) 
      End If 
 
      If Application.WorksheetFunction.CountA(bbb) = 0 Then 
        Columns(bbb.Column).Delete Shift:=xlToLeft 
        ActiveCell.Offset(-1, 0).Select 
      Else 
        ActiveCell.Offset(-1, 1).Select 
      End If 
    Loop 
   
  Application.ScreenUpdating = True 
   
End Sub 
 
 
一応、意図していたことをしてくれるようにはなりました。 
今後はもっと勉強してActive等を使わないで、後ろから列等を削除できるようになりたいと思います。 
ありがとうございました。 
 
 | 
     
    
   |