Excel 将数据从行转置到单列
我试图用这个公式来转换给定的数据,但它也需要空白单元格,在转换时我怎么能忽略它们呢 这是工作表ss,我想在A列中转置和粘贴数据Excel 将数据从行转置到单列,excel,vba,Excel,Vba,我试图用这个公式来转换给定的数据,但它也需要空白单元格,在转换时我怎么能忽略它们呢 这是工作表ss,我想在A列中转置和粘贴数据 B01MU6O7H7 B07XB9NN9B B07261QWHY B071W4GMN3 B07X8BPD82 B07X8BNJZQ B07X8BNBJH B071JLW811 B071WK2YKV B071WK2QHN B072JTCJF8 B071G11SR7 B07
B01MU6O7H7
B07XB9NN9B B07261QWHY B071W4GMN3 B07X8BPD82 B07X8BNJZQ B07X8BNBJH
B071JLW811 B071WK2YKV B071WK2QHN B072JTCJF8 B071G11SR7 B072QCCV2Q B0743JHJBH
B078GVQFB5 B078GQ9V6W B078GTFHMY B078GR4H15 B079KFH765 B078GTXD9N B078GPVH73
B078G6515S
B07T891H6J B07T9DFRSM B07T893RJM B07TFHJ1XR B07T9DGB2V B07TFHJ6ZX B07TBFC852
B01N2WJ0OR B01MQYNB3M B06Y3Z65C5 B01MQZU45F
B076YFYD19 B076YF2ZNY B074Z9ZY1S B076XZ9WZV B079KSDHSQ B079KQJHZD B074ZK64V3
B07XJYL5Y2 B07XL3Y773
B07FCQTZ5X B06XZ7Z93Z
B07MN7YHLM B07M9HGJWP B07MK98FJ5 B07M9HGN5D B01NCVGDIC B01N4NBSV9 B07MN8YKFQ B074MZ93JP B01N7RH9ZB
B07TKXWLFZ B071CMQ6N2 B07VG1L2M5
B01B0SR1IY
B07GZFZQ6H B07GZHSBRT B07GZHG64J B07GZDQ7QW
B07WLX685Q B07WF3MQPB B07WD3CHDW B07W9KXP9Q B07WG787XB B07WD3BCDR
B07J2K4WCV B07J2MGH5W B07J2L9MZS B07J2LF71R
B07F9VP9QM B07F9ZLCZW B07FB1XZGL
试试看
试试看
试着这样做: 循环范围内的单元格,如果不为空,则为数组赋值,然后从目标集中写入数组
Sub TransposeMultiColumnDataToOneColumn()
Dim myArray As Variant
Dim SourceRange As Range, DestinationRange As Range
Set SourceRange = Application.InputBox("Source Ranges:", xTitleId, Type:=8)
Set DestinationRange = Application.InputBox("Convert to (single cell):", xTitleId, Type:=8)
Dim ArrayCounter As Long
ReDim myArray(1 To SourceRange.Count)
Dim CellToCheck As Range
ArrayCounter = 0
For Each CellToCheck In SourceRange
If Not CellToCheck.Value = Empty Then
ArrayCounter = ArrayCounter + 1
myArray(ArrayCounter) = CellToCheck.Value
Else '
'Cell is empty, do nothing
End If
Next CellToCheck
ReDim Preserve myArray(1 To ArrayCounter)
Set DestinationRange = DestinationRange.Resize(UBound(myArray), 1)
DestinationRange.Value = Application.Transpose(myArray)
End Sub
试着这样做: 循环范围内的单元格,如果不为空,则为数组赋值,然后从目标集中写入数组
Sub TransposeMultiColumnDataToOneColumn()
Dim myArray As Variant
Dim SourceRange As Range, DestinationRange As Range
Set SourceRange = Application.InputBox("Source Ranges:", xTitleId, Type:=8)
Set DestinationRange = Application.InputBox("Convert to (single cell):", xTitleId, Type:=8)
Dim ArrayCounter As Long
ReDim myArray(1 To SourceRange.Count)
Dim CellToCheck As Range
ArrayCounter = 0
For Each CellToCheck In SourceRange
If Not CellToCheck.Value = Empty Then
ArrayCounter = ArrayCounter + 1
myArray(ArrayCounter) = CellToCheck.Value
Else '
'Cell is empty, do nothing
End If
Next CellToCheck
ReDim Preserve myArray(1 To ArrayCounter)
Set DestinationRange = DestinationRange.Resize(UBound(myArray), 1)
DestinationRange.Value = Application.Transpose(myArray)
End Sub
如果您有Excel 2010+,您可以在2016+中使用Power Query(也称为Get&Transform) 在表中选择一个单元格 2016年,您将导航到数据选项卡;然后选择“从表/范围获取并转换” 在打开的PQ编辑器中: 选择所有列 从“变换”选项卡中,选择“取消填充列” 删除属性列 关闭并加载 M代码:*由PQ生成**
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}}),
#"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {}, "Attribute", "Value"),
#"Removed Columns" = Table.RemoveColumns(#"Unpivoted Columns",{"Attribute"})
in
#"Removed Columns"
结果
如果您有Excel 2010+,您可以在2016+中使用Power Query(也称为Get&Transform) 在表中选择一个单元格 2016年,您将导航到数据选项卡;然后选择“从表/范围获取并转换” 在打开的PQ编辑器中: 选择所有列 从“变换”选项卡中,选择“取消填充列” 删除属性列 关闭并加载 M代码:*由PQ生成**
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}}),
#"Unpivoted Columns" = Table.UnpivotOtherColumns(#"Changed Type", {}, "Attribute", "Value"),
#"Removed Columns" = Table.RemoveColumns(#"Unpivoted Columns",{"Attribute"})
in
#"Removed Columns"
结果
假设:
源范围为活页1中的A1到I17
目的地是第二张
数据是常量
尝试:
注:
使用特殊单元格可避免清空。假设:
源范围为活页1中的A1到I17
目的地是第二张
数据是常量
尝试:
注:
使用SpecialCells可以避免清空。如果您在vers中放弃FilterXML功能。2013+您可以通过以下步骤尝试以下方法:
声明源和目标范围请参见第[0]和[1]节
将使用范围内的所有数据分配给1-dim阵列参见[2]
通过FilterXML删除空单元格请参见[3]
将数组写入目标列请参见[4]
如果您在vers中放弃FilterXML功能。2013+您可以通过以下步骤尝试以下方法:
声明源和目标范围请参见第[0]和[1]节
将使用范围内的所有数据分配给1-dim阵列参见[2]
通过FilterXML删除空单元格请参见[3]
将数组写入目标列请参见[4]
为了清楚起见,您想说从RangeA1:C10中获取所有数据并将它们全部放入D列,但忽略任何空白单元格?这些参考文献只是example@SamuelEverson我已经添加了工作表ss我想将数据转置并粘贴到A列为了社区的利益,您应该将解决问题的答案标记为已接受。为了清楚起见,您想说从A1:C10范围中获取所有数据并将其全部放入D列,但忽略任何空白单元格?这些参考文献只是example@SamuelEverson我添加了工作表ss,为了社区的利益,我想将数据转换并粘贴到A列中,您应该将解决问题的答案标记为已接受。thanx寻求帮助,但在转置后将数据粘贴到a列时问题相同我不想粘贴空白单元格,但也会得到空白单元格。我想忽略空白单元格,我还添加了结果截图,我想要@Dy.Leei have excel 2013@RonRosenfeld@LifeStyle如果你愿意,你可以使用我的解决方案。但请在我的问题上发表你的评论,所以我会看到答案。thanx的帮助我得到了两种解决方案的结果@Samuel Eversonand@Ron Rosenfeldthanx的帮助,但在转置后粘贴a列中的数据时问题是一样的。我不想粘贴空白单元格,但也得到了空白单元格。我想忽略空白单元格,我还添加了结果屏幕截图我想要@Dy.Leei有excel 2013@RonRosenfeld@LifeStyle如果你愿意,你可以使用我的解决方案。但是,请在我的问题上发表您的评论,这样我就会看到答案。thanx为了帮助我,我用两种解决方案得到了结果@Samuel Eversonand@Ron Rosenfeld尝试了相同的解决方案,但内部区域相关的尝试的缺点,而不是在目标列中按行显示:-尝试了相同的,但与内部区域相关的重排序,而不是在目标列中按行显示的缺点:-
Sub dural()
Dim rng As Range, cell As Range, WhereTo As Range
Dim i As Long, rc As Long, arr
Set rng = Range("A1:I17").SpecialCells(xlCellTypeConstants)
rc = rng.Count
Set WhereTo = Sheets("Sheet2").Range("A1:A" & rc)
ReDim arr(1 To rc, 1 To 1)
i = 1
For Each cell In rng
arr(i, 1) = cell.Value
i = i + 1
Next cell
WhereTo = arr
End Sub
Sub ListAllTo1Column()
'[0] set target range to memory and clear existing data
Dim tgt As Range: Set tgt = Sheet2.Range("A:A")
tgt = vbNullString ' clear target column (before declaring source range)
'[1] set source range to memory
Dim src As Range: Set src = Sheet1.UsedRange
'[2] get all data
ReDim arr(1 To src.Cells.Count)
Dim cell As Variant, i As Long
For Each cell In src
i = i + 1: arr(i) = cell
Next cell
'[3] remove empty cells
arr = WorksheetFunction.FilterXML("<t><s>" & Join(arr, "</s><s>") & "</s></t>", "//s[not(.='')]")
'[4] write results to target
'Debug.Print Join(Application.Transpose(arr), ", ")
tgt.Resize(UBound(arr), 1).Offset(1) = arr
End Sub
Dim tmp: tmp = Split(Evaluate("=TEXTJOIN("","",True,Sheet1!" & Replace(Sheet1.UsedRange.Address, "$", "") & ")"), ",")
' Debug.Print Join(tmp, "|")
tgt.Resize(UBound(tmp), 1).Offset(1) = Application.Transpose(tmp)