插入行并将数据从水平布局移动/拉到垂直布局

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入行并将数据从水平布局移动/拉到垂直布局相关的知识,希望对你有一定的参考价值。

我有一个数据表,这样信息的特定列需要从水平布局转换并插入到初始行下面。为了使事情变得更复杂,需要忽略任何值为零的列,并且每行可能具有不同的列,其中零。

通过在此“v”列中使用“Q”列中的countif公式,我已经获得了为列总数计数大于0的行。

Sub H2V()
' H2V Macro
' Integrate vertical UB-04 codes
    Worksheets("Sheet1 (2)").Activate

    Dim r, count As Range
    Dim LastRow As Long
    Dim temp As Integer

    Set r = Range("A:P")
    Set count = Range("Q:Q")
    LastRow = Range("B" & Rows.count).End(xlUp).Row

    For n = LastRow To 1 Step -1
        temp = Range("Q" & n)

        If (temp > 1) Then
            Rows(n + 1 & ":" & n + temp).Insert Shift:=xlDown
        End If

    Next n

End Sub

但我不能为我的生活弄清楚如何将数据从水平集拉入新创建的行,使其垂直整合。

修订示例(更完整):Original Data Set

Post VBA Run

Macro Used

答案

你可以试试这个

Option Explicit

Sub main()
    Dim headers As Variant, names As Variant, data As Variant
    Dim iRow As Long

    With Worksheets("Sheet1 (2)")
        With .Range("A1").CurrentRegion
            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("Name", "Object", "Value")
        End With

        For iRow = 1 To UBound(data)
            With .Cells(.Rows.Count, "B").End(xlUp)
                .Offset(1, -1).Value = names(iRow)
                .Offset(2, 0).Resize(UBound(headers)).Value = Application.Transpose(headers)
                .Offset(2, 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
另一答案

这不是最快的解决方案,明天会对此代码进行重做,但它确实有效,data_sht是您的示例数据所在的位置,而output_sht是Excel将修改后的数据放置的位置。

Sub data()

Dim data_sht As Worksheet
Dim output_sht As Worksheet
Dim cell As Range

Set data_sht = ThisWorkbook.Sheets("Sheet1")
Set output_sht = ThisWorkbook.Sheets("Sheet2")

Dim rng As Range
Set rng = data_sht.Range("A1").CurrentRegion

For Each cell In rng.Offset(1, 0)

Header = rng.Cells(1, 1)

If IsNumeric(cell) And cell.Value > 0 Then
    Object = rng.Cells(1, cell.Column)

With output_sht

    If .Columns("B:B").Cells.Count < 1 Then
        lastrow = 2
    Else
        lastrow = Range("B" & Rows.Count).End(xlUp).Row
    End If

    .Cells(1, 1) = Header
    .Cells(1, 2) = "Object"
    .Cells(1, 3) = "Value"
    .Cells(lastrow + 1, 1) = rng.Cells(cell.Row, 1)
    .Cells(lastrow + 2, 2) = Object
    .Cells(lastrow + 2, 3) = cell.Value
End With

End If

Next cell

With output_sht
    .Range("A1").CurrentRegion.RemoveDuplicates Columns:=Array(1, 2, 3), _
    Header:=xlNo
End With

End Sub

以上是关于插入行并将数据从水平布局移动/拉到垂直布局的主要内容,如果未能解决你的问题,请参考以下文章

android中的垂直和水平滚动视图

arcmap布局视图怎么插入垂直文本

高度自适应的水平垂直居中布局

垂直布局组自动扩展

两种不同的布局(垂直和水平)?

自动布局对齐到中心(垂直或水平)与常数