VBA实现快速逆透视

本文详细解释了如何使用VBA在Excel中编写SubUnpivotTable函数,将工作表中的多维度交叉数据,特别是对日期进行逆透视操作,转化为新的表格格式。代码展示了如何处理固定列、标题字段和数值字段的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例需求:将工作表中的数据(多维度交叉),对日期进行逆透视,转换为下表的格式。
在这里插入图片描述
示例代码如下。

Sub UnpivotTable()
    Dim oSht As Worksheet
    Dim inLastRow As Long, inLastCol As Long
    Dim outLastRow As Long, outCol As Long
    Dim iRow As Long, iCol As Long
    Const FIX_COLS = 4
    Const HEADER_FLD = "Date"
    Const VALUE_FLD = "Value"
    Set oSht = Sheet("Data")
    With oSht
        inLastRow = .Cells(.Rows.Count, "A").End(xlUp).row
        inLastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
        outLastRow = inLastRow + 2
        .Cells(outLastRow, 1).Resize(1, FIX_COLS).Value = .Cells(1, 1).Resize(1, FIX_COLS).Value
        .Cells(outLastRow, FIX_COLS + 1).Value = HEADER_FLD
        .Cells(outLastRow, FIX_COLS + 2).Value = VALUE_FLD
        For iRow = 2 To inLastRow
            For iCol = 5 To inLastCol
                outLastRow = outLastRow + 1
                .Cells(outLastRow, 1).Resize(1, FIX_COLS).Value = .Cells(iRow, 1).Resize(1, FIX_COLS).Value
                .Cells(outLastRow, FIX_COLS + 1) = .Cells(1, iCol)
                .Cells(outLastRow, FIX_COLS + 2) = .Cells(iRow, iCol)
            Next iCol
        Next iRow
    End With
End Sub

【代码解析】
第6~8行代码定义常量,其含义如下。

常量含义
FIX_COLS数据表中固定列的数量,这些列将包含在输出表的每行数据中
HEADER_FLD被转置标题字段名称
VALUE_FLD数值字段名称

第9行代码获取源数据工作表对象引用。
第11~12行代码获取数据区域的最后行和列位置。

微软参考文档:

Range.End 属性 (Excel)

第13行代码设置数据输出位置为最后数据行之下两行。
第14行代码复制固定列标题行。
第15~16行代码更新标题字段(日期Date)和值字段标题(数值Value)。
第17~24行循环变量源数据表格。
第19行输出数据表的行号递增1。
第20行复制固定列数据。
第21行填写Date列数据。
第22行填写Value列数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值