アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBAで、フィルターオプションの「項目Aが a以降b以前、または、項目Bが a以降b以前」と同じことをしたいと思っています。(項目Aも項目Bも年月日)

マクロ記録でそれをやると、次のような形になります。
Range(ナントカ).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range(なんたら), Unique:=False

この検索条件を「範囲で指定する」のではなくて、直接プログラム中で指定したいのですが、それは出来ないのでしょうか。


例えば、下の場合だと、「入居日が2018/12/31以降2019/5/6以前、または、退去日が2018/12/31以降2019/5/6以前」というのが検索条件です。

その検索条件を、Range(なんたら) という範囲で指定するのではなく、直接、2018/12/31や2019/5/6という年月日をVBAで書きたいと思います。

同じことができるのであれば、AdvancedFilter以外でもかまいません。

ご教示いただければ幸いです。
不可能だということであれば、その旨の回答をお願いします。

「VBAで、フィルターにて、項目間で「また」の質問画像

A 回答 (3件)

AdvancedFilterでは必ず Criteriaを書き出す必要があります。

直接指定はでき
ません。ただし Criteriaは数式でも指定できます。

> 同じことができるのであれば、AdvancedFilter以外でもかまいません。
データベースクエリのパラメータクエリを使うか PowerQueryでカスタム数式
を使えばマクロを使わなくてもできます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2019/10/11 05:17

あらたにデータベースを構築するというアイデアはないわけではないのですが、全部作り変えすることになります。

ただ、VBA直接を書き入れるというものは、AdvancedFilterにはありません。

しかし、これは、単純な構成なので、データ場所、数式入力場所を確保し、数式パターンを確保すればいだけです。

>「入居日が2018/12/31以降2019/5/6以前、または、退去日が2018/12/31以降2019/5/6以前」というのが検索条件です。

条件パターンが同じなら日付だけを書き換えればよいですし、数式が違うようなら、パターンを変えて、リストにして、そのパターンを選ぶようにすればよいです。CrForm1、CrForm2 として加えます。
なお、数式は、VBAに作り変えるには面倒ですから、Debug.Print を利用すると便利です。

>同じことができるのであれば、AdvancedFilter以外でもかまいません。
それは、今のものが具合が悪ければ、応相談です。

'//標準モジュール
Sub AdvancedFilterSample1()
 Dim rData As Range
 Dim CrForm1 As String
 Dim Date1, Date2, Date3, Date4
 Dim d1, d2, d3, d4
 'データの範囲
 Set rData = Range("A5:E20")

 Date1 = "2018/12/31": d1 = CLng(CDate(Date1))
 Date2 = "2019/5/6": d2 = CLng(CDate(Date2))

 Date3 = "2018/12/31": d3 = CLng(CDate(Date3))
 Date4 = "2019/5/6": d4 = CLng(CDate(Date4))

 If ActiveSheet.FilterMode Then
  ActiveSheet.ShowAllData 'データを全表示
 End If
 'F1~F2をクライテリアに使う
 'C6..入居日先頭 D6...退去日先頭
 CrForm1 = "=OR(AND(C6>=" & d1 & ",C6<" & d2 & "),AND(D6>=" & d3 & ",D6<" & d4 & "))"

 Range("F1").ClearComments
 Range("F2").FormulaLocal = CrForm1  '数式を代入

 rData.AdvancedFilter Action:=xlFilterInPlace, _
  CriteriaRange:=Range("F1:F2"), Unique:=False
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

お礼日時:2019/10/11 05:17

AdvancedFilterメソッド名で検索すると、それぞれの引数についても調べる事ができます。


自分で調べ、自分で試し、自分で納得する、というプロセスも重要ですよ。

それでも分からなければ、また質問してください。
    • good
    • 0

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