【发布时间】:2021-09-08 08:26:36
【问题描述】:
我将一个 ID 与两个数据透视表进行比较,然后从每个数据透视表的特定列中返回匹配的值。
以前,数据透视表的列数是固定的,但现在我面临的数据透视表在最后一列方面有所不同。
我的尝试是使用代码行
LastColContract = wsContractPivot.Cells(1, Columns.Count).End(xlToLeft).Column
为了在ContractPivot中找到最后一列然后换行
rwReport.Columns("G").Resize(1, 7).Value = _
到
rwReport.Columns("G").Resize(1, lastColContract).Value = _
但我正在努力告诉 Excel 然后扩展数组列以在 H 之后添加其他列。
所以如果 lastcol 是 10,那么我需要代码来开始列出从 B 列开始的 10 列。 如果 lastcol 为 12,则 B 等为 12 列。
For Each c In wsReport.Range("F3", wsReport.Cells(Rows.Count, "F").End(xlUp)).Cells
c.Offset(0, 1).Resize(1, 50).ClearContents
MfrName = c.Value 'read this once....
Set rwReport = c.EntireRow
'1st Database Match "ContractSpend"
m = Application.Match(MfrName, wsContractPivot.Columns("A"), 0)
If Not IsError(m) Then
With wsContractPivot.Rows(m)
'starting column
rwReport.Columns("G").Resize(1, 7).Value = _
Array(.Columns("B").Value, .Columns("C").Value, _
.Columns("D").Value, .Columns("E").Value, _
.Columns("F").Value, .Columns("G").Value, .Columns("H").Value)
'Extended Cost
End With
Else
'no match...
End If
【问题讨论】:
-
我从这里开始 - peltiertech.com/referencing-pivot-table-ranges-in-vba 这应该可以帮助您在代码中引用相关范围
-
谢谢,但我无法在动态而非静态的情况下调整数组引用。
-
如果 lastcol 是 10,那么我需要代码来开始列出从 B 列开始的 10 列。如果 lastcol 是 12,那么从 B 开始的 12 列你的意思是 11 和13?这听起来像
lastcol+1 -
不完全是。当最后一个列是 7 时,我需要数组引用列 B、C、D、E、F、G、H。如果最后一个列是 10,我需要排列参考列 B、C、D、E、F、G、H、I、J、K。我找不到告诉代码相应地调整列的解决方案。
-
Worksheet.Columns property 承认数字...这不可行吗?还是循环?
标签: excel vba dynamic pivot-table