返回列表 上一主題 發帖

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

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



有兩個表 Read & Data

Data 是資料檔案
Read 是程式執行檔案


執行程式規則:
Read 表 灰色部分是原有資料,保留。
Read 表 A 欄  對比 Data 表 H 欄,
若吻合,複製 Data 表 對應的一列資料到 Read 表 A 欄最後一列後, 數量 Read 表  Qty * Data 表 Qty (如藍色部分)
完成後,再重複一次
Read 表 A 欄  對比 Data 表 H 欄,
若吻合,複製 Data 表 對應的一列資料到 Read 表 A 欄最後一列後, 數量 Read 表  Qty * Data 表 Qty (如綠色色部分)

回復 1# 198188


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

TOP

回復  198188


    請前輩上傳範例檔
Andy2483 發表於 2025-11-6 11:10


前輩,附上範例

範例.rar (10.69 KB)

TOP

C2=IFERROR(VLOOKUP(H2,A1:C$2,3,),1)*VLOOKUP(A2,Data!A:C,3,)
google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

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

  1. Option Explicit
  2. Sub TEST()
  3. Dim arr, Brr, Z, K, i&, j%, N&
  4. Set Z = CreateObject("Scripting.Dictionary")
  5. Brr = [Read!A1].CurrentRegion
  6. For i = 2 To UBound(Brr): Z(Brr(i, 1)) = Val(Brr(i, 3)): Next
  7. Brr = Range([Data!A1], [Data!A1].CurrentRegion.Offset(UBound(Brr)))
  8. For i = 2 To UBound(Brr)
  9.    If Z.Exists(Brr(i, 8)) Then
  10.       Z(Brr(i, 1) & "/") = i
  11.       Brr(i, 3) = Z(Brr(i, 8)) * Val(Brr(i, 3))
  12.    End If
  13.    If Z.Exists(Brr(i, 8) & "/") Then
  14.       Z(Brr(i, 8) & "//") = i
  15.       Brr(i, 3) = Brr(Z(Brr(i, 8) & "/"), 3) * Val(Brr(i, 3))
  16.    End If
  17. Next
  18. For Each K In Z.Keys
  19.    If InStr(K, "/") Then
  20.       N = N + 1
  21.       For j = 1 To UBound(Brr, 2): Brr(N, j) = Brr(Z(K), j): Next
  22.       'Brr(N, 3) = "=" & Brr(N, 3)
  23.    End If
  24. Next
  25. arr = Sheets("Read").UsedRange
  26. Sheets("Read").Range("A" & UBound(arr) + 1).Resize(N, UBound(Brr, 2)) = Brr
  27. End Sub
複製代碼
回復  198188


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

Option Explicit
Sub  ...
Andy2483 發表於 2025-11-6 14:16


前輩我修改如上。

TOP

回復  198188


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

Option Explicit
Sub  ...
Andy2483 發表於 2025-11-6 14:16


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

請問前輩,這句如果想改
xFile = "Data Base.xlsx"
sheets ("Data")
應該如何套入?

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

With Workbooks("Data Base.xlsx").Sheets("Data")
   Brr = .Range(.[A1], .[A1].CurrentRegion.Of ...
Andy2483 發表於 2025-11-6 15:38



前輩,如果數量每一輪的數量都用  前一輪的總數量 *  Data Base 的數量,應該如何更改?
舉例
本檔灰色是原本數量,
E1204 共有6個

第一輪運行
E1204 共有6個
E1204 對應 A1122
A1122 有 2 行, 如下
A1122  2 * 6 =12
A1122  3 * 6 =18

第二輪運行
A1122 共有30個

A1122 對應 B1236
B1236 有 1 行, 如下
B1236    2 * 30 = 60

範例.rar (12.52 KB)

TOP

回復 9# 198188


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

TOP

        靜思自在 : 要批評別人時,先想想自己是否完美無缺。
返回列表 上一主題