Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


10688 / 76734 ←次へ | 前へ→

【71592】Re:空白列の削除
質問  はる  - 12/3/21(水) 17:00 -

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

【71549】空白列の削除 はる 12/3/16(金) 10:54 質問
【71553】Re:空白列の削除 UO3 12/3/16(金) 19:53 回答
【71587】Re:空白列の削除 はる 12/3/21(水) 9:13 お礼
【71556】Re:空白列の削除 UO3 12/3/16(金) 20:50 発言
【71592】Re:空白列の削除 はる 12/3/21(水) 17:00 質問
【71599】Re:空白列の削除 UO3 12/3/22(木) 11:56 発言
【71600】Re:空白列の削除 はる 12/3/22(木) 13:07 お礼
【71572】Re:空白列の削除 12/3/18(日) 18:37 回答
【71588】Re:空白列の削除 はる 12/3/21(水) 9:21 お礼
【71591】Re:空白列の削除 はる 12/3/21(水) 16:59 質問

10688 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free