• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAで保存時の状態に戻す方法)

VBAで保存時の状態に戻す方法

このQ&Aのポイント
  • 本などを参考にしながらエクセルVBAを使って売上帳を作成しています。
  • 品名欄のキーワード検索機能を付けていますが、抽出した後、元の状態に戻す良い方法はないですか?
  • VBAのコードを使用して、売上帳内の品名欄にキーワードを入力すると、該当するデータのみが表示される仕組みを実装しています。しかし、抽出結果を表示した後、元の表示状態に戻す方法が分かりません。どのような手順を踏んで保存時の状態に戻すことができるのでしょうか?

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

  • ベストアンサー
  • emaxemax
  • ベストアンサー率35% (44/124)
回答No.3

元の状態とは、オートフィルタが設定されており、かつ何もフィルタされてない状態のことでしょうか? ならば Sub 全表示() With ActiveSheet .AutoFilterMode = False .Range("A4:IV4").AutoFilter End With End Sub 元の状態が、オートフィルタも設定されてない状態なら Sub 全表示2() With ActiveSheet .AutoFilterMode = False End With End Sub でいいなじゃないですか?

yunako0517
質問者

お礼

ありがとうございます! 全表示2が、探していたものでした。 ただ、これはキーワード検査をしたときのみ、復元するんですか? 他の項目を並べ替えたときには、作動しないのですが?

その他の回答 (7)

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

>全て表示ボタン いちどオートフィルタを取り付け,「何か絞り込んだ状態」にしておきます ホームタブの並べ替えとフィルタ▼にある「クリア(C)」というメニュー項目を「その場で右クリックして」クイックアクセスツールバーに追加を選びます クリアのボタン(機能)は,フィルタで絞り込んであるときだけ有効になります。 #または データタブを開くと,大きな「フィルタ」ボタンの右に「クリア」があるので,それを使ってもOKです。 >並べ替えて元に戻す オートフィルタで並べ替えが出来るので最近はこれを使う人も増えているようですが,オートフィルタと並べ替えは全く別の機能なので,並べ替えを戻す機能はありません。 表のどこか(例えばA列)に「連番」を1,2,3…と入力しておき,元に戻したいときは連番列の昇順で全体を並べ替えられるよう用意をしておくのが簡単な方法です。

yunako0517
質問者

お礼

ありがとうございます。 オートフィルタのクリアボタンだったのですね。 クイックアクセスツールバーに入れておこうと思います。 連番列で戻す方法は、他のシートですが使っています。 いろいろ方法をアドバイスしてくださり、ありがとうございました。 みなさんに丁寧に教えていただいて、当初の質問は解決しましたので、ひとまず終わりにしておこうと思います。 また宜しくお願いします。

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

>このリセットはコードの途中にあるのでキーワード検索と一体化してしまい、 >元に戻すという作業に反映されないのでは、と思っていますが、どうなのでしょう? あなたのアタマにあるのは「キーワード検索したい」だけですが,あなたが参照していたマクロはもうちょっとよく考えられています。 Sub 品名検索() Dim ans As String ans = InputBox("文字列を入力してください") With ActiveSheet ’以下のブロックで,品名検索を開始する前から既にオートフィルタで絞られている想定で ’一度そのオートフィルタを全て解除し,改めてキーワード検索する準備を行っています ’故にここで解除してしまった事前のオートフィルタを復元したいのかな?と思ったワケです If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする         ←のように,解説済みです End If ’以下のブロックでは,全データを平らに広げた状態で改めてオートフィルタを取り付け, ’キーワードによって絞り込みを行います .Range("A4:IV4").AutoFilter 'オートフィルタモードをセット .Range("A4:IV4").AutoFilter Field:=5, Criteria1:="=*" & ans & "*" '5つ目のフィルターに検索文字 End With End Sub 先の回答でも触れたようにあなたは「元の状態」を「オートフィルタが取り付けられていない状態」としか考えていませんでしたが,あなたが参照していたマクロは「事前にオートフィルタで何某か絞られている状態から始まる」という想定をしていたという事です。

yunako0517
質問者

お礼

すごく丁寧におしえてくださってありがとうございました。 自分の書いていたコードの中身が良く分かりました。 >故にここで解除してしまった事前のオートフィルタを復元したいのかな?と思ったワケです これは、いいえです。 戻したいのは、全く何のフィルタもかかっていない、並べ替えもされていない状態、 つまりそのファイルを最後に保存した状態です。 あと、NO.4で >もっと簡単にはツールバーに(またはExcel2007以降ならクイックアクセスツールバーに)「全て表示」のボタンを追加しておいてクリックした方が,便利です。 この全て表示のボタンはどこにありますか?使っているのはExcel2007です。

  • emaxemax
  • ベストアンサー率35% (44/124)
回答No.6

ANo3、5です。 > はい。別の列で並べ替え等をしたときにも、同様に元通りになれば便利だな、と思ったものですから。 > 教えてくださったコードを参考にして、ちょっと自分でがんばってみます。 並べ替えとオートフィルターでの抽出はまったく別物ですから先ほどのコードでは何の参考にもなりません。 並べ替えを元の戻すのなら「元に戻す」ボタンでOKです。 http://www15.plala.or.jp/PCwakaba/excel/excel62.html

yunako0517
質問者

お礼

そうなんですか…。 ではまた違うコードになるんですね。 教えてくださってありがとうございます。 全然見当違いの事をするところでした。

  • emaxemax
  • ベストアンサー率35% (44/124)
回答No.5

ANo3です。 > 全表示2が、探していたものでした。 それはよかったですね。 > ただ、これはキーワード検査をしたときのみ、復元するんですか? > 他の項目を並べ替えたときには、作動しないのですが? そうですよ。だってご質問が > 品名欄のキーワード検索機能を付けていますが、抽出した後、元の状態に戻す良い方法はないですか? でしたから、その通りオートフィルターで絞り込んだ表示を全表示に戻しています。 他の項目を並べ替えたときとはどういう意味ですか? オートフィルターとは無関係にデータの並べ替えをして、それを元通りにしたいということですか? ならば、他の項目を並べ替えるコードをご提示ください。

yunako0517
質問者

お礼

たしかに!私が質問で書いておりました。すみません。 >他の項目を並べ替えたときとはどういう意味ですか? オートフィルターとは無関係にデータの並べ替えをして、それを元通りにしたいということですか? はい。別の列で並べ替え等をしたときにも、同様に元通りになれば便利だな、と思ったものですから。 教えてくださったコードを参考にして、ちょっと自分でがんばってみます。 どうしても出来ないときは、また質問させてもらってもいいですか? その時は宜しくお願いします。

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

むむ~? autofiltermode = false って,そもそもあなたがご質問に書いたマクロで既にリセットする用に使ってますけど? それですそれですってことは,ご自分が書いたマクロの内容を理解せずに使っていたって事なのかなぁ。。 掲示のマクロにわざわざそういう「リセット命令」が書いてあったからこそ,ご相談でなんの説明もなかった「元の状態」は少なくとも(判ってるはずの)「全部表示」のことじゃなく,「マクロ実施前にフィルタで絞り込んでた状態」のことだと思ったんですが間違いだったようです。 マクロで絞り込みしたあと全て表示するなら sub macro2() if activesheet.filtermode then activesheet.showalldata end if end sub とかでもイイですが,もっと簡単にはツールバーに(またはExcel2007以降ならクイックアクセスツールバーに)「全て表示」のボタンを追加しておいてクリックした方が,便利です。 #2003までのエクセルでは  ツールメニューの所で右クリック  ユーザー設定ダイアログを出して  コマンドのタブのデータの分類で  オートフィルタの一つ下の「全て表示」を  ツールバーにドラッグして出しておく

yunako0517
質問者

お礼

お恥ずかしい話、実はまだ自分で書いたコードも全て理解しておりません、です・・・。 本を見たり、こうやってサイトで教えてもらったりしたコードをひとつひとつ試して、勉強している途中です。 このリセットはコードの途中にあるのでキーワード検索と一体化してしまい、元に戻すという作業に反映されないのでは、と思っていますが、どうなのでしょう? >)「全て表示」のボタンを追加しておいてクリックした方が,便利です この方法が初心者の私にとっては一番間違いなさそうですね。 ありがとうございました。

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

質問の意味を十分とらえていないかもしれないが Sub test02() Range("a1:C10").Select Selection.AutoFilter Field:=2, Criteria1:="f" ' 処理 Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Range("H1") Selection.AutoFilter End Sub の.最後のAutoFilter のようなことですか。 例データ A1:B10  さいさい 番号 コード 1 a 2 a 3 s 4 d 5 f 6 a 7 f 8 e 9 b 結果 H1:I3 番号 コード 5 f 7 f その後画面は元に戻っている

yunako0517
質問者

お礼

うーん ちょっと思っていたのとは違うようです でも、ありがとうございました!

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

たとえば。 Sub 品名検索r1() Dim ans As String ans = InputBox("文字列を入力してください") activeworkbook.customviews.add viewname:="tempView", rowcolsettings:=true With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A4:IV4").AutoFilter 'オートフィルタモードをセット .Range("A4:IV4").AutoFilter Field:=5, Criteria1:="=*" & ans & "*" '5つ目のフィルターに検索文字 End With End Sub sub 表示復元()  on error resume next  activeworkbook.customviews("tempView").show end sub

yunako0517
質問者

お礼

回答ありがとうございます。 やってみたところ、直前の状態に戻るので続けて検索した場合などは、ちょっと困るかも・・・。 でもありがとうございました。 他のVBAでこの機能が助かりました!

関連するQ&A