2017-08-10 17 views
0

エンドユーザーから2つの入力フィールドを使用してピボットテーブルをどのように並べ替えることができるかを調べようとしています。現時点では私はそれを1つだけ行うことができます。私が今持っているコードは次のとおりです。2入力フィールドからExcel vbaでピボットテーブルをソート

Private Sub SortingBox_Change() 
Dim PT As PivotTable 
Dim CB As ComboBox 

Set PT = Worksheets("Tableau Dynamique").PivotTables("LEO") 
Set CB = SortingBox 

If CB.Text = "Asc - % relevé en ligne" Then 
    PT.PivotFields("No Marchand").AutoSort Order:=xlAscending, Field:="% relevé en ligne" 

ElseIf CB.Text = "Desc - % relevé en ligne" Then 
    PT.PivotFields("No Marchand").AutoSort Order:=xlDescending, Field:="% relevé en ligne" 

ElseIf CB.Text = "No Marchand" Then 
    PT.PivotFields("No Marchand").AutoSort Order:=xlAscending, Field:="No Marchand" 

End If 
End Sub 

それはOK動作しますが、私はすべての昇順と降順のシナリオのためのリストのエントリを必要としています。 Fieldを設定するComboBoxとは別のComboBoxでAutoSort.Orderを設定することをお勧めします。唯一の問題は、私がそれをやろうとすると、私には十分な議論がないことが分かります。

私はそれを整理するために何ができるか知っていますか?

+0

質問をさらに明確にすることはできますか?おそらくあなたはあなたが望むものを示すイメージにリンクすることができます。 – jeffreyweir

答えて

0

こんにちは、ごめんなさい。その間。私は週末に解決策を見つけました。誰にとっても、もし私が何をしたのか、ここで似たようなものを探しているなら。

明確にするまず:

(私は動的テーブルを持っていると私はエンドユーザがテーブルをソートする陽気な方法を持ってしたいVBAがなければ、彼らは、ソートメニューを開き、選択したメインカラムに行かなければならないだろう追加の並べ替えのオプションは、あなたが本当にどのように知っていない場合、あなたがしなければならないことを彼らが望むものを得るためにたくさんのオプションを選択するよりもはっきりしない)。

私はComboBoxを選んで、そのような並べ替えを簡単に行うことができるようにしました: ComboBoxImg。フランス語をごめんね。要するに、(1)フィールド、(2)注文、(3)ピボットライン(希望の月に基づいて)の並べ替えを行うコンボボックスがあります

私は代わりに作成したコードを簡素化するためにAutoSortメソッドと相互作用できる各ComboBoxの変数。このような最終的なコードを見て:

Public Sub Sorter() 
Dim PT As PivotTable 
Dim OrderValue As String 
Dim OrderSort As XlSortOrder 
Dim FieldValue As String 
Dim MonthValue As Integer 
Dim TableName As String 

On Error Resume Next 

TableName = "LEO" 
Set PT = Worksheets("Tableau Dynamique").PivotTables(TableName) 
OrderValue = Range("OrderingBoxValue").Value 
FieldValue = Range("SortingBoxValue").Value 
MonthValue = Range("MonthInt").Value 

If OrderValue = "Ascendant" Then 
    OrderSort = xlAscending 
ElseIf OrderValue = "Descendant" Then 
    OrderSort = xlDescending 
End If 

If MonthValue = 0 Then 
    ActiveSheet.PivotTables(TableName).PivotFields("No Marchand").AutoSort OrderSort _ 
    , FieldValue 
Else 
    ActiveSheet.PivotTables(TableName).PivotFields("No Marchand").AutoSort OrderSort _ 
    , FieldValue, ActiveSheet.PivotTables(TableName).PivotColumnAxis. _ 
    PivotLines(MonthValue), 1 
End If 
End Sub 

は基本的に、私は別のシートのセルにコンボボックスをリンクされて、私はComboBox_Changeにサブを呼び出します。

明らかに、誰かがもっと効率的または全体的に優れたソリューションを持っていると思うなら、私はそれを見てうれしいでしょう。私はかなりVBAに新しいので、私のコードを改善することができると確信しています。

関連する問題