[[20181212102834]] 『VBAでピボットテーブルから数値を取得し合計したax(ぽんくら) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでピボットテーブルから数値を取得し合計したい』(ぽんくら)

VBA初心者です。

以下のようなピボットテーブルをマクロで作成しました。ここから台数が9台以下の値(台数含む)をそれぞれ取得し合計したいのですが、そのマクロをどのように書けばよいのかわかりません。

ピボットテーブルではすでに以下のような抽出を行っています。

・ユーザーの値フィルタで原価:500円以上で抽出しています。
・ピボットの元データでは、ユーザー→型番ごとに台数や金額を表記しているのですが、ピボットテーブルではユーザーごとの合計を表示しています。

型番にかかわらずユーザーごとの数値で算出する必要があるため、オートフィルタでは抽出できませんでした。
また、データは毎日追加されていくため、ピボットテーブルの行範囲は変化します。

以上を踏まえてマクロを教えていただきたいです。お願いいたします。


    値

商品分類  ユーザー   合計/台数  合計/売上額  合計/原価
A   A株式会社    5     1000      500
      B食品      10  5000    3000

            C販売      8         2500         1000
            D株式会社    12        3000         1500
B           E株式会社    6         2000         1200
            F共済      9         5000         2600
総計            50     18500           9800

< 使用 Excel:Excel2013、使用 OS:Windows7 >


追記:ちなみに、SumIf関数で試していましたが、以下のコードでは実行時エラー’1004’になってしまいました。どこが誤っているのかご教授いただけないでしょうか。
また、ほかに良い方法があればそちらも教えていただければ幸いです。

エラーメッセージ「'Range'メソッドは失敗しました:' Global'オブジェクト」

Sub テスト()

  Dim c As Variant

    Dim d As Variant
    Dim e As Variant

    Dim niNo As Double
    Dim niSale As Double
    Dim niCost As Double

   c = Range("C" & Rows.Count).End(xlUp) ’C列の最終行
    d = Range("D" & Rows.Count).End(xlUp) ’D列の最終行
    e = Range("E" & Rows.Count).End(xlUp) ’E列の最終行

    niNo = WorksheetFunction.SumIf(Range("C5:" & c), "<=9", Range("C5:" & c))  ’ここでエラー
    niSale = WorksheetFunction.SumIf(Range("C5:" & c), "<=9", Range("D5:" & d))
    niCost = WorksheetFunction.SumIf(Range("C5:" & c), "<=9", Range("E5:" & e))

    Range("D33").FormulaR1C1 = niNo
    Range("E33").FormulaR1C1 = niSale
    Range("F33").FormulaR1C1 = niCost

End Sub

(ぽんくら) 2018/12/12(水) 15:55


 c = Range("C" & Rows.Count).End(xlUp) 
 でcに入ってくるのはC列の最終行のセルの値。
 最終行の行番号を求めたければ
 c = Range("C" & Rows.Count).End(xlUp).Row
 また最終行を求めたとしても
 "C5:" & c
 はC5:10とかの形になる
 "C5:C" & c
 で。 
(ねむねむ) 2018/12/12(水) 16:04

 あと、SUMIF関数で合計範囲と条件範囲が同じ場合は後ろの合計範囲を省略できる。
(ねむねむ) 2018/12/12(水) 16:07

ユーザーの値フィルターはクリアして
行フィールドに、台数と原価を追加
台数の値フィルターで9以下
原価の値フィルターで500以上

(きまぐれ) 2018/12/12(水) 16:10


toねむねむさん

できました!ありがとうございます!

最終行のセルの値を取得するコードと行番号を取得するコードの区別がついていませんでした。
また、省略できることも教えていただきありがとうございます!
(ぽんくら) 2018/12/12(水) 16:17


toきまぐれさん

コメントいただきありがとうございます!
台数と原価を行フィールドに移動して値フィルターを指定すると、ユーザーごとの合計とならないため、今回はねむねむさんに教えていただいたコードを使用しました。

(ぽんくら) 2018/12/12(水) 16:34


台数と原価を行フィールドに移動ではなく、追加です。

行フィールド
 商品分類
 ユーザー
 台数
 原価

値エリア
 合計/台数
 合計/売上額
 合計/原価
(きまぐれ) 2018/12/12(水) 18:02


toきまぐれさん

詳細にありがとうございます。

ユーザーのフィルタをクリアし、行フィールドに追加でもやってみたのですが、原価500円以上かつ台数9台以下のユーザーはうまく抽出できませんでした。。。

(ぽんくら) 2018/12/13(木) 10:53


私、何か勘違いしていますかね?

台数のドロップダウンで
値フィルター → 指定の値以下
左のリスト 合計/台数
中央 TextBox 9
右のリスト 以下

原価のドロップダウンで
値フィルター → 指定の値以上
左のリスト 合計/原価
中央 TextBox 500
右のリスト 以上

(きまぐれ) 2018/12/13(木) 11:56


toきまぐれさん  

ひとつひとつ詳細にありがとうございます。

おっしゃっているやり方では希望の数値は抽出できないので、私の説明がわかりづらかったのかもしれません。今回の問題は解決しているのですが、今後のためにきまぐれさんのやりかたも理解したかったため米返信していました。

ありがとうございます。お手数をおかけしました。
(ぽんくら) 2018/12/13(木) 16:01


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.