• ベストアンサー

作業グループで空白行の非表示マクロ

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のすべてにこのマクロを適用させるにはどうすればいいのでしょうか。教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • wolis
  • ベストアンサー率45% (14/31)
回答No.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 といった意味でした。

noa8998
質問者

お礼

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

その他の回答 (4)

  • wolis
  • ベストアンサー率45% (14/31)
回答No.4

たびたび訂正ですいません。 シートの選択方法間違えてました。 For i = 1 To 40 Sheets("" & i).Select   :   : next

noa8998
質問者

補足

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

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

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通りに取れないこともないとおもう。はっきり書くこと。

noa8998
質問者

お礼

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

  • wolis
  • ベストアンサー率45% (14/31)
回答No.2

すいません For i = 1 To 3 ではなく For i = 1 To 40 でした

noa8998
質問者

補足

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

  • wolis
  • ベストアンサー率45% (14/31)
回答No.1

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 で処理されればいかがでしょうか?

関連するQ&A