プロが教えるわが家の防犯対策術!

エクセルで全シート(約100シートあります)に同じ様なフォーマットのシートがあります。
表示されている全てのシートに対し、指定する列(A)の計算結果値が指定する条件(例えば”1”)に合致する行をマクロで一括して非表示にしたいので、ご教示のほどよろしくお願い致します。

また同時に、全シートで非表示化された行を元に戻す(表示させる)コードも併せて
教えて下さい。

各シート毎に不要な行がそれぞれ大量にあり、困っておりますので、よろしくお願い致します。

エクセルは2007です。

A 回答 (3件)

>ここでデバッグメッセージが出てしまいます。



それは、ご相談に掲示されている

>エクセルで全シート(約100シートあります)に同じ様なフォーマットのシートがあります。

という状況説明が、ウソか又は間違いなのが原因です。




具体的な正しい状況説明ができないのでしたら、回答したすべてのマクロについて

高速で最も簡単:
sub macro1()
on error resume next
以下同じ

中速:
sub macro2()
on error resume next
以下同じ

最低速:
sub macro3()
on error resume next
以下同じ


のように、それぞれ正しく間違えないように修正してください。

この回答への補足

再度のご回答どうもありがとうございました。
また状況説明が至らず申し訳ありませんでした。。

結果としまして、
「高速で最も簡単」に、
"sub macro1()
on error resume next"
を追加しまして、仰るとおりこれが最も高速に処理完了しました。
大感謝です!
他のコードだと数時間かかっていたところ、測っていませんでしたが、
20分かからずに終わっていると思います。

ちなみに、表示されている同じレイアウトのシートが97シートありますが、
他に非表示にしている違うレイアウトのシートが先頭に9シートありました。
当初だと非表示にしてあるシートで引っかかってしまったのでしょうか。

今回希望通りの処理が出来、大変満足しています。
どうもありがとうございました。

補足日時:2012/08/30 20:36
    • good
    • 0
この回答へのお礼

keithin様
 
 今回希望通りの結果になり、大変助かりました。
 他のコードだと数時間かかりましたので、
 高速処理は本当に助かります。 
 無駄な手作業が省かれ、本当に感謝致します。
 
 どうもありがとうございました。
 
 

お礼日時:2012/08/30 20:42

>不要な行がそれぞれ大量にあり、困っております



高速で最も簡単:
sub macro1()
 dim w as worksheet
 for each w in worksheets
  w.autofiltermode = false
  w.range("A:A").autofilter field:=1, criteria1:="<>1"
 next
end sub

sub macro1r()
 dim w as worksheet
 for each w in worksheets
  w.autofiltermode = false
 next
end sub


中速:
sub macro2()
 dim w as worksheet
 dim c as range
 for each w in worksheets
  w.rows.hidden = false
  do
   set c = w.range("A:A").find(what:=1, lookin:=xlvalues, lookat:=xlwhole)
   if c is nothing then exit do
   c.entirerow.hidden = true
  loop
 next
end sub

sub macro2r()
 dim w as worksheet
 for each w in worksheets
  w.rows.hidden = false
 next
end sub


最低速:
sub macro3()
 dim w as worksheet
 dim h as range
 for each w in worksheets
 for each h in w.range("A1:A" & w.range("A65536").end(xlup).row)
  h.entirerow.hidden = h = 1
 next
 next
end sub

sub macro3r()
 dim w as worksheet
 for each w in worksheets
  w.rows.hidden = false
 next
end sub

この回答への補足

早速回答頂きましてどうもありがとうございました。
色々と試していますが、データが相当重い様です。
「高速で最も簡単」を実行させてみたいのですが、

 w.range("A:A").autofilter field:=1, criteria1:="<>1"

ここでデバッグメッセージが出てしまいます。

再度お助け頂けますでしょうか?

よろしくお願い致します。

補足日時:2012/08/30 15:58
    • good
    • 0

A列が1の時、行を非表示にする


Sub Macro1()
For i = 1 To Sheets.Count
For j = 1 To Sheets(i).Cells(Rows.Count, "A").End(xlUp).Row
If Sheets(i).Range("A" & j) = 1 Then
Sheets(i).Range("A" & j).EntireRow.Hidden = True
End If
Next j
Next i
End Sub

全シート元にもどす
Sub Macro2()
For i = 1 To Sheets.Count
Sheets(i).Cells.EntireRow.Hidden = False
Next i
End Sub

こんな感じです。
    • good
    • 0

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