Excel 每5个单元格移动到新列
我一直在试图找到一个解决方案,将单个列中的每5个单元格移动到Excel中新的相邻列。我知道,但它不能以我想要的方式解决我的问题 要指定我想要实现的目标-假设我有一列:Excel 每5个单元格移动到新列,excel,vba,excel-formula,Excel,Vba,Excel Formula,我一直在试图找到一个解决方案,将单个列中的每5个单元格移动到Excel中新的相邻列。我知道,但它不能以我想要的方式解决我的问题 要指定我想要实现的目标-假设我有一列: 1 2 3 4 5 6 7 8 9 10 在Excel表格中。我不确定它是否被称为“换位”,因为所有使用此关键字的解决方案的数据设置都不同。我需要的是: 1,6 2,7 3,8 4,9 5,10 当然,我正在处理的数据有更多的行,需要以5的间隔跨越更多的列。有什么简单的vba或公式来实现它吗 因此本质上: =INDEX($A:
1
2
3
4
5
6
7
8
9
10
在Excel表格中。我不确定它是否被称为“换位”,因为所有使用此关键字的解决方案的数据设置都不同。我需要的是:
1,6
2,7
3,8
4,9
5,10
当然,我正在处理的数据有更多的行,需要以5的间隔跨越更多的列。有什么简单的vba或公式来实现它吗 因此本质上:
=INDEX($A:$A;ROW(A1)+COLUMN(A1)*5-5)
放置在B2中,并自动向下和向右填充(所有数据都在A列中)这将按块将第一列转换为各有5行的列:
。另一种选择是,因为我以前的代码影响了下面列中的内容
Sub ColumnToColumns_SetRows()
Dim rng As Range, rws As Long, c As Long, prts As Long, i As Long
rws = 5 'Number of rows to use in each column
Set rng = Range("A1").Resize(rws) 'Starting range
c = rng.Column 'Column of starting range
prts = Cells(Rows.Count, c).End(xlUp) / rws + 1 'Division in parts
For i = 1 To prts
rng.Offset(, i).Value = rng.Offset(rws * i).Value
Next i
Range(Cells(rws + 1, c), Cells(Rows.Count, c).End(xlUp)).ClearContents
End Sub
请注意,因为这不是免费的代码编写服务,所以有必要显示您迄今为止所做的尝试以及您遇到的问题或错误(通过显示代码),或者至少显示您所做的研究和努力。否则它只是要求我们为你做所有的工作。阅读可能会帮助你改进问题。假设第一个数据在A1:A10中,第二个数据在B1:B5中,A列中没有更多数据。C1中有什么,B6中有什么?输出中的B6应该总是空的,因为我需要它只填充5个单元格,并根据数据的数量重复,所以C1:C5将包含另一列数据,如果我们的理论excell更大(在原始列A中有更多值)请注意,行计数变量的类型必须是
Long
而不是Double
!
Sub ColumnToColumnsSetRows()
Dim rng As Range, r As Long, c As Long, rws As Long, ncl As Long
Set rng = Range("A1") 'Starting range
r = rng.Row 'Row of starting range
c = rng.Column 'Column of starting range
rws = 5 'Number of rows to use in each column
ncl = 1 'Number of steps to move sideways
Do Until IsEmpty(Cells(r, c).Offset(rws))
Range(Cells(r, c).Offset(rws), Cells(Rows.Count, c).End(xlUp)).Cut Cells(r, c).Offset(, ncl)
c = c + ncl
Loop
End Sub
Sub ColumnToColumns_SetRows()
Dim rng As Range, rws As Long, c As Long, prts As Long, i As Long
rws = 5 'Number of rows to use in each column
Set rng = Range("A1").Resize(rws) 'Starting range
c = rng.Column 'Column of starting range
prts = Cells(Rows.Count, c).End(xlUp) / rws + 1 'Division in parts
For i = 1 To prts
rng.Offset(, i).Value = rng.Offset(rws * i).Value
Next i
Range(Cells(rws + 1, c), Cells(Rows.Count, c).End(xlUp)).ClearContents
End Sub