|
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等を使わないで、後ろから列等を削除できるようになりたいと思います。
ありがとうございました。
|
|