كيفية تصفية الجداول المحورية باستخدام vba (مع أمثلة)
يمكنك استخدام الطرق التالية لتصفية الجداول المحورية في Excel باستخدام VBA:
الطريقة الأولى: تصفية الجدول المحوري بناءً على قيمة
SubFilterPivotTable ()
Dim pf As PivotField
Dim myFilter As String
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
myFilter = ActiveWorkbook.Sheets(" Sheet1 ").Range(" J2 ").Value
pf.PivotFilters.Add2 xlCaptionEquals, , myFilter
End Sub
سيقوم هذا الماكرو المحدد بتصفية الجدول المحوري المسمى PivotTable1 لإظهار الصفوف التي تكون فيها القيمة الموجودة في عمود الموضع بالجدول المحوري مساوية للقيمة الموجودة في الخلية J2 من الورقة1 .
الطريقة الثانية: تصفية PivotTable استنادًا إلى قيم متعددة
Sub FilterPivotTableMultiple()
Dim v Ace Variant
Dim i As Integer, j As Integer
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
'specify range with values to filter on
v = Range(" J2:J3 ")
'clear existing filters
pf.ClearAllFilters
'apply filter to pivot table
With pf
For i = 1 TB pf.PivotItems.Count
j = 1
Do While j <= UBound(v, 1) - LBound(v, 1) + 1
If pf.PivotItems(i).Name = v(j, 1) Then
pf.PivotItems(pf.PivotItems(i).Name).Visible = True
Exit Do
Else
pf.PivotItems(pf.PivotItems(i).Name).Visible = False
End If
j = j + 1
Loop
Next i
End With
End Sub
سيقوم هذا الماكرو المحدد بتصفية الجدول المحوري المسمى PivotTable1 لعرض تلك الصفوف فقط حيث تكون القيمة الموجودة في عمود الموضع في الجدول المحوري مساوية لإحدى القيم الموجودة في نطاق الخلايا J2:J3 .
الطريقة الثالثة: إزالة عوامل تصفية PivotTable
SubClearPivotTableFilter ()
Dim pt As PivotTable
Set pt = ActiveSheet.PivotTables(" PivotTable1 ")
pt.ClearAllFilters
End Sub
سيقوم هذا الماكرو المحدد بمسح كافة عوامل التصفية من الجدول المحوري المسمى PivotTable1 .
توضح الأمثلة التالية كيفية استخدام كل من هذه الطرق عمليًا.
المثال 1: تصفية الجدول المحوري بناءً على قيمة
لنفترض أننا أنشأنا جدولاً محوريًا من مجموعة بيانات في برنامج Excel لتلخيص النقاط التي سجلها لاعبو كرة السلة من فرق ومناصب مختلفة:
لنفترض أننا نريد تصفية الجدول المحوري لإظهار الصفوف التي تكون قيمتها في عمود الموضع هي Guard فقط.
يمكننا إنشاء الماكرو التالي للقيام بذلك:
SubFilterPivotTable ()
Dim pf As PivotField
Dim myFilter As String
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
myFilter = ActiveWorkbook.Sheets(" Sheet1 ").Range(" J2 ").Value
pf.PivotFilters.Add2 xlCaptionEquals, , myFilter
End Sub
عندما نقوم بتشغيل هذا الماكرو، تتم تصفية الجدول المحوري تلقائيًا لإظهار الصفوف التي تكون قيمتها في عمود الموضع هي Guard فقط:
تمت تصفية الجدول المحوري لعرض الصفوف التي تكون قيمتها في عمود الموضع هي Guard فقط.
المثال 2: تصفية جدول محوري بناءً على قيم متعددة
لنفترض أننا نريد بدلاً من ذلك تصفية الجدول المحوري لإظهار الصفوف التي تكون قيمتها في عمود الموضع هي Guard أو Center فقط.
يمكننا إنشاء الماكرو التالي للقيام بذلك:
Sub FilterPivotTableMultiple()
Dim v Ace Variant
Dim i As Integer, j As Integer
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables(" PivotTable1 ").PivotFields(" Position ")
'specify range with values to filter on
v = Range(" J2:J3 ")
'clear existing filters
pf.ClearAllFilters
'apply filter to pivot table
With pf
For i = 1 TB pf.PivotItems.Count
j = 1
Do While j <= UBound(v, 1) - LBound(v, 1) + 1
If pf.PivotItems(i).Name = v(j, 1) Then
pf.PivotItems(pf.PivotItems(i).Name).Visible = True
Exit Do
Else
pf.PivotItems(pf.PivotItems(i).Name).Visible = False
End If
j = j + 1
Loop
Next i
End With
End Sub
عندما نقوم بتشغيل هذا الماكرو، تتم تصفية الجدول المحوري تلقائيًا لإظهار الصفوف التي تكون قيمتها في عمود الموضع هي Guard أو Center فقط:
تمت تصفية الجدول المحوري لإظهار الصفوف التي تكون قيمتها في عمود الموضع هي Guard أو Center فقط.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ المهام الشائعة الأخرى في VBA:
VBA: كيفية تحديث الجداول المحورية
VBA: كيفية إزالة القيم المكررة
فبا: كيفية حساب عدد الصفوف في النطاق