Home > Excel VBA Macro フロー制御 > FAQ

2重のDo While ... Loopで複数のシートに処理されないが?

Question 5307 Previous Next
詳細は こちら サンプルNo.441 ◆ 環境・・ Excel 2003 & Windows XP

初めて投稿します。いつも500連発にはお世話になっております。 サンプルマクロを見ながらやりましたが、どうしてもできませんので、ご指導ください。 質問の内容は以下のとおりです。
ワークシート10数枚からなるブックがあります。
このブックの前から2番目のシートから 8番目のシートまでの計7枚のシート(様式同一、変数k_cnt)に関して、H列が空欄の行を一挙に削除したいのです。
下記のようにコードを作りましたが、
単一のシートにしか動作しません。
Sub 空欄行削除()
    Dim j As Integer
    Dim k_cnt AS Byte
    j = 34
    k_cnt = 2
    Do While k_cnt <= 8
       Do While Cells(j, 1) <> ""       
          If Cells(j, 8) =  "" Then
             Rows(j & ":" & j).Select
             Selection.Delete Shift:=xlup
             j = j - 1
          End If
          j = j + 1
       Loop
       k_cnt = k_cnt + 1
    Loop
End Sub 
多分、Do Loop構文が間違っているからだと思います。 各シートのA列は一貫番号です。(行削除後、一貫番号は変わらなくて結構です。) 各シートのデータは34行目から始まっております。(変数j)
何分全くの初心者ですので、正しいコードを宜しくお教えください。
Answer   Copyright (C) 2007.6.21 永井善王
拙著 「Excel VBA そのまま使える実用マクロ 500連発」 をご愛読いただき、ありがとうございます。
441番は 「Do...Loop文で繰り返し処理する」 と題するサンプルで、その中の 「2. DoWhileLoop文で繰り返し処理する」を二重にご利用になっています。

ほとんど出来ていますので、下記のように修正すれば完成しますよ。 school
Sub 空欄行削除()
    Dim j As Integer
    Dim k_cnt AS Byte
    k_cnt = 2
    Do While k_cnt <= 8
       Worksheets(k_cnt).Activate
       j = 34
       Do While Cells(j, 1) <> ""       
             (以下同じ)
ご説明の必要はないかもしれませんが、一応、
1つ目の Do While ... Loopが始まった直後に、変数「k_cnt」の値の番号のワークシートをアクティブにするコードを追加しました。
そして続く行へ、元のマクロの上から4行目にあった変数「j」に34を代入するコード
j = 34 を移しました。
これにより、アクティブになったワークシートの各シートの34行目から、処理開始することになります。

では、今後とも、楽しく学習をお続け下さい。なお、問題が解決しない場合など、ご連絡ください。

 

Excel VBA Macro

Excel DownLoad