اكسل VBA: إخراج القيم متميزة والإجماليات
-
05-07-2019 - |
سؤال
ولدي بيانات هذا النموذج:
Category Source Amount
Dues FTW $100
Donations ODP $20
Donations IOI $33
Dues MMK $124
وليس هناك ترتيب. وهذه الفئات هي غير معروفة في وقت الترجمة. أريد ماكرو VBA للتنقل عبر المدى، إخراج قائمة القيم متميزة، مع المجاميع الفرعية لكل منها. للبيانات المذكورة أعلاه، فإنه تبدو مثل هذا:
Category Total Amount
Dues $224
Donations $55
وكيف يمكنني أن أفعل هذا؟ أيضا، هل هناك طريقة لجعل المدى الكلي في كل مرة يتم تحديث الجدول أعلاه، أو هل من الضروري للمستخدم أن ينقر على زر؟
المحلول
وأنت قد تحتاج إلى استخدام المدمج في Excel ميزة للقيام بذلك. حلقات يمكن أن يستغرق وقتا طويلا ويكون مشكلة إذا كان لديك الكثير من القيم إلى حلقة من خلال.
وشيء من هذا القبيل ما يلي قد تحصل بدأت في إنشاء جدول محوري (من HTTP: //www.ozgrid.com/News/pivot-tables.htm )
Sub MakeTable()
Dim Pt As PivotTable
Dim strField As String
'Pass heading to a String variable
strField = Selection.Cells(1, 1).Text
'Name the list range
Range(Selection, Selection.End(xlDown)).Name = "Items"
'Create the Pivot Table based off our named list range.
'TableDestination:="" will force it onto a new sheet
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _
SourceData:="=Items").CreatePivotTable TableDestination:="", _
TableName:="ItemList"
'Set a Pivot Table variable to our new Pivot Table
Set Pt = ActiveSheet.PivotTables("ItemList")
'Place the Pivot Table to Start from A3 on the new sheet
ActiveSheet.PivotTableWizard TableDestination:=Cells(3, 1)
'Move the list heading to the Row Field
Pt.AddFields RowFields:=strField
'Move the list heading to the Data Field
Pt.PivotFields(strField).Orientation = xlDataField
End Sub
وهذا هو لالمجاميع الفرعية (على الرغم من أنني أفضل بكثير الجداول المحورية) http://msdn.microsoft.com/en-us /library/aa213577(office.11).aspx
وتحرير: أنا نعيد قراءة ولها الأفكار التالية. إعداد جدول محوري على ورقة منفصلة (دون استخدام أي رمز) ثم ضع التعليمات البرمجية التالية على ورقة لديه الجدول المحوري بحيث الجدول سيتم تحديث كل مرة يتم تحديد ورقة.
Private Sub Worksheet_Activate()
Dim pt As PivotTable
'change "MiPivot" to the name of your pivot table
Set pt = ActiveSheet.PivotTables("MyPivot")
pt.RefreshTable
End Sub
وتحرير # 2 تحديث كافة الجداول المحورية على ورقة http://www.ozgrid.com/VBA/pivot-table-refresh. هتم
Private Sub Worksheet_Activate()
Dim pt As PivotTable
For Each pt In ActiveSheet.PivotTables
pt.RefreshTable
Next pt
End Sub
وصلة لديها خيارات متعددة على كيفية تحديث الجداول المحورية في ورقة / المصنف.