這裏使用下式:
=IFERROR(TRANSPOSE(INDEX(Sheet2!$B$1:$B$5,SMALL(IF(Sheet2!$A$1:$A$5=$A2,ROW(Sheet2!$A$1:$A$5)),COLUMN(A$1)))),"")
以上是Array Formula
使用輸入Ctrl鍵 + SHFT + 輸入 in Cell C2
並複製到其餘感興趣的單元格。
假設你的數據被組織象下面這樣:
Sheet 1中:
突出片:
下面是代碼:
Sub test()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim myfilters
Dim myfilter
Dim rng1 As Range, rng2 As Range
Set ws1 = Sheet3
Set ws2 = Sheet2
Application.ScreenUpdating = False
With ws1
Set rng1 = .Range(.Range("A1"), .Range("A" & .Rows.Count).End(xlUp))
myfilters = rng1.Offset(1, 0).Resize(rng1.Rows.Count - 1)
End With
With ws2
.AutoFilterMode = False
Set rng2 = .Range(.Range("A1"), .Range("A" & .Rows.Count).End(xlUp))
For Each myfilter In myfilters
rng2.AutoFilter Field:=1, Criteria1:=myfilter
rng2.Offset(1, 1).SpecialCells(xlCellTypeVisible).Copy
rng1.Find(myfilter, rng1(1)).Offset(0, 2).PasteSpecial xlPasteValuesAndNumberFormats, , , True
.AutoFilterMode = False
Next
End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
雖然未經測試。
因此,爲了安全起見,請在重複數據中進行測試。
希望這會有所幫助。
來源
2014-04-04 09:41:00
L42
而你需要VBA來做到這一點?我認爲這可以使用公式來完成。 – L42
我想在VBA中使用它的唯一原因是我在很多工作表上使用它。儘管 – Wessel
我對這兩種解決方案都開放我們正在討論這裏有多少行?這將有助於決定走哪條路。 :) – L42