【发布时间】:2016-04-24 18:39:54
【问题描述】:
我在 Excel 中的多行和多列上有不同的数据,我希望所有数据都在一个列上。我尝试了转置函数,但它并没有帮助我得到我想要的。
这就是我现在拥有的:
这就是我想要得到的:
谁能告诉我如何做到这一点?任何内置函数或宏都会有所帮助。谢谢。
【问题讨论】:
我在 Excel 中的多行和多列上有不同的数据,我希望所有数据都在一个列上。我尝试了转置函数,但它并没有帮助我得到我想要的。
这就是我现在拥有的:
这就是我想要得到的:
谁能告诉我如何做到这一点?任何内置函数或宏都会有所帮助。谢谢。
【问题讨论】:
试试这个代码:
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 中创建一个列。
【讨论】:
我认为本教程应该对您有所帮助:tutorial 您可以根据自己的需要尝试该解决方案。
【讨论】:
尝试在两个单元格中使用&。尝试像这样A1&B1 合并单元格A1 和单元格B1 中的数据;复制粘贴,然后享受。
【讨论】:
这将在其 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
由于它使用数组,它比通过单元格迭代复制粘贴更快
【讨论】: