以下 Excel 工作表必須重新排列
從
ID Name1 Name2 Name3
1 Alf Bert Fritz
2 Curt
3 Otto Mike
4 Sue Zack
到
ID Name
1 Alf
1 Bert
1 Fritz
2 Curt
3 Otto
3 Mike
4 Sue
4 Zack
我缺少正確的搜尋字詞,我猜它相當常見,但我無法正確描述它。
答案1
試試這個程式碼。透過一步一步的工作,這是不言自明的。輸入資料從 A1 開始,輸出從 A8 開始。這是可以改變的。
更短的程式碼當然是可能的,我想也可以將陣列公式放在一起。
Sub single_col()
Dim icell As Integer
Dim irow As Integer, icol As Integer
Dim nrows As Integer, ncols As Integer
Dim rng_all As Range, rng_curr As Range, rng_trg As Range
Set rng_all = Range("A2:D5")
Set rng_trg = Range("A8")
nrows = rng_all.Rows.Count
icell = 0
For irow = 1 To nrows
Set rng_curr = rng_all.Rows(irow)
ncols = WorksheetFunction.CountA(rng_curr)
For icol = 2 To ncols
icell = icell + 1
Dim name As String
name = rng_curr.Cells(1, icol).Text
rng_trg.Value = rng_curr.Cells(1, 1).Text
rng_trg.Offset(0, 1).Value = name
Set rng_trg = rng_trg.Offset(1, 0)
Next icol
Next irow
End Sub
PS:上面的程式碼已經包含評論中建議的修改。
答案2
您有一個想要「取消透視」的資料透視表佈局。這文章Jon Walkenbach 的文章展示了只需敲擊幾下鍵盤即可完成的操作,並且不需要 VBA 程式碼。
針對您的具體情況,我會這樣做。
1.使用 Alt + D、P 開啟「舊」資料透視表選單。選擇“多個合併範圍”選項,然後按一下“下一步”。
2.下一步選擇「我將建立頁面欄位」;點選下一步」。
3.反白顯示儲存格範圍,以便在對話方塊的上部定義它,然後按一下「新增」按鈕將該範圍複製到「所有範圍」清單中。點選下一步」。
4.選擇一個遠離資料的儲存格。您可以看到我在同一張紙上選擇了 F3。 (如果您願意,您可以選擇不同的工作表。)按一下「完成」。
5.你會得到一個像這樣的資料透視表。在對話方塊中,取消選取「行」和「列」複選框。
6.這將為您提供一個單一單元格資料透視表。
7.然後雙擊一個單元格,在新工作表上,您將獲得“未透視”資料作為新表:
有了這個表數據,您現在可以過濾 C 列以顯示非空白,並且可以刪除 B 列,這樣您就可以獲得所需的佈局。