アプリ版:「スタンプのみでお礼する」機能のリリースについて

1~40までのシート全てのB7:B36の範囲に空白があれば非表示にするというマクロを作ろうとしています。
Sheets(Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", _
"16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", _
"39", "40")).Select Replace:=False
Dim rw As Integer
Application.ScreenUpdating = False
For rw = 7 To 36
If Range("B" & rw) = "" Then
Rows(rw).EntireRow.Hidden = True
End If
Next
Application.ScreenUpdating = True
というマクロだと、1のシートしか適用しませんでした。1~40のすべてにこのマクロを適用させるにはどうすればいいのでしょうか。教えて下さい。

A 回答 (5件)

Dim rw, i As Integer


Application.ScreenUpdating = False
For i = 1 To 40
Sheets("" & i).Select
For rw = 7 To 36
If Range("B" & rw) = "" Then
Rows(rw).EntireRow.Hidden = True
End If
Next
Next
Application.ScreenUpdating = True

といった意味でした。
    • good
    • 0
この回答へのお礼

無事解決しました。ありがとうございました!

お礼日時:2008/10/17 15:28

たびたび訂正ですいません。


シートの選択方法間違えてました。
For i = 1 To 40
Sheets("" & i).Select
  :
  :
next

この回答への補足

ちなみにどこに入れたらよいでしょうか?

補足日時:2008/10/17 13:20
    • good
    • 0

Sub test01()


Dim sh
For Each sh In Worksheets
MsgBox sh.Name
'処理
Next
End Sub
これを標準モジュールに入れて、全シート(名)が捉えられることを
まず納得する。その後処理の部分に1シート分の処理を入れる。
且つ今選ばれているシートに特定するために、セルを扱っている部分(Range()や Cells()など)には、Sh. を先頭に添える。
処理しないシートが1つ2つの例外なら、シート名が除外分かどうか
IF分で聞いて、処理を飛ばせばよい。
ーー
繰り返しを(For rw = 7 To 36以下)
をやっているようだが、CountやCountAやCountBlank関数(WorksheetFunction)ガ使えないか考えてみたらどうですか。
>全てのB7:B36の範囲に空白があれば
B7:B36の範囲がすべて空白であれば
B7:B36の範囲に1つでも空白があれば
B7:B36の範囲で当該行B列セルが空白であれば
3通りに取れないこともないとおもう。はっきり書くこと。
    • good
    • 0
この回答へのお礼

分かりにくい質問ですみません。ご指導ありがとうございました。解決しました。

お礼日時:2008/10/17 15:25

すいません


For i = 1 To 3
ではなく
For i = 1 To 40
でした

この回答への補足

変数が定義されていませんとでてしまいました。どうすればよいでしょうか?

補足日時:2008/10/17 12:55
    • good
    • 0

Sheets(Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", _


"16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", _
"39", "40")).Select Replace:=False
でシート選択されるのではなく、

For i = 1 To 3
Sheets(i).Select


next

で処理されればいかがでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!