返回列表 上一主題 發帖

[發問] 兩表資料重複對比並數量相乘

回復 1# 198188


    請前輩上傳範例檔
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 3# 198188


    謝謝前輩發表此主題與範例,後學學習方案如下,請前輩參考

Option Explicit
Sub TEST()
Dim Brr, Z, K, i&, j%, N&
Set Z = CreateObject("Scripting.Dictionary")
Brr = [Read!A1].CurrentRegion
For i = 2 To UBound(Brr): Z(Brr(i, 1)) = Val(Brr(i, 3)): Next
Brr = Range([Data!A1], [Data!A1].CurrentRegion.Offset(UBound(Brr)))
For i = 2 To UBound(Brr)
   If Z.Exists(Brr(i, 8)) Then
      Z(Brr(i, 1) & "/") = i
      Brr(i, 3) = Z(Brr(i, 8)) & "*" & Val(Brr(i, 3))
   End If
   If Z.Exists(Brr(i, 8) & "/") Then
      Z(Brr(i, 8) & "//") = i
      Brr(i, 3) = Brr(Z(Brr(i, 8) & "/"), 3) & "*" & Val(Brr(i, 3))
   End If
Next
For Each K In Z.Keys
   If InStr(K, "/") Then
      N = N + 1
      For j = 1 To UBound(Brr, 2): Brr(N, j) = Brr(Z(K), j): Next
      'Brr(N, 3) = "=" & Brr(N, 3)
   End If
Next
Workbooks.Add
[A1].Resize(N, UBound(Brr, 2)) = Brr
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

Brr = Range([Data!A1], [Data!A1].CurrentRegion.Offset(UBound(Brr)))

請問前輩,這句如果想改
x ...
198188 發表於 2025-11-6 15:12



With Workbooks("Data Base.xlsx").Sheets("Data")
   Brr = .Range(.[A1], .[A1].CurrentRegion.Offset(UBound(Brr)))
End With
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 9# 198188


    請前輩自行試試寫一段代碼先把Data 同號相加,再將Read比對2次Data
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 9# 198188


    這好難,不知道對不對,請前輩指教

執行結果:


Option Explicit
Sub TEST1()
Dim brr, X, Y, Z, K, Q, i&, j%, n&, T1$, T8$
Set Z = CreateObject("Scripting.Dictionary")
Set Y = CreateObject("Scripting.Dictionary")
Set X = CreateObject("Scripting.Dictionary")
brr = Sheets(1).[A1].CurrentRegion
For i = 2 To UBound(brr)
   If Y(brr(i, 1)) = "" Then
      Y(brr(i, 1)) = "(" & Val(brr(i, 3))
      Else
      Y(brr(i, 1)) = Y(brr(i, 1)) & "+" & Val(brr(i, 3))
   End If
Next
brr = Sheets(2).[A1].CurrentRegion
For i = 2 To UBound(brr)
   T1 = brr(i, 1)
   T8 = brr(i, 8)
   If Y.Exists(T8) Then
      If Not IsObject(Z(T8 & "/")) Then
         Set Z(T8 & "/") = CreateObject("Scripting.Dictionary")
         brr(i, 3) = Y(T8) & ")*(" & Val(brr(i, 3))
         Z(T1) = brr(i, 3)
         Else
         Z(T1) = Z(T8) & "+" & Val(brr(i, 3))
         brr(i, 3) = Y(T8) & ")*(" & Val(brr(i, 3))
      End If
      Z(T8 & "/")(i) = ""
      Z(T8) = brr(i, 3)
   End If
Next
For i = 2 To UBound(brr)
   T1 = brr(i, 1)
   T8 = brr(i, 8)
   If Z.Exists(T8) And Not Y.Exists(T8) Then
      If Not IsObject(Z(T8 & "/")) Then
         Set Z(T8 & "/") = CreateObject("Scripting.Dictionary")
         brr(i, 3) = Z(T8) & ")*(" & Val(brr(i, 3))
         X(T1) = brr(i, 3)
         Else
         X(T1) = X(T8) & "+" & Val(brr(i, 3))
         brr(i, 3) = Z(T8) & ")*(" & Val(brr(i, 3))
      End If
      Z(T8 & "/")(i) = ""
      X(T8) = brr(i, 3)
   End If
Next
For Each K In Z.Keys
   If IsObject(Z(K)) Then
      For Each Q In Z(K).Keys
         n = n + 1
         For j = 1 To UBound(brr, 2): brr(n, j) = brr(Q, j): Next
         brr(n, 3) = brr(n, 3) & ")": 'Brr(N, 3) = "=" & Brr(N, 3)
      Next
   End If
Next
If n > 0 Then Workbooks.Add: [A1].Resize(n, UBound(brr, 2)) = brr
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 14# 198188


    謝謝前輩指導,很多沒看過的,後學執行出現偵錯,請前輩指點

用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 15# Andy2483


    今天學習可多輪計算方案,請各位前輩指教

Option Explicit
Sub TEST2()
Const Ref = 2
Dim Brr, Crr, Y, Z(0 To Ref + 1), K, i&, j%, N&, T1$, T8$, d%
Set Y = CreateObject("Scripting.Dictionary")
For i = 0 To Ref + 1: Set Z(i) = CreateObject("Scripting.Dictionary"): Next
Brr = Sheets(1).[A1].CurrentRegion
For i = 2 To UBound(Brr)
   If Z(1)(Brr(i, 1)) = "" Then
      Z(1)(Brr(i, 1)) = "(" & Val(Brr(i, 3))
      Else
      Z(1)(Brr(i, 1)) = Z(1)(Brr(i, 1)) & "+" & Val(Brr(i, 3))
   End If
Next
Brr = Sheets(2).[A1].CurrentRegion
For d = 2 To Ref + 1
   For i = 2 To UBound(Brr)
      T1 = Brr(i, 1)
      T8 = Brr(i, 8)
      If Y.Exists(i) Then GoTo i01
      If Z(d - 1).Exists(T8) And Z(d - 1)(T8 & "/") = "" And Not Z(d - 2).Exists(T8) Then
         Brr(i, 3) = Z(d - 1)(T8) & ")*(" & Val(Brr(i, 3))
         Z(d)(T1) = Brr(i, 3)
         Z(d - 1)(T8 & "/") = Brr(i, 3)
         Y(i) = ""
         Z(d)(T8) = Brr(i, 3)
         ElseIf Z(d - 1)(T8 & "/") <> "" Then
            Z(d)(T1) = Z(d)(T8) & "+" & Val(Brr(i, 3))
            Brr(i, 3) = Z(d - 1)(T8) & ")*(" & Val(Brr(i, 3))
            Y(i) = ""
            Z(d)(T8) = Brr(i, 3)
      End If
i01: Next
Next
ReDim Crr(1 To Y.Count, 1 To UBound(Brr, 2))
For Each K In Y.Keys
   N = N + 1
   For j = 1 To UBound(Brr, 2): Crr(N, j) = Brr(K, j): Next
   Crr(N, 3) = Crr(N, 3) & ")": Crr(N, 5) = "=" & Crr(N, 3)
Next
If N > 0 Then Workbooks.Add: [A1].Resize(N, UBound(Brr, 2)) = Crr
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 19# 198188


    https://learn.microsoft.com/zh-t ... pplication.evaluate
將18樓方案 Crr(N, 3) = Crr(N, 3) & ")": Crr(N, 5) = "=" & Crr(N, 3)
改成              Crr(N, 3) = Evaluate(Crr(N, 3) & ")")

以上是可以直接得到數值的方法與Evaluate() 參考網頁
PS:後學邏輯/心算都普普,沒有用18樓拼湊出公式的方法,腦筋會打結
謝謝前輩指教
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 21# 198188


Crr(N, 3) = Crr(N, 3) = Evaluate(Crr(N, 3) & ")")
改為
Crr(N, 3) = Evaluate(Crr(N, 3) & ")")
試試看
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 【蒙蔽的自由】人常在什麼都可以自由自在的時候,卻被這種隨心所欲的自由蒙蔽,虛擲時光而毫無覺知。
返回列表 上一主題