• ベストアンサー

フィルタオプションの条件設定

フィルタにある条件をつけて抽出したデータの個数を 取得したいです。 A4のセルに04/12/10と有った場合は、 A6より下に有るデータから04/12/01-04/12/10のデータ個数を取りたく。 又、A4のセルに04/12/20と有った場合は、 A6より下に有るデータから04/12/11-04/12/20のデータ個数を取りたく。 又、A4のセルに04/12/31と有った場合は、 A6より下に有るデータから04/12/21-04/12/31のデータ個数を取りたいです。 フィルタオプションで設定できたら良いなと思いますが。無理でしたら、どの様にしたら、このようなデータの数量が取れるかアドバイスをお願いします。 なお2月の月末は28日の日と29日の日が有るので、 こちらも A6に05/02/28となっていたら 05/02/21-05/02/28のデータ個数で A6に08/02/29となっていたら08/02/21-08/02/29のデータ個数を取得できる設定をしたいです。 宜しくお願いします。

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

  • ベストアンサー
回答No.3

掲題の件に関して、ポイントは2つ 1)「A4」に入力した日付によって、範囲が求められる。   (「A4」に範囲終了日を設定するので、範囲開始日を求めること)    条件1:1ヶ月を3分割とした10日区切りの最初の日付を求める    条件2:ただし、31日の場合は30日区切りに含める 2)上記にて求められた検索条件にて、「A6」以下にある対象データ件数を算出   (「A6」以下とは、指定できないので範囲指定して対象データ件数を求めること)   (ここでは、「A6」から「A1000」と仮定する)    考察1:範囲開始日と範囲終了日の間にある件数を求める式は?        ->[範囲終了日迄のデータ件数] - [範囲開始日未満の件数] 1)の件に関しては、下記式にて求められる =DATE(YEAR(A4),MONTH(A4),CHOOSE(INT((DAY(A4)-1)/10)+1,1,11,21,21)) ->説明  ・CHOOSE(INT((DAY(A4)-1)/10)+1,1,11,21,21)   の、『INT((DAY(A4)-1)/10)+1』は、   「A4」の日付部分を評価し、月のどの区分かを判別する。   (1:1~10日、2:11~20日、3:21~30日、4:31日)   ※INT関数は、小数点以下を切り捨てる事に使用。ROUNDDOWN関数を使用するのも良い。   あとは、CHOOSE関数により、対象の日付となる数値を返す。  ・DATE関数により、数値データを日付シリアル値に変換する 2)上記にて、範囲開始日が求められたので、   範囲終了日迄の件数と範囲開始日迄の件数を算出する式を作成 [範囲終了日迄の件数を求める式] =COUNTIF(A6:A1000,"<=" & A4) [範囲開始日未満の件数を求める式] =COUNTIF(A6:A1000,"<" & DATE(YEAR(A4),MONTH(A4),CHOOSE(INT((DAY(A4)-1)/10)+1,1,11,21,21))) あとはご自由に 今回の件では使用しなかったですが、「A4」の日付から月の区分最終日を求める式は、 =CHOOSE(INT((DAY(A4)-1)/10)+1,DATE(YEAR(A4),MONTH(A4),10),DATE(YEAR(A4),MONTH(A4),20),DATE(YEAR(A4),MONTH(A4)+1,1)-1,DATE(YEAR(A4),MONTH(A4)+1,1)-1)

shinarin
質問者

お礼

ご丁寧な解説と式を有難うございます。 ほしかったデータがズバリ取れるようになりました。

その他の回答 (2)

  • tascany
  • ベストアンサー率48% (15/31)
回答No.2

「04/12/21-04/12/31のデータ個数」というのはつまり、A列(または他の列)が「日付」フィールドになってて、そのなかから所定の範囲に含まれる日付の個数をカウントせよ、ということでしょうか・・・? そういうことなら・・・。 1)オートフィルタを使う場合。 まずリストの外の適当なセルに、 =SUBTOTAL(3,$A$6:$A$100) をコピペしておきます(※A6:A100の範囲内で、空白でないセルの個数を求める)。 そのうえで、たとえば▼の(オプション)から、「04/12/21以上04/12/31以下」として条件を指定してやったうえでデータを抽出します。 そうすると、先ほどの関数が、オートフィルタで抽出したものだけの(空白でないセルの)個数を返してくれます。 ※SUBTOTAL関数では、引数「3」を「9」にかえてやれば、セルの個数ではなくその値の合計を求めてくれます。 2)オートフィルタを使わない場合。 A4に、抽出したい期間の最後の日付を入れるとして、適当なセルに、 =COUNTIF($A$6:$A$100,">="&DATE(YEAR($A$4),MONTH($A$4),ROUNDDOWN(DAY($A$4-2),-1)+1))-COUNTIF($A$6:$A$100,">"&$A$4) をコピペしておいてください。A4に期間の終了日を入力すれば、A6:A100の範囲内のセルの日付をチェックし、条件にあてはまるものの個数を返してくれます。

shinarin
質問者

お礼

ご丁寧に解説有難うございます。 今回はマクロに式を組み込んで自動的にデータを取り出したいので、手動操作が入れられないのがとってもネックでした。 今までは目で見て、範囲を選択してデータ数を求めていたので、この方法を参考にさせていただきます。 有難うございました。

回答No.1

こんばんは。 データ個数というのが B列にあって、その合計値を求める、ということでしょうか? そうだとしたら・・ 開始日を表示するセルを作業用セルとして用意します。 作業用セルを F1 として、 F1に、次の数式を入れてください。 ------------------------------------------------- =IF(DAY(A4)<21,A4-9,DATE(YEAR(A4),MONTH(A4),21)) ------------------------------------------------- データが A6:B50 にあって、データ個数を表示するセルをB4とすると、 B4に、以下の数式をCTRLキーとSHIFTキーを押しながらENTERで確定して配列数式にしてください。 -------------------------------------------------------------- =SUM(IF($A$6:$A$50>=$F$1,IF($A$6:$A$50<=$A$4,$B$6:$B$50,0),0)) --------------------------------------------------------------

shinarin
質問者

補足

アドバイス有難うございます。 ほしいデータは、有る期間内のデータ数量で それが月に3回有り、変る事がネックでした。 年の瀬お忙しい中ありがとうございました。

関連するQ&A