Excel 转置 - 基于单元格值

Posted

技术标签:

【中文标题】Excel 转置 - 基于单元格值【英文标题】:Excel Transpose - Based on Cell Values 【发布时间】:2015-10-09 20:27:26 【问题描述】:

我一直在尝试找到一种方法,只将某些列转换为 excel 中的行,以实现我的结果。

由于我需要输出为文本值,因此我无法将数据透视表用于我的目的。这是附上的图片,显示了我拥有的和需要的。

任何见解将不胜感激!

【问题讨论】:

这不会是转置,因为您的元素已在结果表中使用。这是一次性的过程还是定期完成的任务?您可以使用MATCHINDEX 来提取与您的听众相匹配的时间戳 【参考方案1】:

您没有指定excel-vba 技术标签,但我发现这些是最好的解决方案,前提是您允许某些参数是动态的;例如根据原始数据的大小和性质进行分配。

Sub collate()
    Dim rw As Long, rc As Long, rr As Long, r As Long, c As Long

    With Sheets("Sheet2")    '<-set this worksheet reference properly!
        rr = Application.Match("item id", .Columns(1), 0)
        rc = .Cells(rr, Columns.Count).End(xlToLeft).Column + 2
        .Cells(rr, rc + 1) = .Cells(rr + 1, 2).Value2

        For rw = rr + 1 To .Cells(Rows.Count, 1).End(xlUp).Row
            If IsError(Application.Match(.Cells(rw, 1).Value2, .Columns(rc), 0)) Then
                .Cells(Rows.Count, rc).End(xlUp).Offset(1, 0) = .Cells(rw, 1).Value2
            End If
            If IsError(Application.Match(.Cells(rw, 2).Value2, .Cells(rr, rc).Resize(1, 999), 0)) Then
                .Cells(rr, Columns.Count).End(xlToLeft).Offset(0, 1) = .Cells(rw, 2).Value2
            End If

            r = Application.Match(.Cells(rw, 1).Value2, .Columns(rc), 0)
            c = Application.Match(.Cells(rw, 2).Value2, .Rows(rr), 0)
            .Cells(r, c) = .Cells(rw, 3).Value
        Next rw

        With .Cells(rr, rc).CurrentRegion
            With .Resize(.Rows.Count - 1, .Columns.Count).Offset(1, 0)
                 .Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _
                            Orientation:=xlTopToBottom, Header:=xlNo
            End With
            With .Resize(.Rows.Count, .Columns.Count - 1).Offset(0, 1)
                 .Cells.Sort Key1:=.Rows(1), Order1:=xlAscending, _
                            Orientation:=xlLeftToRight, Header:=xlNo
            End With
        End With

    End With
End Sub

在对您的数据进行近似复制后,我得出了这些结果。

      

请注意,我已使用无序 3005 条目专门更改了数据,以演示对结果数据执行的水平排序例程。

【讨论】:

【参考方案2】:

请根据您的示例考虑以下解决方案。

G3=IF(SUMIFS($C$4:$C$13,$A$4:$A$13,$F4,$B$4:$B$13,G$3)>0,SUMIFS($C$4:$C$13,$A$4:$A$13,$F4,$B$4:$B$13,G$3),"")

这假设“项目 ID”和“扫描事件 ID”的每个组合只显示一次。这允许我们使用 SUMIFS 函数将唯一相关的结果相加。请注意,excel 根据该日期序列号添加它。

if 是为了防止 Excel 显示返回 0 并被解析为实际日期的公式。

然后,您可以将公式拖到输出表的其余部分。问候,

【讨论】:

以上是关于Excel 转置 - 基于单元格值的主要内容,如果未能解决你的问题,请参考以下文章

如何在excel 中运算公式中引用单元格值

从 Excel 中的另一个单元格控制单元格值

Excel VBA:用相邻的单元格值填充空单元格

使用基于单元格值的excel VBA打开文件,路径由相同的值动态组成

Python-openpyxl对excel取消/合并单元格,以及修改单元格值

如何使用合并单元格值大于单元格宽度的 Apache-POI 增加 excel 行的高度?