返回列表 上一主題 發帖

為何字典的item導出時會報錯(型態不符合)?

若無必要, 儘量不要使用 Transpose,
行數太多, 字元數太多, 或其它原因, 會發生不可預期的錯誤,
不嫌麻煩, 再多轉個彎:
Sub A新DP判斷()
CL = Application.Match("C/L", [a1:a300], 0)  'C/L所在列數
CR2 = Application.Match("CUP PRINT", [a1:a100], 0)
D1 = Application.Match("D/P", [a1:a300], 0) + 2  'D/P資料區首列(不含標題列)
D2 = Cells(CR2, 1).End(3).Row 'D/P資料區末列
[I:AD].Clear
Ar = Range(Cells(D1, 1), Cells(D2, 9))
Set D = CreateObject("Scripting.Dictionary")
For x = 1 To UBound(Ar)  '將OS資料入陣列,item 則以"-"將OS串接
   D(Ar(x, 3)) = D(Ar(x, 3)) & IIf(D(Ar(x, 3)) = "", "", "-") & Ar(x, 2)
Next x
If D.Count = 0 Then Exit Sub

ReDim Br(1 To D.Count, 1)
For Each a In D.keys
    i = i + 1:  Br(i, 0) = a:  Br(i, 1) = D(a)
Next


Cells(D1, "J").Resize(D.Count, 2) = Br
End Sub


===================================

TOP

這種寫法, 如果看得懂, 可參考:

Sub A新DP判斷_2()
Dim Ar, Br, D, F1 As Range, F2 As Range, i&, N&, T$, U&, V
[J:K].ClearContents
Set F1 = [A:A].Find("D/P", Lookat:=xlWhole)(3, 1) '尋找"D/P"的位置, 並向下移3格(即資料的開頭)
Set F2 = [A:A].Find("CUP PRINT").End(xlUp)(1, 3)  '尋找"CUP PRINT"的位置, 並向上取非空位置, 再向右移3格
Ar = Range(F1, F2)
ReDim Br(1 To UBound(Ar), 1 To 2)
Set D = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Ar)
    T = Ar(i, 3): If T = "" Then GoTo 99 '若AMOUNT為空, 略過
    U = D(T) '取得AMOUNT已存入字典檔的位置
    If U = 0 Then N = N + 1: U = N:  D(T) = N: Br(N, 1) = T '如果尚未存入字典檔, N+1遞增存入, 並將AMOUNT值放入Br陣列
    Br(U, 2) = Replace(Trim(Br(U, 2) & " " & Ar(i, 2)), " ", "-") '依據U值的位置, 將B欄文字存入Br
99: Next i
If N > 0 Then Cells(F1.Row, "J").Resize(N, 2) = Br
End Sub


==============================

TOP

        靜思自在 : 受人點水之恩,須當湧泉以報。
返回列表 上一主題