【问题标题】:Multiple Rows and Columns to Single Column Excel多行多列到单列 Excel
【发布时间】:2016-04-24 18:39:54
【问题描述】:

我在 Excel 中的多行和多列上有不同的数据,我希望所有数据都在一个列上。我尝试了转置函数,但它并没有帮助我得到我想要的。

这就是我现在拥有的:

这就是我想要得到的:

谁能告诉我如何做到这一点?任何内置函数或宏都会有所帮助。谢谢。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    试试这个代码:

    Sub RangetoColumn()
        Dim LastRow As Long, LastColumn As Long
        Dim CurrentSheet As Worksheet, TargetSheet As Worksheet
        Dim i As Long, j As Long, Count As Long
    
        Set CurrentSheet = ThisWorkbook.Worksheets("Sheet1")'-->change Sheet1 to your source sheet
        Set TargetSheet = ThisWorkbook.Worksheets("Sheet2")'-->change Sheet2 to your target sheet
        LastRow = CurrentSheet.Cells(Rows.Count, "A").End(xlUp).Row
    
        Count = 1
        For i = 1 To LastRow
            LastColumn = CurrentSheet.Cells(i, Columns.Count).End(xlToLeft).Column
            For j = 1 To LastColumn
                TargetSheet.Range("A" & Count).Value = CurrentSheet.Cells(i, j).Value
                Count = Count + 1
            Next j
        Next i
    End Sub
    

    代码将从Sheet1 读取范围,并将在Sheet2 中创建一个列。

    【讨论】:

    • 非常感谢。它满足要求。
    • @TanvirSourov - 很高兴能帮到你。
    【解决方案2】:

    我认为本教程应该对您有所帮助:tutorial 您可以根据自己的需要尝试该解决方案。

    【讨论】:

      【解决方案3】:

      尝试在两个单元格中使用&。尝试像这样A1&B1 合并单元格A1 和单元格B1 中的数据;复制粘贴,然后享受。

      【讨论】:

        【解决方案4】:

        这将在其 A 列下方列出所有当前工作表单元格并清除所有其他相邻列

        Option Explicit
        
        Sub RangeToOneColumn()
            Dim lastRow As Long, i As Long, j As Long
            Dim rng As Range
            Dim myArr As Variant
        
            With ThisWorkbook.Worksheets("Sheet1") '<== change it to your needs
                lastRow = .Cells(.rows.Count, "A").End(xlUp).Row
                ReDim myArr(0 To lastRow - 1)
                For i = 1 To lastRow
                    Set rng = .Range(.Cells(i, 1), .Cells(i, .Columns.Count).End(xlToLeft))
                    myArr(i - 1) = Application.Transpose(Application.Transpose(rng))
                Next i
                .Cells(1, 1).CurrentRegion.ClearContents
        
                j = 1
                For i = LBound(myArr) To UBound(myArr)
                    .Cells(j, 1).Resize(UBound(myArr(i))) = Application.Transpose(myArr(i))
                    j = j + UBound(myArr(i))
                Next i
            End With
        
        End Sub
        

        由于它使用数组,它比通过单元格迭代复制粘贴更快

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-23
          • 1970-01-01
          • 2022-11-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多