excel - 循环通过过滤数据透视表,将每个可见值添加到范围中的下一个单元格
问题描述
我目前在循环过滤数据透视表并将每个可见值添加到预定范围内的下一个单元格时处于停顿状态。
到目前为止,我已经整理了以下业余的 vba 代码。但我的输出不如预期。它似乎只将最终值添加到提供范围内的所有单元格。
请参阅编辑,代码正在从数据透视表中提取所有数据,忽略适当的过滤器并且在到达联合结束时不会停止(A,B,C,D)
Private Sub GenerateConsumableCard_Click()
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim C As Range
Set Pt = Sheets("Cards").PivotTables("PivotTable1")
Set Pf = Pt.PivotFields("Consumable Name")
Set KB1 = Sheets("Cards").Range("D11")
Set KB2 = Sheets("Cards").Range("K11")
Set KB3 = Sheets("Cards").Range("D22")
Set KB4 = Sheets("Cards").Range("K22")
Set CRange = Union(KB1, KB2, KB3, KB4)
With Pt
.PivotCache.Refresh
.PivotCache.MissingItemsLimit = xlMissingItemsNone
For Each C In CRange.Cells
For Each Pi In Pf.PivotItems
If Pi.Visible = True Then
C.Value = Pi
End If
Next Pi
Next C
End With
End Sub
我整理的背后的想法是;根据数据透视表中当前存在的信息,范围中的每个单元格将具有不同的值。IE 数据透视表中的第一个可见值将转到单元格 D11,第二个到单元格 K11,第三个到单元格 D22.... 等等。
任何帮助将不胜感激!
编辑:
看来我的问题不止一个。我相信我可能引用了我的数据透视表的完全错误的部分?下面是当前表格的图像。
和以前一样,我想拉出“Consumable Name”下的各个值,并将它们按顺序放入“CRange”中的单元格值中。
编辑2:
所以我又做了一些改变,但都没有奏效。
Private Sub GenerateConsumableCard_Click()
Dim Pt As PivotTable
Dim Pf As PivotField
Dim Pi As PivotItem
Dim C As Range
Set Pt = Sheets("KanBans").PivotTables("PivotTable1")
Set Pf = Pt.PivotFields("Consumable Name")
Set KB1 = Sheets("KanBans").Range("D11")
Set KB2 = Sheets("KanBans").Range("K11")
Set KB3 = Sheets("KanBans").Range("D22")
Set KB4 = Sheets("KanBans").Range("K22")
Set CRange = Union(KB1, KB2, KB3, KB4)
With Pt
.PivotCache.Refresh
.PivotCache.MissingItemsLimit = xlMissingItemsNone
For Each Pi In Pf.VisibleItems
For Each C In CRange.Cells
C.Value = Pi
Next
Next
End With
End Sub
它现在似乎正确地循环通过数据透视表,但忽略了放置在数据上的过滤器并提取所有项目,直到最后一个项目。我相信我可能也对自己感到困惑:
For Each C In CRange
因为它正确地遍历范围,但一旦所有范围都被填满,它就不会停止。
温暖的问候
解决方案
示例中的代码在枢轴中的所有项目上运行,每个项目进入所有 CRange 单元格,最后一个项目留在所有单元格中。
由于它始终是枢轴中的 4 个项目,以及 CRange 中的 4 个项目,因此我们可以遍历其中任何一个,但不能同时遍历两者,因此您不需要嵌套循环。
然后VisibleItems
不是你要找的,你应该使用DataRange
.
i = 1
For Each C In CRange.Cells
C.Value = Pf.DataRange.Item(i)
i = i + 1
Next
推荐阅读
- scala - 对象 kafka010 不是包 org.apache.spark.streaming 的成员
- vue.js - 在虚拟文件系统 DataTable 中找不到未捕获的(承诺)文件“Roboto-Regular.ttf”-vuejs
- javascript - TypeError:无法读取未定义的属性“有” // Discord.js
- react-native - requireNativeComponent:在 UIManager 上找不到“RNSScreen”
- prediction - 分类器必须有多好才能对高频交易有用?
- snowflake-cloud-data-platform - 雪花中的Bytea替代品是什么
- botframework - 如何在无服务器架构上运行 bot cli?
- vb.net - Vb.net 将数组转换为逗号分隔的字符串
- c# - 在 ViewModel 中获取 RegionManager
- ios - Xcode 13 更新高度 UITableViewCell