|
|
| Excel VBA Macro ・ フロー制御 ・ FAQ |
|
2重のDo While ... Loopで複数のシートに処理されないが?
|
|
|
|
Question 5307 |
|
 |
 |
|
|
サンプル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文で繰り返し処理する」を二重にご利用になっています。
ほとんど出来ていますので、下記のように修正すれば完成しますよ。
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行目から、処理開始することになります。
では、今後とも、楽しく学習をお続け下さい。なお、問題が解決しない場合など、ご連絡ください。
|
|
|
|
|