我在图像中表示的枢轴表中具有数据。我的要求是为每个字段列表(A列)提取项目值(B列和C列)。将这些值存储在col C中通过半彩色(;):
将多个值分开。eg:对于每个HOD字段>即MGR1>从Col B(HOD ID字段)提取H12345和R12345;R12346来自Col C(Rep ID字段),并将这些值保存到以后在代码中使用的字符串。
等等MGR2,MGR3等...
我尝试了这样的事情,但不确定如何将值保存到字符串中,对不起,VB的新事物:
Sub PivotTabletest()
Dim PvtTbl As PivotTable
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
Set PvtTbl = Worksheets("HOD View").PivotTables("PivotTable1")
Set rng1 = PvtTbl.PivotFields("REP ID").DataRange
Set rng2 = PvtTbl.PivotFields("HOD").PivotItems("MGR1").DataRange.EntireRow ' MGR1 should be picked dynamically instead
Set rng3 = Intersect(rng1, rng2)
'Intersect(rng1, rng2).Interior.Color = vbYellow 'color coding works!
For Each Cell In rng3
Debug.Print Cell.Value
Next Cell
End Sub
更新的代码,能够打印Col3的值,但需要能够制作" PivotItems(" MGR1")" Dynamic(不是硬编码)
枢轴表
此功能将返回一个带有每个hod
的行的数组Function PivotTableTest() AS Variant
Dim PvtTbl As PivotTable, DataRng As Range, WorkingRow AS Range
Dim Output() As String, ItemNumber AS Long
Set PvtTbl = Worksheets("HOD View").PivotTables("PivotTable1")
Set DataRng = PvtTbl.DataBodyRange
'Resize the array, with a row for every entry in HOD ID
Redim Output(0 To WorksheetFunction.CountA(PvtTbl.TableRange1.Columns(2)), 0 to 2)
ItemNumber = 0
'Loop down the rows
For Each WorkingRow In DataRng.Rows
'HOD in the first column
If Len(WorkingRow.Cells(1,1).Offset(0,-2).Value) > 0 Then Output(ItemNumber, 0) = WorkingRow.Cells(1,1).Offset(0,-2).Value
'HOD ID in the second column
If Len(WorkingRow.Cells(1,1).Offset(0,-1).Value) > 0 Then Output(ItemNumber, 1) = WorkingRow.Cells(1,1).Offset(0,-1).Value
'REP ID in the third column
If Len(WorkingRow.Cells(1,1).Value) > 0 Then
Output(ItemNumber, 2) = Output(ItemNumber, 2) & IIF(Len(Output(ItemNumber, 2))>0,";","") & WorkingRow.Cells(1,1).Value
Else
'Next Row
ItemNumber = ItemNumber+1
End If
Next WorkingRow
'Remove any unused Rows from the array
If ItemNumber > 0 Then Redim Preserve Output(0 to ItemNumber-1, 0 to 2)
'Assign the Array to the Function output
PivotTableTest = Output
End Function