【问题标题】:Using VBA Macro to grid data sequentially in a new exel worksheet based on row headings使用 VBA 宏在基于行标题的新 exel 工作表中按顺序排列数据
【发布时间】:2016-08-19 12:50:16
【问题描述】:

我正在使用由列标题设置的数据集,如下所示:

我想组合一个 VBA 宏,以按以下列标题顺序在新工作表中的页面下按顺序堆叠数据。

我正在寻找一个可以循环遍历工作表 A(原始数据)并粘贴到上述空工作表 B 中的宏。

非常感谢执行此任务的任何想法。在接下来的几天里,我将致力于此,并将发布我的想法。任何改进表示赞赏。

【问题讨论】:

  • 你的数据总是跳两行换下一个数据行吗?
  • 嗨,阿里,数据集来自一个赠款数据库,并且非常混乱,有时有两行,有时有一行空白。我要堆叠的数据遵循顺序,因为要堆叠的数据始终位于列标题下方。

标签: vba excel macros


【解决方案1】:

您的示例没有提供防弹堆叠规则

以下代码遵循与示例匹配的规则:

Option Explicit

Sub main()
    Dim dataRng As Range, cell As Range
    Dim iDataA As Long, iDataE As Long

    With Worksheets("A")
        Set dataRng = .Range("D1", .Cells(.Rows.Count, 4).End(xlUp)).SpecialCells(XlCellType.xlCellTypeConstants, xlTextValues)
    End With

    With Worksheets("B").Range("D4:J4")
        .value = Array("A", "B", "C", "D", "E", "F", "G")
        For Each cell In dataRng
            AddData cell, .Cells, iDataA, iDataE
        Next cell
    End With
End Sub

Sub AddData(cell As Range, outputRng As Range, iDataA As Long, iDataE As Long)
    With outputRng
        If cell = "A" Then
            iDataA = iDataA + 1
            If iDataA <= iDataE Then iDataA = iDataE + 1
            .Offset(iDataA).Resize(, 4).value = cell.Offset(1).Resize(, 4).value
        ElseIf cell = "E" Then
            iDataE = iDataE + 1
            .Offset(iDataE, 4).Resize(, 3).value = cell.Offset(1).Resize(, 3).value
        End If
    End With
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多