【初月無料キャンペーン中】gooドクター

いつもお世話になっております。本日はオートフィルタについて教えてください。

エクセルで受注分の出荷納期を確認しています。

B3セルに入れた日付以降で試運転納期でオートフィルタをかけたいのですが、
>Criteria1:=">B3"で動きません。>todayも駄目ですよね。。。

ここは毎月変動するので、入力して反映させたいのですが、日付でないと駄目でしょうか。
また、B3の日付以降の件数も〇件と表示させたいです。

Private Sub CommandButton1_Click()

Range("A5").AutoFilter _
Field:=6, Criteria1:=">B3"

Dim num As Integer
num = Application.WorksheetFunction.Subtotal _
(2, Range("A1").CurrentRegion.Columns(1))

MsgBox num & "件"

End Sub

以上宜しくお願い致します。

「エクセル VBA オートフィルタ今日以降」の質問画像
gooドクター

A 回答 (3件)

=">" & Range("B3").Value この書き方が分からず上手くいきませんでした。


そのまま貼り付ければよいのですが。

>If .AutoFilterMode = True Then
> .AutoFilterMode = False
>End If

AutoFilter が作られていなければ、AutoFilter を形成してあげるわけです。

>抽出表示ができるようになりましたが、0件となってしまうのはどうしてでしょうか・・

num = WorksheetFunction.Subtotal(2, Range("A6", Cells(Rows.Count, 1).End(xlUp)))
可能性としては、A列そのものをカウントする対象としていない場合、または、関数のCountの範囲に数字がない場合。

私は、こういう時に
Range("A6", Cells(Rows.Count, 1).End(xlUp)).Select '範囲を選択
Stop 'マクロを止める

として、正しい範囲を示しているか検査します。
    • good
    • 0
この回答へのお礼

なるほど、AutoFilterの形成有無を調べる必要があるのですね。

抽出表示は私の勘違いで0件で合っていました!
正しく動作しております。
範囲を選択して確認するやり方もとても参考になりました。

大変勉強になりました。ありがとうございました!

お礼日時:2019/09/25 09:12

Private Sub CommandButton1_Click()


 Dim num As Long 'Longに変えました。
 With ActiveSheet
  If .AutoFilterMode = True Then
   .AutoFilterMode = False
  End If
  .Range("A5").AutoFilter
  .AutoFilter.Range.AutoFilter _
   Field:=6, _
   Criteria1:=">" & Range("B3").Value
  num = WorksheetFunction.Subtotal(2, Range("A6", Cells(Rows.Count, 1).End(xlUp)))
  MsgBox num & "件"
 End With
End Sub

'Private Sub CommandButton1_Click()
//あくまでも、日付値は内部ではシリアル値になっていることが条件です。

>Criteria1:=">B3"で動きません。>todayも駄目ですよね。。。

Criteria1:=">" & Range("B3").Value 'B3に日付値を入力後、特定の日付以降
または
Criteria1:=">" & Date   '本日以降
    • good
    • 0
この回答へのお礼

いつもご回答ありがとうございます。
日付はLongなのですね。
=">" & Range("B3").Value この書き方が分からず上手くいきませんでした。。
Ifを入れたのはなぜでしょうか。
ありがとうございます!
抽出表示ができるようになりましたが、0件となってしまうのはどうしてでしょうか・・

お礼日時:2019/09/20 15:35

こんにちは



どこかにオプション指定用のセルを設けて、フィルターオプションを利用すれば宜しいのではないでしょうか?
https://www.forguncy.com/blog/20170714_filteropt …

あるいは、空き列を作業列として
 Range(作業列範囲).FormulaLocal = "=(F6>today())"
などとすることで、該当する行の値が「TRUE」になるので、これを利用して作業列の値でフィルタをかけるようにすれば、オプションを利用しなくても可能になるでしょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
フィルタオプションでもできました!
Range(作業列範囲).FormulaLocal = "=(F6>today())" はセルに式として入れるのでしょうか?エラーになっていまって・・・
マクロで?ボタンを使うという事でしょうか?
勉強不足で申し訳ないです。。

お礼日時:2019/09/20 15:35

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング