如何将 Excel 数据从 1 列拆分为 8 列,同时保持数据的特定顺序?

如何将 Excel 数据从 1 列拆分为 8 列,同时保持数据的特定顺序?

我需要保持数据的顺序。因此,为了解释,我需要将数据从单元格

a1 至 b1、
a2 至 c1、
a3 至 d1、
a4 至 e1、
a5 至 f1、
a6 至 g1、
a7 至 h1、
a8 至 i1、

a9 至 B2
a10 至 C2
a11 至 D2
a12 至 E2
a13 至 F2
a14 至 G2
a15 至 H2
a16 至 I2

重复上述步骤,直到我查看完 A 列中的所有 24000 个条目

当然,有一种简单的方法可以通过宏或 vba 来实现这一点?也许最新版本中的某个功能已经可以做到这一点?

答案1

这是一个 VBA 解决方案:

Option Explicit
Private Sub ReArrangeCells()

  Dim ws As Worksheet, LastRow As Long
  Set ws = Excel.ActiveSheet

  LastRow = Range("A65536").End(xlUp).Row

  Dim i As Long, j As Long, FromCell As Range, ToCell As Range, sNewCol As String, sNewRow As String
  For i = 1 To LastRow

    Set FromCell = ws.Range("A" & i)                       'the cell we want to move
    sNewCol = IIf(i Mod 8 = 0, Chr$(72), Chr$((i Mod 8) + 64))
    sNewRow = IIf(i Mod 8 = 0, (i \ 8), (i \ 8) + 1)
    Set ToCell = ws.Range(sNewCol & sNewRow)               'the cell we want to copy the data to

    FromCell.Copy ToCell
    If i <> 1 Then FromCell.Clear

    If i Mod 100 = 0 Then DoEvents

  Next i

End Sub

答案2

这是一个解决方案。它假设以下内容:

  1. 所有原始数据都在 A 列
  2. B 列仅包含行的索引

公式:其中=INDIRECT(CONCATENATE("a",$B2*8 + col_offset))col_offset 是列号(从零开始)。因此,在第一列中它将是=INDIRECT(CONCATENATE("a",$B2*8)),在第 8 列中它将是=INDIRECT(CONCATENATE("a",$B2*8+7))

一张图片可以让事情更清楚:

在此处输入图片描述

编辑:新公式:=INDIRECT(CONCATENATE("a",(ROW()-2)*8+(COLUMN()-3)))其中-2-3是行和列偏移量。只需将其粘贴到您希望显示数据的所有单元格中即可。(此解决方案更好,因为现在可以删除 B 列)

答案3

VBA 答案最适合处理大量数据,但我要指出的是,您也可以使用“Transpose”通过复制/粘贴来完成此操作。对于小需求,这是一种简单的右键单击解决方案。这肯定适用于 2010,我相信 2007 也适用。

看来我还不能做图像......

  • 垂直复制单元格
  • 右键单击另一个单元格并使用“粘贴选项”下的第四个选项(看起来像两个直角的蓝色矩形)

在某些情况下会更快。

相关内容