SEなう!

知識0で客先に送り込まれた文系女の備忘録。日々のことも徒然に。

VBAでGETPIVOTDATA関数が使いたい。

VBAでもワークシート関数が使いたい時は、Object.WorksheetFunction.ワークシート関数。

ただ、ワークシート関数GETPIVOTDATAは呼び出せないので、EVALUATEメソッドを使う。

EVALUATE("式")

式は、文字列として入れる。

GETPIVOTDATAは、これ。
=GETPIVOTDATA("合計 / 金額",A3,"取引先","田中商事")
ぼんやりしたピボットのイメージ↓
f:id:butanoshogayaki:20141108170931j:plain

"取引先"(A列)が"田中商事"の、"合計/金額"を持って来て!なので、戻り値は500。

「A3」は、ピボットテーブル中の左上セルを指定します。

ドッキーング!
EVALUATE("GETPIVOTDATA(""合計 / 金額"",A3,""取引先"",""田中商事"")")

(´-`).。oO(引用符、多くね?

引用符の中にある引用符は、二つにしないといけないようです。

一番外側はEVALUATE

EVALUATE("

GETPIVOTDATA(""合計 / 金額"",A3,""取引先"",""田中商事"")

")

ドッキング前を見ると、GETPIVOTDATAで、"合計 / 金額""取引先""田中商事"が、" "で囲まれているから、それぞれ""合計 / 金額""   ""取引先""    ""田中商事""   になります。

ここまでは、既に習得済み。今日のソリューションは…

(´-`).。oO(列ラベルを可変にしたいなぁ。

合計/金額と合計/個数をスイッチさせたいんです!

時間切れ。ここまで。

--------追記分11/13

とりあえず、列ラベルを変数にしよう。ためしに、金額と置く。

dim r_label as String ’列ラベル
r_label = "金額" 'テスト用

シート名に「個数」と入っているか「金額」と入っているかでIF文で分岐させたと思いますが、忘れた

EVALUATEの中身が文字列だということを念頭に起きつつ進む。

EVALUATE("GETPIVOTDATA(""合計 / 

ここまではそのまま。次は、列ラベルの変数を入れたいので、文字列はここまでだぜ!と宣言しないといけません。一度 " で閉じ、変数をつなげます。

EVALUATE("GETPIVOTDATA(""合計 / & r_label &

ここからまた文字列だぜ!を意味するため、" で始めます。

EVALUATE("GETPIVOTDATA(""合計 / " & r_label & "

""合計 / 金額""の、終わりの""を打っていないので、そこからくっつけて完成!

EVALUATE("GETPIVOTDATA(""合計 / " & r_label & """,A3,""取引先"",""田中商事"")")

(´-`).。oO(引用符、多くね?