我需要維護資料的順序。所以為了解釋我需要從單元格移動數據
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
這是一個解決方案。它假設如下:
- 所有原始資料都在A列中
- 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 年也是如此。
看來我也還不能做圖像..
- 垂直複製單元格
- 右鍵單擊另一個單元格,然後使用“貼上選項”下的第四個選項(看起來像兩個直角的藍色矩形)
在某些情況下更快。