• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【Excelマクロ】特定のタイミングでオートフィルタ-を解除し、コンボボックスの表示項目を変更するには。)

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

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

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

  • ベストアンサー
  • 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