• ベストアンサー

エクセルで複数シートに対してマクロで非表示

エクセルで全シート(約100シートあります)に同じ様なフォーマットのシートがあります。 表示されている全てのシートに対し、指定する列(A)の計算結果値が指定する条件(例えば”1”)に合致する行をマクロで一括して非表示にしたいので、ご教示のほどよろしくお願い致します。 また同時に、全シートで非表示化された行を元に戻す(表示させる)コードも併せて 教えて下さい。 各シート毎に不要な行がそれぞれ大量にあり、困っておりますので、よろしくお願い致します。 エクセルは2007です。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

>ここでデバッグメッセージが出てしまいます。 それは、ご相談に掲示されている >エクセルで全シート(約100シートあります)に同じ様なフォーマットのシートがあります。 という状況説明が、ウソか又は間違いなのが原因です。 具体的な正しい状況説明ができないのでしたら、回答したすべてのマクロについて 高速で最も簡単: sub macro1() on error resume next 以下同じ 中速: sub macro2() on error resume next 以下同じ 最低速: sub macro3() on error resume next 以下同じ のように、それぞれ正しく間違えないように修正してください。

nori-y1242
質問者

お礼

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

nori-y1242
質問者

補足

再度のご回答どうもありがとうございました。 また状況説明が至らず申し訳ありませんでした。。 結果としまして、 「高速で最も簡単」に、 "sub macro1() on error resume next" を追加しまして、仰るとおりこれが最も高速に処理完了しました。 大感謝です! 他のコードだと数時間かかっていたところ、測っていませんでしたが、 20分かからずに終わっていると思います。 ちなみに、表示されている同じレイアウトのシートが97シートありますが、 他に非表示にしている違うレイアウトのシートが先頭に9シートありました。 当初だと非表示にしてあるシートで引っかかってしまったのでしょうか。 今回希望通りの処理が出来、大変満足しています。 どうもありがとうございました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

>不要な行がそれぞれ大量にあり、困っております 高速で最も簡単: 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

nori-y1242
質問者

補足

早速回答頂きましてどうもありがとうございました。 色々と試していますが、データが相当重い様です。 「高速で最も簡単」を実行させてみたいのですが、  w.range("A:A").autofilter field:=1, criteria1:="<>1" ここでデバッグメッセージが出てしまいます。 再度お助け頂けますでしょうか? よろしくお願い致します。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.1

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 こんな感じです。

関連するQ&A

専門家に質問してみよう