【问题标题】:Insert Horizontal data into a Vertical format将水平数据插入垂直格式
【发布时间】:2018-04-29 16:26:00
【问题描述】:

我有一个数据表,因此需要将特定列的信息从水平布局转换并垂直插入到初始行下方。为了使事情变得更复杂,任何值为 0 的列都需要被忽略,并且每一行可能有不同的列为零。

到目前为止,我在 stackoverflow 的“DisplayName”的帮助下得到了帮助,但是线程变得沉默了。我很确定我有太多的后续行动。完全是我的错,因为我试图简化问题,这让我更难得到答案。

这个查询非常接近,但是由于某种原因,在这个数据集上运行它时它没有拾取所有的水平数据。由于某种原因,它停在“S”列而不是“CZ”列。同样在“B”列中有零的行中,它不会获取帐号,只是将收入代码和费用添加到其上方的名称中(请参阅跳过了帐户 123123141 的位置,但将对象编号添加到了 123123140) .

如果可能(我想不通),我可以附上实际的 .xlsm 文件。

Sub H2V()
' Vertically integrate horizontal revenue code data
' Keyboard Shortcut: Ctrl+Shift+Q
Dim headers As Variant, names As Variant, data As Variant
Dim iRow As Long

With Worksheets("Template")
    With Intersect(.UsedRange, .Range("A:CZ"))
        headers = Application.Transpose(Application.Transpose(.Offset(, 1).Resize(1, .Columns.Count - 1).Value))
        names = Application.Transpose(.Offset(1).Resize(.Rows.Count - 1, 1).Value)
        data = .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1).Value
        .ClearContents
        .Resize(1, 3).Value = Array("Patient Number", "Rev Code", "Charges")
    End With

    For iRow = 1 To UBound (data)
        With .Cells(.Rows.Count, "B").End(xlUp)
            .Offset(1, -1).Value = names(iRow)
            .Offset(1, 0).Resize(UBound(headers)).Value = Application.Transpose(headers)
            .Offset(1, 1).Resize(UBound(data)).Value = Application.Transpose(Application.Index(data, iRow, 0))
        End With
    Next

    With .Range("B3", Cells(.Rows.Count, "B").End(xlUp)).SpecialCells(xlCellTypeConstants)
        .Offset(, 1).Replace What:="0", Replacement:="", LookAt:=xlWhole
        .Offset(, 1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End With
End With
End Sub

【问题讨论】:

标签: excel vba transpose


【解决方案1】:

这会横向修复丢失的数据..但它仍然跳过帐户 123123141,我不知道为什么..

For iRow = 1 To UBound(data, 1)
        With .Cells(.Rows.Count, "B").End(xlUp)
            .Offset(1, -1).Value = names(iRow)
            .Offset(1, 0).Resize(UBound(headers)).Value = Application.Transpose(headers)
            .Offset(1, 1).Resize(UBound(data, 2)).Value = Application.Transpose(Application.Index(data, iRow, 0))
        End With
    Next

【讨论】: