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

よろしくお願いします。

エクセルにて顧客一覧を作成しました。
よくフィルターで単語で絞り込むため、いちいちフィルターで選択しなくても、よく選択する単語はボタンにして、ボタンを押したらその言葉でフィルターがかかるようにしたいのです。

まだマクロは勉強し始めで、もっぱら自動記録にて作成したのを手直ししています。
ボタンを作ってフィルターで絞り込むことには成功したのですが、例えば・・・

1、まず「株式ボタン」で株式会社のみ表示する
2、さらに「有限ボタン」で株式会社と有限会社を一緒に表示する
3、さらにさらに「合資ボタン」で合資会社も一緒に表示する
4、ここで「有限ボタン」を押したら表示中の一覧から有限会社が消える
5、最後にすべての列のフィルターを解除(フィルター機能はそのまま)する

というように、すでにフィルターで絞り込んだ表にプラスして表示するような・・・
指定した言葉のみのフィルターのON・OFFみたいな・・・

うまく伝わるか心配ですが、もしも伝われば、お願いします。

A 回答 (2件)

あんまり・・・ボタンにする必要性を感じないんですよね。


会社区分列を追加してオートフィルタとかフィルタオプションを使うとかで解決できそうな気がします。
ユーザー設定のビューとかも使えますし。
    • good
    • 0
この回答へのお礼

そうですね!その手がありますよね!!!
まさに「目からウロコ」です!

恥ずかしながら、「列を増やす」というアイデアがまったく浮かびませんでした。
難しく考えてました(^^;

ありがとうございました!(^-^)

お礼日時:2015/10/02 17:54

こんばんは。



しばらく様子を見ていました。
>うまく伝わるか心配ですが、もしも伝われば、お願いします。

というよりも、ご質問内容が、製作依頼になってしまっています。マクロを勉強しているというなら、マクロを書くの必要な部分というものもお分かりになるだろうに、作成依頼で、何でもかんでも盛り込んでしまおうとするのは、ちょっとまずいですよね。

>ボタンを作ってフィルターで絞り込むことには成功したのですが、例えば・・・
データ範囲がこうなっているとか見せても良かったのではないでしょうか。
それに、フィルターで絞り込んでいるなら、そのマクロ・コードは見せていただいても良いような気がします。

>すでにフィルターで絞り込んだ表にプラスして表示する
オートフィルターでは、2つの項目しかフィルターにのせることができません。
ご要望の内容は、以下のようになりますが、ボタンを3つも作って、それを連動させるなんていうことは、難題には違いないと思います。もう少し単純なものにすればよかったと思います。

'//
Const START As String = "A3" 'タイトル行から
Const dFIRST As String = "A4" '検索対象列のデータの始まり部分
Dim fRng As Range
Dim flg1 As Boolean
Dim flg2 As Boolean
Dim flg3 As Boolean
Const FORM1 As String = "COUNTIF(" & dFIRST & ",""*株式*""),COUNTIF(" & dFIRST & ",""*株*"")"
Const FORM2 As String = "COUNTIF(" & dFIRST & ",""*有限*"")"
Const FORM3 As String = "COUNTIF(" & dFIRST & ",""*合資*"")"

Sub SortMacro1() 'ボタン1
With ActiveSheet
 If flg1 Then
 .Range("AA2").FormulaLocal = ""
 flg1 = False
 Else
 .Range("AA2").FormulaLocal = "=OR(" & FORM1 & ")"
 flg1 = True
 End If
 Call FilterMacro
 End With
End Sub

Sub SortMacro2() 'ボタン2
'合資会社選択
With ActiveSheet
 If flg1 = False And flg2 = False Then
   .Range("AA2").FormulaLocal = "=" & FORM2
   flg2 = True
 ElseIf flg1 = False And flg2 Then
   .Range("AA2").FormulaLocal = ""
   flg2 = False
 ElseIf flg1 And flg2 Then
   .Range("AA2").FormulaLocal = "=OR(" & FORM1 & ")"
 flg2 = False
  Else
   .Range("AA2").FormulaLocal = "=OR(" & FORM1 & "," & FORM2 & ")"
 flg2 = True
 End If
 Call FilterMacro
 End With
End Sub

Sub SortMacro3() 'ボタン3
'有限会社検索
 With ActiveSheet
  If flg1 = False And flg2 = False And flg3 = False Then
   .Range("AA2").FormulaLocal = "=" & FORM3
   flg3 = True
  ElseIf flg1 = False And flg2 = False And flg3 = True Then
   .Range("AA2").FormulaLocal = ""
   flg3 = False
  ElseIf flg1 = False And flg2 And flg3 = False Then
   .Range("AA2").FormulaLocal = "=OR(" & FORM2 & "," & FORM3 & ")"
   flg3 = True
  ElseIf flg1 = False And flg2 And flg3 Then
   .Range("AA2").FormulaLocal = "=" & FORM2
   flg3 = False
  ElseIf flg1 And flg2 = False And flg3 = False Then
   .Range("AA2").FormulaLocal = "=OR(" & FORM1 & "," & FORM3 & ")"
    flg3 = True
  ElseIf flg1 And flg2 = False And flg3 Then
   .Range("AA2").FormulaLocal = "=OR(" & FORM1 & ")"
    flg3 = False
  ElseIf flg1 And flg2 And flg3 = False Then
   .Range("AA2").FormulaLocal = "=OR(" & FORM1 & "," & FORM2 & "," & FORM3 & ")"
    flg3 = True
  ElseIf flg1 And flg2 And flg3 Then
   .Range("AA2").FormulaLocal = "=OR(" & FORM1 & "," & FORM2 & ")"
    flg3 = False
  End If
  Call FilterMacro
 End With
End Sub
Private Sub FilterMacro()
 Application.ScreenUpdating = False
 With ActiveSheet
  If fRng Is Nothing Then
   Set fRng = .Range(START).CurrentRegion
  End If
  fRng.AdvancedFilter _
  Action:=xlFilterInPlace, _
  CriteriaRange:=.Range("AA1:AA2"), _
  Unique:=False
 End With
 Application.ScreenUpdating = True
End Sub
「エクセルのマクロでフィルターボタンを作り」の回答画像1
    • good
    • 1
この回答へのお礼

>マクロを勉強しているというなら、マクロを書くの必要な部分というものもお分かりになるだろうに、作成依頼で、何でもかんでも盛り込んでしまおうとするのは、ちょっとまずいですよね。

まったくその通りで、お恥ずかしいかぎりです。

マクロの記述をありがとうございます。
とても難しそうなマクロですが、マクロの本を購入したので、頑張って自力でこれくらい記述できるように勉強したいと思います。

ありがとうございました!(^-^)

お礼日時:2015/10/02 17:54

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