半角チルダ

ExcelVBA、その他。
覚え書きや、補足資料などのスクラップブック。
end-u(1037781)

■Application.Dialogs(xlDialogFilter)の引数

2008-10-17 19:00:00 | VBA Tips
.Dialogs(xlDialogFilter)...オートフィルタオプションウィンドウの事ですが、xl2000, xl2003のヘルプには引数が載っていません。(XPは未確認)
msdn にも記載がありません。
組み込みダイアログ ボックス引数一覧
Built-In Dialog Box Argument Lists [Excel 2003 VBA Language Reference]

実際には、引数を指定し、オプションウィンドウを開く事ができます。
引数の順番は、AutoFilter メソッドに準じています。

[AutoFilter メソッド]
expression.AutoFilter(Field, Criteria1, Operator, Criteria2)

[Dialogs オブジェクト]
Application.Dialogs(xlDialogFilter).Show Field, Criteria1, Operator, Criteria2

例えばユーザー操作を伴うマクロを作成する時などに、簡易的に使えるかもしれません。



Sub try()
  Dim r As Range  'フィルタ範囲

  With ActiveSheet
    '.Cells(3).Select
    'オートフィルタ解除
    .AutoFilterMode = False
    On Error Resume Next
    ActiveCell.AutoFilter
    If Err.Number <> 0 Then Exit Sub
    On Error GoTo 0

    '■オートフィルタダイアログ表示
    '■引数は Field,Criteria1,Operator,Criteria2
    '例)Application.Dialogs(xlDialogFilter).Show 2, ">", xlAnd, "<"
    Application.Dialogs(xlDialogFilter).Show ActiveCell.Column

    '.FilterMode = True...つまりキャンセルされていないなら。
    If .FilterMode Then
      'フィルタ範囲をセット
      Set r = .AutoFilter.Range
      '抽出件数のチェック
      If WorksheetFunction.Subtotal(3, r) > _
        WorksheetFunction.Subtotal(3, r.Rows(1)) Then

        'ここでいろいろな処理など。
        .PrintOut preview:=True

      End If
      Set r = Nothing
    End If
    .AutoFilterMode = False
  End With
End Sub

ユーザー操作によって抽出条件を指定する場合、InputBox などで条件を直接入力してもらったり、予め作成したデータリストから選択してもらったりする方法が考えられます。ユーザー操作の簡便性を考えると、リスト選択方式が好まれる事が多いでしょう。
この時に、抽出フィールドが変動する場合は、その都度、重複データを除いたリストを作成する必要があります。
Dictionary オブジェクトを使いこなせればそれほど難しくありませんが、Excel の基本機能を活用する事で対応できるケースもあるのではないでしょうか。
コード作成アプローチの選択肢の1つとして、知っておいて損はないかもしれません。
Comment
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする