【Excelマクロ】特定のタイミングでオートフィルタ-を解除し、コンボボックスの表示項目を変更する方法

このQ&Aのポイント
  • Excelマクロを使用して、特定のタイミングでオートフィルタ-を解除し、コンボボックスの表示項目を変更する方法を教えてください。
  • シート1とシート2の画面上で行き来できる状態で、シート1でコンボボックスを利用してオートフィルタ-を実行し、シート2に移動するとオートフィルタ-が解除されず、コンボボックスの表示項目も変わらない問題があります。この問題を解決する方法を教えてください。
  • 現状ではシート1でオートフィルタ-を実行したままシート2に移動し、再度シート1に戻るとオートフィルタ-が解除されず、コンボボックスの表示項目も変わりません。この問題を解決する方法を教えてください。
回答を見る
  • ベストアンサー

【Excelマクロ】特定のタイミングでオートフィルタ-を解除し、コンボボックスの表示項目を変更するには。

お教えください。 まずは現状です。 シート1とシート2があります。 シート1上にはコンボボックスがあります。 コンボボックス内の項目を選択すると、シート1内でオートフィルタ-が実行され、選択項目をキーに絞り込まれます。 シート1とシート2はそれぞれ画面上のボタンで行き来できます。 シート2にはコンボボックスはありません。 ここで質問です。 (1)シート1でコンボボックスを利用し、オートフィルタ-を実行したまま状態で、(2)シート2にボタン(ないしは下のタブ)で移動します。(3)さらに再度ボタン(ないしは下のタブ)でシート1に戻るとします。 (1)~(3)の操作を行った時に、シート1のオートフィルタ-を解除し、コンボボックスの表示項目を「すべて表示」という項目に自動変更させる方法はありますでしょうか? 下記がボタン押下時のコードです。 一応ボタンで戻った時にオートフィルタ-は解除できるようになりました。下のタブだと変化なしです。 Sub ボタンA_Click() ' シート1を開く Sheets("シート1").Select End Sub Sub ボタンB_Click() If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData End If ' シート2を開く Sheets("シート2").Select End Sub 現状ではコンボボックスはそのままで、(タブで戻った時は)オートフィルタ-も変わりません。 どなたかご指南ください。 よろしくお願いします。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.3

そうです。そうやってひとつずつ解決していけばいいのです。 (大前提) CommandButton,ComboBoxなどのコントロールは、 ActiveXコントロール(コントロールツールボックスの中のコントロール)とします。 Sheet1 に CommandButton1 と ComboBox1 があり Sheet2 に CommandButton1 があるものとする Combox1のリストの第1番目の項目は、"全て表示"にする 例えば、     全て表示     東京支店     大阪支店     福岡支店 というようなりストにするということです。 ●処理内容● ( Sheet1 ) ComboBoxを選択したら、その選択した値をキーにしてオートフィルターをかける CommandButtonのClickで、Sheet2をアクティブにする ( Sheet2 ) CommandButtonのClickで、Sheet1をアクティブにすると同時に Sheet1のComboBoxのテキスト部分には、"全て表示"と表示し、 Filterを解除(データを全て表示)する ●コード● ( Sheet1 のシートモジュール) '-------------------------------------- Private Sub CommandButton1_Click()   Sheets("Sheet2").Select End Sub '-------------------------------------- Private Sub Worksheet_Activate()   ComboBox1.ListIndex = 0 End Sub '-------------------------------------- Private Sub ComboBox1_Change()   If ComboBox1.ListIndex = 0 Then     If ActiveSheet.FilterMode = True Then       ActiveSheet.ShowAllData     End If   Else     Range("C5").Select ▲▲  Selection.AutoFilter Field:=3, Criteria1:=ComboBox1.Text   End If End Sub '---------------------------------------------------------------- ( Sheet2のシートモジュール ) '------------------------------------- Private Sub CommandButton1_Click()   Sheets("Sheet1").Select End Sub '------------------------------------- 上記▲のAutoFilterの部分は実際に合わせて適宜変更のこと。 また、Comboboxへのリストのセットはありませんが、それは、セット済みとします。 それから先の質問で指摘した問題は確認しましたのでこの質問に回答しました。 その先の質問にもいくつかアドバイスがあるようですので、そのままのしないで お礼のコメントなどをして質問を閉じた方がいいでしょう。 それがマナーというものです。 以上です。

priiin
質問者

お礼

ありがとうございます。 おかげさまで、実現できました。 ちなみに↓のコードは書かなくてもうまく動きました。 Private Sub ComboBox1_Change()   If ComboBox1.ListIndex = 0 Then     If ActiveSheet.FilterMode = True Then       ActiveSheet.ShowAllData     End If   Else     Range("C5").Select ▲▲  Selection.AutoFilter Field:=3, Criteria1:=ComboBox1.Text   End If End Sub 別のコードで既に定義してしていたからだと思います。 とにかくありがとうございました。

その他の回答 (2)

noname#187541
noname#187541
回答No.2

#1です。 コンボボックスの方ですが、コントロールツールボックスのコンボボックスだとして、選択項目を変えるには、ListIndexプロパティを使えばいいでしょう。 インデックス番号は0からですので、「すべて表示」の項目が先頭にあるとすれば ComboBox1.ListIndex = 0 とすればいいでしょう。

noname#187541
noname#187541
回答No.1

こんにちは。 シートを切り替えた時表示されたシートでは「Worksheet_Activateイベント」、前のシートでは「Worksheet_Deactivateイベント」がWorksheet_Deactivate → Worksheet_Activate の順で発生します。 これらのイベントプロシージャに記述すればいいかと思います。 シートを切り替えた時に発生するイベントなので、コードでシートをSelectやActivateした時も発生するはずなので、ボタンのクリックイベントにオートフィルタ-を解除する記述は要なくなるでしょう。 どうでしょうか。

priiin
質問者

お礼

説明をしっかり理解できるよう、勉強したいと思います。 ありがとうございました。

関連するQ&A

  • コンボボックスとオートフィルタの連動

    データの件数が増えてきたので、コンボボックスで選択した項目を一発で表示させるマクロを組みたいと思います。 前提は以下の通りです。 Webからの受け売りというか、書かれていた通りにやってみたのですが動作しません。どこが間違っているのでしょうか。 また、他にも方法があるようでしたらお知恵をお貸し下さい。 +++ マクロを実行させたいシートにはA3からK3までの項目があります。 そのうち、B3の項目でフィルタをかけたいです。 1.マクロを実行するシートとは別に「マスター」というシートを作成。 そこにコンボボックスにリンクさせる項目を入力。(A3:A16) セルC1にINDEX関数を置き、(A3:A16)のそれぞれの値を文字に変換。 2.その変換した文字を変数に格納 3.もし、空白を選択してしまったら、マクロから抜ける 4.オートフィルタのセットは、既にセットされていたら一旦解除し再度セット。 5.変数に格納した文字をキーにして、オートフィルタで抽出する。 +++ Sub Combo_AutoFilter() Application.ScreenUpdating = False '変数宣言 Dim 選択項目 As Variant Dim 実行シート名 As Variant '現在のシート名の格納 実行シート名 = ActiveSheet.Name '選択項目の格納 Sheets("マスター").Select 選択項目 = Cells(1, 3) If 選択項目 = Empty Then Sheets(実行シート名).Select Exit Sub End If 'オートフィルタのセット Sheets(実行シート名).Select If ActiveSheet.AutoFilterMode = True Then Selection.AutoFilter Range("A3:K3").Select Selection.AutoFilter Else Range("A3:K3").Select Selection.AutoFilter End If 'オートフィルターで選択 Selection.AutoFilter Field:=2, Criteria1:=選択項目 Range("A3").Select End Sub +++

  • VBA コンボボックス項目追加?

    エクセル VBA コンボボックスの項目入荷についてですが 入力フォームを開いたときに Private Sub UserForm_Activate() ComboBox1.AddItem ("本社") ComboBox1.AddItem ("東京支社") ComboBox1.AddItem ("大阪支社") End sub のようにコンボボックスに項目をだすことはわかったのですが、 フォームをを開いたときにワークシートを全てを自動で 項目に表示する方法はありますでしょうか? 宜しくお願いいたします。

  • Excel2003オートフィルタの有無を確認マクロ

    オートフィルタを設定するときは、 Selection.AutoFilter を使ってもできますが、これですとオートフィルタがオン・オフどちらの状態かわかりません。 これを、オートフィルタをオンにしますよ、オフにしますよ、という命令を送るように命令を一行 で書くことは可能なのでしょうか? もし手順で書くなら(http://www.asahi-net.or.jp/~zn3y-ngi/YNxv208.html)から引用しますが、 次のようにできるようです。 /-------------------------------------------/ Private Sub オートフィルタの状態を調べて切り替える() If Worksheets("SSS").AutoFilterMode Then 'オートフィルタモードなら MsgBox "オートフィルタは現在オンです。[OK]ボタンをクリックするとオフにします" オートフィルタのオンオフを切り替える Else MsgBox "オートフィルタは現在オフです。[OK]ボタンをクリックするとオンにします" オートフィルタのオンオフを切り替える End If End Sub

  • オートフィルタのマクロについて

    オートフィルタのマクロを組もうとしているのですが、フィルタ条件に別シートのセルの値を入れたいのですが、そこがどうもうまくいきません。 作成したマクロは以下の通りです。 Sub 累計計算マクロ() Dim aRange As Range, bRange As Range, i As Date Set aRange = Sheets("累計").Range("B1") Set bRange = Sheets("累計").Range("B2") i = aRange.Value Sheets("クイーンエステート").Activate Range("A13:L13").Select Selection.AutoFilter Selection.AutoFilter Field:=2, Criteria1:="<=i", Operator:=xlAnd End Sub どなたか助けてください! 宜しくお願い致します。

  • Excelマクロのコンボボックスについて

    初めてマクロを扱います。 マクロに詳しい方、コードをご教授ください。 Excelマクロを使い下記の機能をシートに盛り込みたいと考えております。 【実現したいこと】 ・シート上にコンボボックスを作成し、コンボボックスで選択した項目で絞り込めるようにする。 ・コンボボックスに格納される項目は、A列の重複を除外し、昇順で並べ替えたもの。 ・またコンボボックスに格納する項目は日々レコード追加されるため、コンボボックスの中身にも随時反映するようにしたい。 ・コンボボックスには「全て表示」というアイテムを追加し、「全て表示」を選択すると、フィルターが解除される。 わかりにくいかもしれませんが上記のことを実現したいと考えております。 どうかお知恵をお貸しください!! よろしくお願いします!!

  • EXCEL2003 VBA オートフィルター解除

    お世話になります。 EXCEL2003を使用しています。 10列ほど項目が並んだEXCELシートがありますが、このシートを開いた時にオートフィルターを10列すべての項目でオートフィルターを解除する仕組みをVBAで構築したいのです。 EXCEL2007ではオートフィルターモードという便利なプロパティがあるようですが、EXCEL2003で一括でオートフィルターを解除する方法を知りたいです。 (私以外のユーザーがオートフィルターをかけている時がよくあるので) どなたかお知恵をお借りできませんでしょうか? よろしくお願い致します。 環境 Windows XP SP3 EXCEL2003

  • 【ExcelVBA】同一フォルダ内のオートフィルタを解除したい

    VBAが書かれているファイルと同階層にある、全てのエクセルファイルの全てのシートのオートフィルタを解除したいです。 初心者のため、手始めに「ファイル内の全てのシートのオートフィルタを解除(すべて表示)する」というコードを考えているのですが、 Sub すべて表示() Dim W As Worksheet For Each W In Worksheets ActiveSheet.ShowAllData Next W End Sub とすると、 実行時エラー1004 WorksheetクラスのShowAllDataメソッドが失敗しました となってしまいます。 何がいけないのでしょうか?

  • Excelマクロのコンボボックスについて

    マクロを初めて扱います。 どなたか詳しい方、ご教授ください。 Excelのシート上にActiveXのコンボボックスを作成しました。 そのコンボボックスに「あああ」という項目を追加したのですが、「あああ」項目が一番下に追加されてしまいました。 Me.ComboBox1.AddItem "あああ" どのように書けば、コンボボックスの最上部に追加されるのでしょうか? どうかコードの書き方をお教えいただけませんでしょうか?

  • 2つのコンボボックスを含むフィルタをかけたい(and検索)

    こんばんは。 VB2008です。 フォーム上に2つのコンボボックスがあります。 Sub フィルタ() Form1.TメインBindingSource.Filter = "進捗 LIKE '*" & Form1.進捗.Text & "*'" Form1.TメインBindingSource.Filter = "番号 LIKE '*" & Form1.番号.Text & "*'" End Sub を実行して、、「進捗」と「番号」コンボボックスに入力されている値のフィルタをかけたいのですが 上記のコート゛だと進捗コンボボックスの値は無視され、番号コンホ゛ホ゛ックスの値しか取得できません。 なので Sub フィルタ() Form1.TメインBindingSource.Filter = "進捗 LIKE '*" & Form1.進捗.Text & "*'"  and Form1.TメインBindingSource.Filter = "番号 LIKE '*" & Form1.番号.Text & "*'" End Sub としてみましたが、 andの部分がエラーになります。 どうすればand検索ができるのでしょうか? よろしくお願い致します。

  • オートフィルタで非表示セルの判定

    オートフィルタでフィルタ後、表示されない行にあるボタンを消したいのですが表示されていないセルの判定方法がわかりません。 下のマクロではエラーが出ます。 よろしくお願いします。 If ActiveSheet.Range("a10").Visible = False Then ボタンを消すマクロ End If

専門家に質問してみよう