返回列表 上一主題 發帖

不同工作表找對比資料,工作表名稱不固定

本帖最後由 mdr0465 於 2024-3-5 23:26 編輯

回復 3# Andy2483

  Andy 學兄,你好
又是我這一名愚蠢的學弟

Sub TEST()
Dim Arr, Brr, Crr, V, Z, Q, i&, j%, R&, c%, Y&, X%, T$, T1$, T2$, T3$
Dim xR As Range, Ra As Range, Sh As Worksheet, xBook As Workbook
Set Z = CreateObject("Scripting.Dictionary")
Brr = Range([Data!E2], [Data!A65536].End(3))
For i = 1 To UBound(Brr)
   T = Trim(Brr(i, 1)) & "/" & Val(Brr(i, 2)) & "/" & Val(Brr(i, 3))
   If Z.EXISTS(T) Then
      MsgBox T & "重複":  Exit Sub
      Else
      Z(T) = Val(Brr(i, 5))
      Z(T & "/n") = 1
   End If
Next
Arr = Range([Invoice!H12], [Invoice!C65536].End(3))
ReDim Crr(1 To UBound(Arr), 1 To 6)
For i = 1 To UBound(Arr)
   If Trim(Arr(i, 1)) = "" Then GoTo i01
   T = Trim(Arr(i, 1)) & "/" & Val(Arr(i, 2)) & "/" & Val(Arr(i, 3))
   Z(T & "/n") = Z(T & "/n") + 1
   If Z(T & "/n") > 2 Then MsgBox T & "重複":  Exit Sub Else V = Z(T)
   If V = "" Then GoTo i01
   Crr(i, 1) = V
   Crr(i, 2) = V - Val(Arr(i, 4))
   Crr(i, 3) = Application.Round(Val(Arr(i, 2)) * Val(Arr(i, 3)) / 10 ^ 6, 3)
   Crr(i, 4) = Crr(i, 3) - Val(Arr(i, 5))
   Crr(i, 5) = Application.Round(Crr(i, 3) * Val(Arr(i, 4)), 3)
   Crr(i, 6) = Crr(i, 5) - Val(Arr(i, 6))
i01: Next
[Invoice!J12].Resize(UBound(Crr), 6) = Crr <<  在網上找到好多這類型的編碼, resize(ubound(Crr).6) 我都理解, 但=Crr我始終都不明白這個原理, 麻煩你可不可以指點學弟迷津, 怎樣應用這種方法的編碼呢 , 謝謝
End Sub

TOP

回復 11# Andy2483

Andy 師兄,
謝謝你耐心指導和提供有用教材給我了解當中的運作,
現在`後輩了解當中的運作了,萬分感謝你:handshake

TOP

回復 13# Andy2483
Andy 師兄,

謝謝你悉心提供有用的教材令我茅塞頓開, 從而更深入理解這編碼的運用,
但學弟有一個疑問再想向Andy 請教, 我明白同一個問題可以用不同方式去編寫同樣都可以做出同樣的結果
但請問Andy學兄,以你個人的見解,你會在什麼時間才會決定使用"Scripting Dictionary" (字典)
什麼時間就不用而用其他方式去編寫程式呢?

謝謝

TOP

回復 15# Andy2483
Andy 師兄,
明白了,謝謝你每一次都很詳細的解釋,
謝謝

TOP

        靜思自在 : 成功是優點的發揮,失敗是缺點的累積。
返回列表 上一主題