質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.34%
RPA

RPA(Robotic Process Automation)は、ホワイトカラーの間接業務を人間に代行して自動的に行う技術や概念を指します。人間が繰り返すクリックやキーボード入力といった定型的なデスクワークを行うことから、仮想知的労働者(Digital Labor)と呼ばれることがあります。

UiPath

UiPathは、API連携による高い拡張性を持つ幅広いシステムに適用可能なRPAプラットフォームです。開発・設定ソフトウェアや管理コンソール、バックオフィスロボットなどのツールがあり、必要に応じて導入することが可能です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

148閲覧

VBAでスライサー項目ごとの印刷ができない

conron_murakawa

総合スコア2

RPA

RPA(Robotic Process Automation)は、ホワイトカラーの間接業務を人間に代行して自動的に行う技術や概念を指します。人間が繰り返すクリックやキーボード入力といった定型的なデスクワークを行うことから、仮想知的労働者(Digital Labor)と呼ばれることがあります。

UiPath

UiPathは、API連携による高い拡張性を持つ幅広いシステムに適用可能なRPAプラットフォームです。開発・設定ソフトウェアや管理コンソール、バックオフィスロボットなどのツールがあり、必要に応じて導入することが可能です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2024/11/25 04:49

実現したいこと

RPAでCSVを取得し所定のExcelに読み取りピボットを更新、その後マクロを読み込んで更新されたピボットのスライサーを利用してフィルタクリアしたものを一部、スライサー項目ごとの物を一部ずつ印刷するVBAを作りたい。

発生している問題・分からないこと

フィルタークリアしたもの一部の印刷は成功するが、スライサー項目別の印刷がどうしてもうまくいかず、フィルタークリアの物が項目数分印刷されてしまう。
原因は画面が項目の選択をしきれてないまま印刷している事だと思うが、秒数の加減をしてもうまくできない。

また、このコードだとスライサーの項目ごとのループに入ったあと項目数以上に周回してしまいなかなか完了しない。

該当のソースコード

Sub PrintSlicerFiltersAccurately_Final() Dim ws As Worksheet Dim slicer As SlicerCache Dim slicerItem As slicerItem Dim slicerName As String Dim itemCount As Integer ' ピボットテーブルのあるシートを設定 Set ws = ThisWorkbook.Sheets("印刷") ' シート名を変更 ' スライサーの名前を設定 slicerName = "スライサー_店舗コード" ' スライサー名を変更 ' スライサーキャッシュを取得 On Error Resume Next Set slicer = ThisWorkbook.SlicerCaches(slicerName) On Error GoTo 0 If slicer Is Nothing Then MsgBox "スライサーが見つかりません", vbCritical Exit Sub End If ' 1. フィルタークリア状態を印刷 slicer.ClearManualFilter ws.PrintOut Copies:=1 ' フィルタークリア状態を1部印刷 Debug.Print "フィルタークリア状態を印刷" ' 2. 各スライサー項目ごとに1部ずつ印刷 itemCount = 0 For Each slicerItem In slicer.SlicerItems ' データが存在する場合のみ進む If slicerItem.HasData Then ' スライサーを完全にリセット slicer.ClearManualFilter DoEvents ' Excelにリセットを認識させる ' 現在の項目だけを選択 slicerItem.Selected = True DoEvents ' Excelに選択を認識させる ' 印刷実行 ws.PrintOut Copies:=1 Debug.Print "印刷完了:" & slicerItem.Name itemCount = itemCount + 1 ' 現在の選択状態を解除 slicerItem.Selected = False DoEvents ' 選択解除を反映 End If Next slicerItem ' 最後にフィルターをクリア slicer.ClearManualFilter Debug.Print "すべての印刷が完了しました。印刷した項目数:" & itemCount MsgBox "すべての印刷が完了しました!", vbInformation End Sub

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

ChatGPTなどを利用して更新かけてはいるが改善されない

補足

Excel2019を利用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

とりあえず、こんな感じかな。
出かけなきゃなので、取り急ぎ。

Sub PrintSlicerFiltersAccurately_Final() Dim ws As Worksheet Dim slcCache As SlicerCache Dim slcItems As SlicerItems Dim s As slicerItem Dim i As Long Set ws = ThisWorkbook.Sheets("Sheet2") ' スライサーキャッシュを取得 On Error GoTo ErrHandler Set slcCache = ThisWorkbook.SlicerCaches("スライサー_販売先") On Error GoTo 0 Set slcItems = slcCache.SlicerItems ' 1. フィルタークリア状態を印刷 slcCache.ClearManualFilter ws.PrintPreview ' フィルタークリア状態を1部印刷 ' 2. 各スライサー項目ごとに1部ずつ印刷 With slcItems For i = 1 To .Count If .Item(i).HasData Then slcCache.ClearManualFilter For Each s In slcItems If .Item(i).Name <> s.Name Then s.Selected = False End If Next ws.PrintPreview End If Next End With slcCache.ClearManualFilter Exit Sub ErrHandler: MsgBox "スライサーが見つかりません", vbCritical End Sub

slcCache.ClearManualFilter
は、全部Trueになる。(1個も選択が内容にはできない。)

投稿2024/11/25 06:11

mattuwan

総合スコア2163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

conron_murakawa

2024/11/25 06:48

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。 何日も悩んでいたことが嘘のようです!本当にありがとうございます!
juner

2024/11/25 07:26

ベストアンサーに選べていないのではないでしょうか……?
conron_murakawa

2024/11/25 08:03

すいません、ご教示ありがとうございます! 初めて使用したものでわかっていませんでした・・・ ベストアンサー何度押しても足らないくらいのベストアンサーです!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.34%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問