我希望你做得很好 我需要支持 我有一個資料表 見 Botton
我想要這個結果
像第一個匹配帳戶,第二個匹配選項只有 3 個選項總是我喜歡排列數字
uj5u.com熱心網友回復:
請測驗下一個代碼。根據您的問題和評論,它應該回傳看起來合乎邏輯。它假定您代表所需輸出的圖片是錯誤的。它從“E1”開始在同一張表中回傳。當然,它可以很容易地適應在任何地方回傳:
Sub TestExtractFruitsPerAccount()
Dim sh As Worksheet, lastR As Long, arr, arrIt, i As Long
Dim arrFin, j As Long, dict As Object
Set sh = ActiveSheet
lastR = sh.Range("A" & sh.rows.count).End(xlUp).Row
arr = sh.Range("A1:C" & lastR).value
Set dict = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(arr)
If Not dict.Exists(arr(i, 1)) Then
dict.Add arr(i, 1), Array(arr(i, 2) & "|" & arr(i, 3))
Else
arrIt = dict(arr(i, 1)): ReDim Preserve arrIt(UBound(arrIt) 1)
arrIt(UBound(arrIt)) = arr(i, 2) & "|" & arr(i, 3)
dict(arr(i, 1)) = arrIt
End If
Next i
ReDim arrFin(1 To dict.count, 1 To 4)
Dim strApp As String, strBan As String, strMng As String
For i = 0 To dict.count - 1
arrFin(i 1, 1) = dict.Keys()(i)
arrIt = dict.Items()(i)
For j = 0 To UBound(arrIt)
Select Case Split(arrIt(j), "|")(1)
Case "APPLE"
If strApp = "" Then
strApp = "Pkt." & Split(arrIt(j), "|")(0)
Else
strApp = strApp & "," & Split(arrIt(j), "|")(0)
End If
Case "BANANA"
If strBan = "" Then
strBan = "Pkt." & Split(arrIt(j), "|")(0)
Else
strBan = strBan & "," & Split(arrIt(j), "|")(0)
End If
Case "MANGO"
If strMng = "" Then
strMng = "Pkt." & Split(arrIt(j), "|")(0)
Else
strMng = strMng & "," & Split(arrIt(j), "|")(0)
End If
End Select
Next j
If strApp <> "" Then arrFin(i 1, 2) = strApp
If strBan <> "" Then arrFin(i 1, 3) = strBan
If strMng <> "" Then arrFin(i 1, 4) = strMng
strApp = "": strBan = "": strMng = ""
Next i
sh.Range("E1").Resize(1, 4).value = Array("Account", "APPLE", "BANANA", "MANGO")
sh.Range("E2").Resize(dict.count, 4).value = arrFin
End Sub
我把你的問題當作一個挑戰,即使根據我的口味,它至少很奇怪。
請測驗它并發送一些反饋。這不是你需要的嗎?如果沒有,請嘗試根據上述代碼回傳的內容更好地描述您的需求。
如果有不清楚的地方,請不要猶豫,要求澄清。我可以評論代碼行。我按原樣發布它,以確保您會看到它。你的問題,事實上,很可能會被洗掉......
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/479525.html
標籤:擅长 vba excel公式 excel-2010