Excel 每5个单元格移动到新列

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:

我一直在试图找到一个解决方案,将单个列中的每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:$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