2017-02-14 4 views
1

これが可能かどうかわかりませんが、ピボットフィールドをすべてピボットテーブルの値セクションに追加するマクロを設計しようとしています数字またはパーセント。ここでExcel VBAピボットフィールドを数値またはパーセンテージとしてフォーマットする必要があるかどうかを確認します。

は、私がこれまで持っているものです。

If MsgBox("Do you want to add all pivot table fields as values?", vbOKCancel + vbQuestion, "Accept/Reject") = vbCancel Then 
    Exit Sub 
End If 

Dim pt As PivotTable 
Dim pf As PivotField 
Dim pivotTableName As String 

On Error Resume Next 
Set pt = ActiveCell.PivotTable 

If pt Is Nothing Then 
    pivotTableName = InputBox("Enter the pivot table name.") 
    Set pt = ActiveSheet.PivotTables(pivotTableName) 
End If 

For Each pf In pt.PivotFields 
    pt.AddDataField pt.PivotFields(pf.Name), pf.Name & " ", xlSum 
    pt.PivotFields(pf.Name & " ").NumberFormat = "#,##0" 
Next pf 

しかし、次の私は、if文のフィールドではなくパーセンテージとしてフォーマットする必要があるかどうかを確認するために追加したいと思います。 私のアイデアは以下の通りであった。

  1. チェックインフィールドに単一のレコード値は、それが100%未満であるかどうかを確認するために(または1)

  2. (これは私がでてる状況の95%に理想的です)
  3. フィールドの合計が、そのような< 100(完璧ではない)などの任意の数未満であることを確認し

  4. チェックフィールドの名前がそれに%を持っている場合(私はおそらく一緒に行く必要がありますどのような)

    各fld i nは、それぞれの場合pt.PivotFields

    InStr関数(fld.Value、 "%")なら、

  5. フィールドが計算フィールドである場合は、チェック(完璧ではない)

    は中FLD pt.PivotFields

    fld.IsCalculated場合、

最初の2つは可能ですか?誰かより良いアイデアがありますか?

ありがとうございます!

P.S. 私が興味を持ったもう一つのことは、フィールドにテキストが含まれているかどうか、またはフィールドが合計できないかどうかを確認することです。

+0

誰かがより良い答えを与えるまで、あなたがアイテムをループの中に見ることができますPivotField https://msdn.microsoft.com/en-us/library/office/ff820762.aspx(多分pivotTable1.ColumnFields(1).ChildItems(1).Value) – Slai

+0

ありがとう、私はアイデア、私はフィールドを合計しようとすると、エラーがなければそれはテキストでなければならないmmedフィールドをピボットテーブルに追加し、値を確認してフォーマットします。 –

+0

合計はテキスト値を無視しますが、そうでない関数もあります。私はpivotFieldの値を1つずつチェックして合計することを考えていました – Slai

答えて

0

これは誰もが興味を持っている場合、私はやってしまったものです:

サブAutoAddFields()

If MsgBox("Do you want to add all pivot table fields as values?", vbOKCancel + vbQuestion, "Accept/Reject") = vbCancel Then 
    Exit Sub 
End If 

Dim pt As PivotTable 
Dim pf As PivotField 
Dim pivotTableName As String 

On Error Resume Next 
Set pt = ActiveCell.PivotTable 

If pt Is Nothing Then 
    pivotTableName = InputBox("Enter the pivot table name.") 
    Set pt = ActiveSheet.PivotTables(pivotTableName) 
End If 

For Each pf In pt.PivotFields 
    If InStr(pf.Value, "%") > 0 Then 
     pt.AddDataField pt.PivotFields(pf.Name), pf.Name & " ", xlSum 
     pt.PivotFields(pf.Name & " ").NumberFormat = "0.0%" 
    Else 
     If pf.IsCalculated Then 
      If InStr(pf.Formula, "/") > 0 Then 
       pt.AddDataField pt.PivotFields(pf.Name), pf.Name & " ", xlSum 
       pt.PivotFields(pf.Name & " ").NumberFormat = "0.0%" 
      Else 
       pt.AddDataField pt.PivotFields(pf.Name), pf.Name & " ", xlSum 
       pt.PivotFields(pf.Name & " ").NumberFormat = "#,##0" 
      End If 
     Else 
      pt.AddDataField pt.PivotFields(pf.Name), pf.Name & " ", xlSum 
      pt.PivotFields(pf.Name & " ").NumberFormat = "#,##0" 
     End If 
    End If 
Next pf 

For Each pf In pt.PivotFields 
    If (pt.GetPivotData(pf.Value & " ") = 0) Then 
     pt.PivotFields(pf.Value & " ").Orientation = xlHidden 
    End If 
Next pf 

End Subの

関連する問題