Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
オートフィルタの条件が日付の場合、参照するには?
投稿日時: 24/01/17 12:06:03
投稿者: maeka

オートフィルタで絞り込まれている条件をVBAを使って参照したいです。
文字列・数値が設定されている場合の参照方法は理解できたのですが、日付が設定されている場合の参照方法が分かりません。
 
日付が設定されている列では、AutoFilterオブジェクトのCriteria1・Criteria2プロパティは「アプリケーション定義またはオブジェクト定義のエラーです。」になっています。
 
参照方法をご存じの方、ご教示をお願いいたします。

回答
投稿日時: 24/01/17 14:04:56
投稿者: simple

結論から申し上げると、
取得可能なプロパティにすべてが保持されている訳ではなく、再現できないこともあるようです。
以下の記事が参考になるかもしれません。
http://officetanaka.net/excel/vba/tips/tips129.htm
 
理論上からの疑問として理解はしますので、どなたかから回答があればよいと思います。
ただ、実務上といいますか、現実的な必要性がいまひとつ理解できません。
ぶっちゃけると、ご自分で設定したものではないんですか?
他人が設定したものであるなら、ご自分で必要とする条件を再設定するのが早いと思います。

投稿日時: 24/01/17 15:49:02
投稿者: maeka

simpleさん
 
ご回答ありがとうございます。
 
挙げていただいたサイトはすでに拝見していたのですが、他になにかご存じの方はいるかと考えて投稿いたしました。
 
質問した理由ですが、オートフィルタに適用した条件から関数式を組み立てるというコードを書いており、それに必要だったからです。
(例:「"=A"OR"=B"」で絞り込まれているフィルタから、個数を数える「=SUM(COUNTIFS(A1:A10,"=A"),COUNTIFS(A1:A10,"=B"))」という関数式を組み立てる など。日付以外の部分はすでに完成しております。)
 
必要か? と言われるとあまり必要ではないかもしれませんが、(面倒くさくても手打ちすれば関数は組めるので)スキルアップには良いかと考えて作っているところです!

回答
投稿日時: 24/01/17 16:33:05
投稿者: sk

引用:
「"=A"OR"=B"」で絞り込まれているフィルタから、個数を数える
「=SUM(COUNTIFS(A1:A10,"=A"),COUNTIFS(A1:A10,"=B")

そういう場合は SUBTOTAL 関数を使用なさればよろしいのではないでしょうか。
 
-------------------------------------------------
 
=SUBTOTAL(102,A1:A10)
 
-------------------------------------------------

投稿日時: 24/01/17 16:45:39
投稿者: maeka

skさん
 
ご回答ありがとうございます。
 
ご説明が足りておらず申し訳ございません。
フィルタ適用中であればSUBTOTALで算出できるのは分かっており、普段から便利に使っているのですが、フィルタ解除後も適用していた時と同様の結果が出る関数式を作成したいのです。

回答
投稿日時: 24/01/17 17:58:55
投稿者: sk

引用:
フィルタ解除後も適用していた時と同様の結果が出る関数式を作成したいのです。

・誰がオートフィルターの実行/解除を行う前提なのか。
 
・具体的にどのようなタイミングでその数式を作成するつもりなのか。
 
以上の点が不明なのでいまいち用途が分かりません。
 
仮に「ある時点における SUBTOTAL 関数の計算結果を
ワークシート上に保持しておきたい」という目的であれば、
その時点での数式セルの値を取得し、任意のセルに
代入しておけば済む問題でしょう。
(敢えて数式セルにしておかなければならない理由とは何なのか?)
 
引用:
日付が設定されている場合の参照方法

この部分に関してのみ言えば、[オートフィルター メニューで
日付をグループ化する]オプションが有効になっている状態で
追加された日付フィルター
の条件式を VBA のコードによって
取得する方法は、現時点において提供されていません。
 
日付のグループ化が無効になっている状態で追加された
日付フィルターに関しては、Filter オブジェクトの
Criteria1 / Criteria2 プロパティのいずれかから
文字列または 1 次元配列として取得することが可能です。
 
[オートフィルター メニューで日付をグループ化する]オプションは
Window オブジェクトの AutoFilterDateGrouping プロパティに相当しますが、
仮にこのプロパティの値を False に設定しても、 True だった時点に
追加された日付フィルターそのものは変化しませんので、
Criteria1 や Criteria2 を参照しようとしても同様のエラーが返されます。

投稿日時: 24/01/18 10:31:28
投稿者: maeka

skさん
 
たびたびのご回答ありがとうございます。
 

引用:
・誰がオートフィルターの実行/解除を行う前提なのか。

作業は自分ひとりが行うもので、ブックは他人も見る可能性があるものです。
  
引用:
・具体的にどのようなタイミングでその数式を作成するつもりなのか。

具体的なタイミングと言われるとお返事に困る状態です。
というのも、このマクロを作ろうと思ったきっかけが「全く関連性がなく表の構成も異なる複数のブックで、似たような作業(今回は関数式の組み立て)を別々のタイミングで行う」という場面が多々あり、いちいちキーボードを叩くのが面倒だったからなのです。
また、このマクロについては、グループ化された日付の処理以外の部分はすでに完成しており使用しています。
 
引用:
(敢えて数式セルにしておかなければならない理由とは何なのか?)

オートフィルタ適用セルのセル範囲や値が随時変更されるからです。また、他人も見るブックなので値が直接入力されていると「どのセルを参照したか分からない」と言われるためです。
 
引用:
[オートフィルター メニューで日付をグループ化する]オプションが有効になっている状態で
追加された日付フィルターの条件式を VBA のコードによって取得する方法は、現時点において提供されていません。

現在は無いのですね。認識いたしました。
 
疑問は解決いたしましたので、スレッドは閉じます。
ご回答いただいたお二方に感謝申し上げます。[/quote]

投稿日時: 24/01/18 10:33:37
投稿者: maeka

解決済みチェックを失念しておりました。失礼いたしました。