2016-10-10 4 views
2

Итак, у меня есть сводная таблица, где я могу сортировать «Название растения». Я мог бы просто программировать функциональность, говоря «Plant26», «Plant12» и т. Д., Чтобы узнать названия растений, которые можно сортировать. Однако существует ли другой способ доступа ко всем этим именам и поместить их в массив, вместо повторения нескольких тысяч строк и определения разницы в имени внутри этого столбца, а затем добавить их в массив?Pivot Tables & VBA

Пример:

For i = 5 to lastrow 
    Name = Cells(i, "A").Value 
    If 
    'in array 
    Else 
    'add in array 
    End If 
    next i 

Однако есть более быстрый способ? Можно ли получить эти названия растений, которые можно было бы отсортировать и разместить в массиве? Вот пример псевдо ..

With Worksheets("sheet2").PivotTables(1) 
    For i = 1 To .PivotFields("Plant Name").Count 
     MsgBox .PivotFields(i).Name 
     'Add to array 
    Next 
End With 
+0

сделать вы хотите, чтобы получить их от 'PivotTable' у вас есть? –

+0

@ShaiRado Да. В сводной таблице содержится поле «Название завода», где я могу проверить завод, который я хотел бы увидеть или не увидеть. Я хотел бы получить все эти возможные растения, которые можно проверить или снять (просмотреть) в массив. –

+0

попробуйте код в моем ответе ниже –

ответ

1

Это поможет вам начать работу, он покажет вам все PivotItemsPivotField в «Завод имени».

Примечание: рекомендуется избегать использования ActiveSheet.

Option Explicit

Sub GetAllPlantNamefromPivot() 

Dim PvtItm    As PivotItem 
Dim PvtFld    As PivotField 
Dim PlantArr()   As Variant 
Dim count    As Long 

Set PvtFld = ActiveSheet.PivotTables("PivotTable1").PivotFields("Plant Name") 

' reset Plant Name Array count 
count = 0 

For Each PvtItm In PvtFld.PivotItems 
    ReDim Preserve PlantArr(0 To count) 
    PlantArr(count) = PvtItm 
    count = count + 1 
Next PvtItm 

End Sub 
0

Это перечислит название растения и отображать массив результатов в Sheet3:

Sub test_Amasian21() 
Dim A() 
ReDim A(1 To 1) 
Dim i As Double 

With Sheets("sheet2").PivotTables(1).PivotFields("Plant Name") 
    For i = 1 To .PivotItems.Count 
     A(UBound(A)) = .PivotItems(i).Name 
     ReDim Preserve A(LBound(A) To UBound(A) + 1) 
    Next i 
End With 
ReDim Preserve A(LBound(A) To UBound(A) - 1) 

Sheets("sheet3").Range("A1").Resize(UBound(A), 1).Value = A 
End Sub