
添付ピボットテーブルでpagefieldの2019/04~2020/03迄に絞込みするには以下コードをどう修正すればいいでしょうか宜しく御願いします。
Sub Sample()
Range("A3").Select
Dim D As Range
Set D = ActiveCell.CurrentRegion
Sheets.Add
ActiveWorkbook.PivotCaches.Add(xlDatabase, D).CreatePivotTable _
Range("A3")
With ActiveSheet.PivotTables(1)
.PivotFields("販売月").Orientation = xlPageField
.PivotFields("店名").Orientation = xlRowField
.PivotFields("品名").Orientation = xlColumnField
.PivotFields("金額").Orientation = xlDataField
End With
Range("A3").Activate
'ここからのコードが?です。Field:=3は3列目の意味なので間違い
ActiveSheet.AutoFilterMode = False
Dim 期間1 As String
Dim 期間2 As String
期間1 = InputBox("データ抽出開始日を入力してください。(2017/1/1形式で入力)")
期間2 = InputBox("データ抽出終了日を入力してください。(2017/1/1形式で入力)")
Range("A3").AutoFilter Field:=3, _
Criteria1:=">=" & 期間1, _
Operator:=xlAnd, _
Criteria2:="<=" & 期間2
End Sub

No.2ベストアンサー
- 回答日時:
回答時時間がなかったのですが、解説を加えますね。
With ActiveSheet.PivotTables(1).PivotFields("販売月")
.PivotFilters.Add2 Type:=xlDateBetween, Value1:="2019/2/1", Value2:="2019/8/1"
End With
については、PivotFilters メソッドのパラメータTypeに日付の範囲があったと記憶していたので
https://docs.microsoft.com/ja-jp/office/vba/api/ … を確認して
https://docs.microsoft.com/ja-jp/office/vba/api/ … を参考に書いてみましたが
検証した時に確か1004エラーが返ったので、あまり追求せず(あまり時間がなかったので)べたにitm要素を
検証してVisible設定をする方法にしました。したがって、xlDateBetweenで実行する方法もあると思います。
まず、
Do ’繰り返し処理
期間1 = InputBox("データ抽出開始日を入力してください。(2017/1/1形式で入力)")
If StrPtr(期間1) = 0 Then Exit Sub ’キャンセル時、終了する
If IsDate(期間1) Then flg = True ’期待する形式であったらflgを設定して繰り返し処理から抜ける。
Loop Until flg = True
については、InputBoxの入力形式指定を無視した入力の場合を想定して値が日付に該当するかを検証しています。
If IsDate(期間1) Then flg = Trueの部分は、Elseなどを加える事でMsgboxなどを出す事も出来ると思います。
例:
If IsDate(期間1) Then
flg = True
Else
Msgbox("入力に不備があります。データ抽出開始日を2017/1/1形式で入力してください")
End if
こちらが本題です
For Each itm In ActiveSheet.PivotTables(1).PivotFields("販売月").PivotItems は、文字通り
作成されたピボットのフィールド"販売月"のPivotItems アイテムすべてに対して1つずつループで itm(変数)に代入しています。
代入されたitmの中身をIsDate(itm) でInputBox同様に検証して、Date型に出来るならsDate = CDate(itm)で
型変換(Date型)して変数sDateに代入しています。
(今、気づきましたがsDateは分かり難くなる可能性があるので変数名を変えた方が良いかも)
sDateと期間(変数)を比較演算子、論理演算子で解を求め、該当 itmに対しVisible設定しています。
If Not IsDate(itm) Then GoTo sp は、作成された該当セルの値が日付に出来ない場合などのエラーを防ぐ為
該当しない場合、そのアイテムに対して処理を飛ばしています。
データの内容が、絶対の値(事前に検証、設定されているの)であれば、必要はないと思います。
つまり、必要部分は(itmが文字列の場合)
For Each itm In ActiveSheet.PivotTables(1).PivotFields("販売月").PivotItems
If CDate(itm) >= 期間1 And CDate(itm) <= 期間2 Then
itm.Visible = True
Else
itm.Visible = False
End If
Next itm
また、Date型に変更する理由は、文字列だと比較できない為です
No.4
- 回答日時:
回答ボタンを押してしまいました。
For Each itm In ActiveSheet.PivotTables(1).PivotFields("販売月").PivotItems
の後に
Debug.Print itm.Value
イミディエイトウィンドウなどで値を確認して対応するなど考えるようにしましょう。
ただ、力業の分類になる場合もありますが、、
と、見直すと#3はダメ問題ありますね
下記にしてください。すみません。
For Each itm In ActiveSheet.PivotTables(1).PivotFields("販売月").PivotItems
If Not IsDate(itm) Or itm.Value = "(blank)" Then
itm.Visible = False
GoTo sp
End If
回答有難う御座います。
力不足でNo.1とNo.3の違いに朝から悩んでいました。結果以下で動きました。有難う御座います。
For Each itm In ActiveSheet.PivotTables(1).PivotFields("販売月").PivotItems
If Not IsDate(itm) Or itm.Value = "(blank)" Then
itm.Visible = False
Else
If Not IsDate(itm) Then GoTo sp
sDate = CDate(itm)
If sDate >= 期間1 And sDate <= 期間2 Then
itm.Visible = True
Else
itm.Visible = False
End If
End If
sp:
Next itm
No.3
- 回答日時:
>絞込みするには の範疇で良いですよね。
For Each itm In ActiveSheet.PivotTables(1).PivotFields("販売月").PivotItems
If itm.Value = "(blank)" Then itm.Visible = False
If Not IsDate(itm) Or itm.Value = "(blank)" Then GoTo sp
しかし、データの内容からしてそのようなデータが存在するのは、どうでしょう?
No.1
- 回答日時:
作成されたActiveSheet.PivotTables(1)の名前:販売月に期間でフィルタを掛けたいのだと解釈しました。
With ActiveSheet.PivotTables(1).PivotFields("販売月")
.PivotFilters.Add2 Type:=xlDateBetween, Value1:="2019/2/1", Value2:="2019/8/1"
End With
こんな感じで出来たような気がして書いてみましたが、どうもダメ見たいで、、すんなりあきらめ
便利機能でなく、べたにやる方法を考えました。。
参考
Dim 期間1 As String, 期間2 As String
Dim flg As Boolean
Dim itm As PivotItem, sDate As Date
Do
期間1 = InputBox("データ抽出開始日を入力してください。(2017/1/1形式で入力)")
If StrPtr(期間1) = 0 Then Exit Sub
If IsDate(期間1) Then flg = True
Loop Until flg = True
Do
期間2 = InputBox("データ抽出開始日を入力してください。(2017/1/1形式で入力)")
If StrPtr(期間2) = 0 Then Exit Sub
If IsDate(期間2) Then flg = True
Loop Until flg = True
' 期間1 = CDate(期間1)
' 期間2 = CDate(期間2)
’ここから
For Each itm In ActiveSheet.PivotTables(1).PivotFields("販売月").PivotItems
If Not IsDate(itm) Then GoTo sp
sDate = CDate(itm)
If sDate >= 期間1 And sDate <= 期間2 Then
itm.Visible = True
Else
itm.Visible = False
End If
sp:
Next itm
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL2007 VBAでピボットのフィルタ指定
その他(プログラミング・Web制作)
-
ピボットテーブルの日付フィルタ(VBA)
Excel(エクセル)
-
エクセル ピボットテーブルのマクロ設定について
Excel(エクセル)
-
-
4
Excel VBA ピボットテーブルにて、 最終行の取得の仕方を教えてください
Excel(エクセル)
-
5
EXCEL 2010 VBAでピボットで複数のアイテムをセルでフィルタ指定
Visual Basic(VBA)
-
6
EXCELピボットテーブル(複数アイテム)
Excel(エクセル)
-
7
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
8
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
風俗店へ行く前のご飯
-
EXCELで式からグラフを描くには?
-
血液検査の結果が悪くefgrの値...
-
検便についてです。 便は取れた...
-
VLOOKUP関数を使用時、検索する...
-
至急!尿検査前日にオナニーし...
-
尿検査前日に自慰行為した時の...
-
2つの数値のうち、数値が小さい...
-
値が入っているときだけ計算結...
-
勃起する時って痛いんですか? ...
-
納豆食べた後の尿の納豆臭は何故?
-
ExcelのVBAでフォームが表示さ...
-
精子に血が・・・
-
エクセルのラベルの値(文字列...
-
小数点以下を繰り上げたものを...
-
エクセルでエラーが出て困って...
-
最近、飲酒すると手のひらが真...
-
エクセルでθを求めたい。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
イタリアから帰国する際、肉製...
-
2つの数値のうち、数値が小さい...
-
健否~書類の書き方~
-
VLOOKUP関数を使用時、検索する...
-
値が入っているときだけ計算結...
-
小数点以下を繰り上げたものを...
-
エクセルで空白セルを含む列の...
-
EXCELで条件付き書式で空白セル...
-
リンク先のファイルを開かなく...
-
ある範囲のセルから任意の値を...
-
精子に血が・・・
-
エクセルで数式の答えを数値と...
-
風俗店へ行く前のご飯
-
エクセル指定した範囲からラン...
-
一番多く表示のある値(文字列...
-
Excel 数値の前の「 ' 」を一括...
-
ワードのページ番号をもっと下...
-
MIN関数で空白セルを無視したい...
おすすめ情報
例えば8行目に"店名"Z、"品名"か、"販売月"空欄、"金額"70、が有った場合、"販売月"空欄もピボットに表示されてしまいます。空欄は表示されず2019/04~2020/03のみとするにはどうしたらいいでしょうか。