如何將 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)),在第八列中它將是=INDIRECT(CONCATENATE("a",$B2*8+7))

一張圖片讓事情更清楚:

在此輸入影像描述

編輯:新公式:=INDIRECT(CONCATENATE("a",(ROW()-2)*8+(COLUMN()-3)))其中-2-3是行和列的偏移。只需將其貼到您希望顯示資料的所有儲存格中即可。 (這個解決方案更好,因為現在可以刪除 B 列)

答案3

VBA 答案最適合處理大量數據,但我會指出,您也可以使用「Transpose」透過複製/貼上來完成此操作。這是滿足小型需求的簡單右鍵解決方案。這肯定適用於 2010 年,我相信 2007 年也是如此。

看來我也還不能做圖像..

  • 垂直複製單元格
  • 右鍵單擊另一個單元格,然後使用“貼上選項”下的第四個選項(看起來像兩個直角的藍色矩形)

在某些情況下更快。

相關內容