Excel 宏将表转换为列

Excel 宏将表转换为列,excel,vba,Excel,Vba,我有一些数字在表格中排列,如第一行1到10,然后在下一行11到20,然后21到30,依此类推 我希望每一行都应该转换成单列,就像任何列1到10,然后低于10,11到20,然后是21到30等等,将下面的代码添加到VBA编辑器中的新模块中 Public Sub TransformDataToColumns() Dim rngCells As Range, objCell As Range, lngWriteRow As Long Dim objDestSheet As Workshe

我有一些数字在表格中排列,如第一行1到10,然后在下一行11到20,然后21到30,依此类推
我希望每一行都应该转换成单列,就像任何列1到10,然后低于10,11到20,然后是21到30等等,将下面的代码添加到VBA编辑器中的新模块中

Public Sub TransformDataToColumns()
    Dim rngCells As Range, objCell As Range, lngWriteRow As Long
    Dim objDestSheet As Worksheet

    Set rngCells = Selection
    Set objDestSheet = Sheets("Transformed")

    objDestSheet.Cells.Clear

    For Each objCell In rngCells
        lngWriteRow = lngWriteRow + 1
        objDestSheet.Cells(lngWriteRow, 1) = objCell.Value
    Next

    objDestSheet.Activate
End Sub
。。。在工作簿中添加一个名为“转换”的新工作表

现在选择数据表(如下所示)并运行宏。一切都保持不变,它应该对你有用

试试这段代码

Sub Test()
Dim r1          As Range
Dim r2          As Range

With Sheets("Sheet1")
    Set r1 = .Range("A1:D" & .Columns("A:D").Find("*", [A1], , , 1, 2).Row)
    Set r2 = .Range("K1")
    MultipleColumnsIntoOne r1, r2
End With
End Sub

Sub MultipleColumnsIntoOne(rSource As Range, rDest As Range)
Dim a           As Variant
Dim b           As Variant
Dim i           As Long
Dim j           As Long
Dim k           As Long

a = rSource.Value
ReDim b(1 To UBound(a, 1) * rSource.Columns.Count)

For j = LBound(a, 2) To UBound(a, 2)
    For i = LBound(a, 1) To UBound(a, 1)
        If Not IsEmpty(a(i, j)) Then
            k = k + 1
            b(k) = a(i, j)
        End If
    Next i
Next j

rDest.Resize(k).Value = Application.Transpose(b)
End Sub