Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
Pivot ソートでコラム指定
投稿日時: 19/11/09 14:13:24
投稿者: Yukstar

 
 ご教示ください。
 PivotのソートをVBAで行おうとしています。
 
 ◆Script◆
 Sub test1()
 
   Dim pt As PivotTable
   Set pt = ActiveSheet.PivotTables("PivotTable1")
  
     Range("A3").Select
     pt.PivotFields("List").AutoSort xlDescending, "Sum of Amount", _
     pt.PivotColumnAxis.PivotLines(12), 1
 
 End Sub
 
 これはこれで走るのですが、PivotColumnAxis.PivotLines(12) をアルファベットで指定する方法が見つからずに悩んでいます。(この場合(12)ではなく、 column"M"として指定したい)ちなみに、inputboxでコラムを入力する仕様にする予定です。
 
 やり方をご存じの方、よろしくお願いいたします。

回答
投稿日時: 19/11/09 22:34:25
投稿者: simple

私にはその環境が無いので確認できませんが、
コメントがつかないようなのであえて確認させていただきます。
  
要するに Mという文字列により対象列をしたいということですか?
  
Column("M").column などとすると13が返りますから、
このことを利用して
"M"を入力させて、上記を使ったうえで、
PivotLines(12)の数値を指定したらどうですか?
 
# 13でなくなぜ12なのか私には不明ですが。環境がないので。

投稿日時: 19/11/10 01:46:14
投稿者: Yukstar

 simpleさん
 
 アドバイスいただき、ありがとうございます。大変心強いです!
 
 仰るとおりM列なのに"12"というのは私も不思議に思ったのですが、
 A列からN列までピボットフィールド(N列がGrand Total)があって
 上記コードで操作すると、M列は"12"でないと作動しません。
 
  会社のエクセルはWindows10で、自宅ではMicrosoft365を使用していますが
 どちらも同じ結果です。本題を解決することに夢中でスルーしていました…
 あとで調べてみます。
 
 スクリプトの最終行にColumns("M")を入れてトライしてみましたが
 どうもうまく作動しませんでした。PivotColumnAxisの使い方がいまいち掴めていないのが原因と思います。
 いま、作業できる環境にないので、もう少し試してみて、改めてコメントさせていただきます。
 
 取り急ぎコメントのお礼まで。

投稿日時: 19/11/10 03:45:55
投稿者: Yukstar

 
 simpleさん
 
 以下のとおりスクリプトを変更し、無事に実現することができました!!
 
  Sub test2()
  
     Dim ans As String
     ans = InputBox(prompt:="input column", Default:="A")
      
     Dim mycolumn As Long
     mycolumn = Columns(ans).Column
  
     Dim pt As PivotTable
     Set pt = ActiveSheet.PivotTables("PivotTable1")
  
       pt.PivotFields("List").AutoSort xlDescending, "Sum of Amount", _
       pt.PivotColumnAxis.PivotLines(mycolumn), 1
       
 
 End Sub
 
 
 例えば、下記のような形で直接指定すると作動しませんでした。変数型の問題でしょうか…?
 Pivotlines(Columns("M").Column)
 
 ですが、上に書いたようなスクリプトにするとうまく作動しました。
 
 相変わらず、M列(13)を指定するときには'L"(12)と入力しないとM列でソートされないのですが
 コード上で"-1"するなどして対応したいと思います。(少し格好悪いですが。。)
 
 普段VBAでPivotを操作することがあまりなかったので混乱していましたが、
 Column("M").columnを使えば良かったんですね…お恥ずかしながら辿り着きませんでした。
 
 いずれにせよ、解決できて大変嬉しく思っています。
 アドバイス本当にありがとうございました!!
 
 またわからないことありましたら、ご教示いただけると幸いです。
 今後ともよろしくお願いいたします。