Excel VBA質問箱 IV

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

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


20688 / 76732 ←次へ | 前へ→

【61457】Re:ループ処理
発言  kanabun  - 09/5/9(土) 18:55 -

引用なし
パスワード
   ▼HAM さん:
おじゃまします。

まず調べる範囲ですが、
> Endrow = Cells(Rows.Count, 1).End(xlUp).Row
ですと、A列がたまたま 1行目にだけデータがあったりすると
全範囲を調べることができなくなりますので、ここは
UsedRangeプロパティで範囲を取得しましょう。

あと、本題の「列数」可変のときの空白行削除の件ですが、
UsedRangeの1列目から、最後の列までLoopすればいいと思います。
こんな風に↓
Sub Try1()
  Dim EndRow As Long
  Dim EndCol As Long
  Dim iRow As Long
  Dim jCol As Long
  EndRow = ActiveSheet.UsedRange.Rows.Count
  EndCol = ActiveSheet.UsedRange.Columns.Count
  For iRow = EndRow To 1 Step -1
    For jCol = 1 To EndCol
      If Not IsEmpty(Cells.Item(iRow, jCol)) Then
        Exit For
      End If
    Next
    If jCol = EndCol + 1 Then Rows(iRow).Delete
  Next
End Sub

あるいは 列を1つづつ調べなくても、「行をまとめて」調べても
いいかと思います。
Sub Try2()
  Dim EndRow As Long
  Dim iRow As Long
  With ActiveSheet.UsedRange
    For iRow = .Rows.Count To 1 Step -1
      If WorksheetFunction.CountA(.Rows(iRow)) = 0 Then
        Rows(iRow).Delete
      End If
    Next
  End With
End Sub

。。。などと、提示コードに合わせて ちまちま書いていたら、
ゆみこん さんから、ナイスアドバイスがありました。(^^

Loopで 行を削除したり挿入したりするときは 下からやるのが安全ですが、
AutoFilterなら そういうこと配慮しなくて一括削除できるのでぼくも
こちらをお勧めします。(1行も抽出されなかったり、1行だけのときは
注意が必要ですが)

では

0 hits

【61455】ループ処理 HAM 09/5/9(土) 17:49 質問
【61456】Re:ループ処理 ゆみこん 09/5/9(土) 18:31 発言
【61486】Re:ループ処理 HAM 09/5/13(水) 11:07 お礼
【61457】Re:ループ処理 kanabun 09/5/9(土) 18:55 発言
【61487】Re:ループ処理 HAM 09/5/13(水) 11:08 お礼

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