Board logo

標題: [發問] 如何比對2個BOM表,並插入列並齊 [打印本頁]

作者: jsc0518    時間: 2017-1-21 15:16     標題: 如何比對2個BOM表,並插入列並齊

請教各位先進
1.BOM有"設變"狀況,每次設變不是會新增子階料號,不然就是會減少子階料號
2.我現在是用手動的方式依序按照階層排列
3.當設變前與設變後比對BOM,設變後的BOM有多一子階,我在設變前的BOM就插入1列--> 如何用VBA幫忙自動判斷並插入列
4.當設變前與設變後比對BOM,設變前有多一子階,我在設變後的BOM就插1列--> 如何用VBA幫忙自動判斷並插入列

[attach]26428[/attach][attach]26429[/attach]

是否可以使用Excel VBA 幫忙協助判讀,A欄與G欄的差異,並自動插入一列,讓設變前/後是可以比照的
P.S會有不同的產品,故資料列範圍會有變化

感謝各位先進的教導!

[attach]26430[/attach]
作者: 准提部林    時間: 2017-1-23 13:06

本帖最後由 准提部林 於 2017-1-23 13:10 編輯

資料必須[排序]的:
  1. Sub TEST()
  2. Dim xArea As Range, xR As Range, xF As Range, xG As Range, G%
  3. Set xArea = Range([A3], Cells(Rows.Count, 1).End(xlUp))
  4. Application.ScreenUpdating = False
  5. For Each xR In xArea
  6.     If xR = "" Or xR = xR(1, 7) Then GoTo 101
  7.     Set xF = [G:G].Find(xR, Lookat:=xlWhole)
  8.     If xF Is Nothing Then GoTo 101
  9.     G = xR.Row - xF.Row
  10.     If G > 0 Then Set xG = xF Else Set xG = xR
  11.     xG.Resize(Abs(G), 5).Insert Shift:=xlDown
  12. 101: Next
  13. End Sub
複製代碼
[attach]26436[/attach]
作者: jsc0518    時間: 2017-1-23 19:12

回復 2# 准提部林


准提部林,真的太感激你了,解決了一大煩惱。
我會好好看一下你的語法,有問題再跟你請教。
Thank you very much !
作者: jsc0518    時間: 2017-1-24 12:25

回復 2# 准提部林

Dear 准提部林,我改過欄位編號後,並修改過程式碼,結果有異常,是否哪裡需做修訂?

Sub TEST()
Dim xArea As Range, xR As Range, xF As Range, xG As Range, I%
Set xArea = Range([A3], Cells(Rows.Count, 1).End(xlUp))
Application.ScreenUpdating = False
For Each xR In xArea
    If xR = "" Or xR = xR(1, 9) Then GoTo 101
    Set xF = [I:I].Find(xR, Lookat:=xlWhole)
    If xF Is Nothing Then GoTo 101
    I = xR.Row - xF.Row
    If I > 0 Then Set xG = xF Else Set xG = xR
    xG.Resize(Abs(I), 5).Insert Shift:=xlDown
101: Next
End Sub


[attach]26448[/attach]

[attach]26449[/attach]

[attach]26450[/attach]
作者: 准提部林    時間: 2017-1-24 12:59

回復 4# jsc0518


A364 及 i331 兩格的 1.1 應是 1.10, 因不是[文字格式], 變成 1.1 與上面的重覆,
將A及I欄都設為[文字]格式, 然後重新檢查資料, 手動修正~~
作者: jsc0518    時間: 2017-1-24 16:17

回復 5# 准提部林


我已將A欄及I欄更改為文字格式
執行後畫面如下,在我"版本2" I3有階層1,但I4~I481完全沒資訊,而I482則是階層1,I483則是1.1.1   

[attach]26455[/attach]

[attach]26456[/attach]
作者: 准提部林    時間: 2017-1-24 20:53

本帖最後由 准提部林 於 2017-1-24 21:04 編輯

回復 6# jsc0518


只改為文字格式是不行的, 數字實際還是數值, 要重新輸入!
而且下面的 1.1 也要改為1.10
製作表格要根據需要事先製定儲存格格式, 免得輸入一堆資料後很難處理!

[attach]26458[/attach]
作者: jsc0518    時間: 2017-1-24 22:03

回復 7# 准提部林


對不起,我再請教一個問題
一旦使用VBA執行後,設定格式化的條件的公式都會跑掉
這要如何設定?


=(A3<>"")*(A3<>G3)
=$A$3:$A$491


=(I3<>"")*(I3<>A3)
=$G$3:$G$491
作者: 准提部林    時間: 2017-1-25 11:34

回復 9# jsc0518

原來資料的格式有跑掉,
用第一格重新刷一次!
作者: jsc0518    時間: 2017-1-25 12:39

回復 10# 准提部林


好的,感謝您的教學




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)