標題:
[發問]
改善大筆資料處理
[打印本頁]
作者:
li_hsien
時間:
2014-1-21 10:24
標題:
改善大筆資料處理
請問各位大大
小弟我目前有兩個工作表
依據"產品工作表"(A) 的 ID & PartNumber 比對到 "物料工作表"(B) 的 ID & PartNumber
如果有一樣的,則把A的資料COPY到B裡面
如果沒有相同的,則補到B的最下方
資料量小的時候還可以
但我資料有幾千筆會變好慢好慢 大約要跑10分鐘左右
可能是FOR迴圈的問題
不知有什麼改善方法
麻煩各位大大
以下為附檔
P.S. 比對欄位有刪減,所以附檔的處理速度好像還可以
[attach]17329[/attach]
作者:
GBKEE
時間:
2014-1-21 14:55
本帖最後由 GBKEE 於 2014-1-22 14:52 編輯
回復
1#
li_hsien
改用 Collection 物件 不用 Dictionary 物件
Option Explicit
Sub Ex()
Dim d As New Collection, AR(1 To 7), i As Integer, Rng(1 To 2) As Range, E As Variant
On Error Resume Next '註解1 :Collection新增的KEY如被使用或有錯誤
With Worksheets("產品管控清單")
For i = 2 To .Range("J1").End(xlDown).Row
AR(1) = .Range("E" & i) 'PRODUCT ID(A)
AR(2) = .Range("F" & i) 'CHILDPARTNUMBER(B)
AR(3) = .Range("C" & i) 'MP date(G)
AR(4) = .Range("A" & i) '週別(H)
AR(5) = .Range("B" & i) '更新週別(I)
AR(6) = DateDiff("d", Date, AR(3)) '工作日(M)
AR(7) = .Range("J" & i) 'Product ID & PartNumber
d.Add AR, .Range("J" & i).Value '紀錄產品的ID & PartNumber
'**** 所以是以"產品"擁有的為主,不過產出"物料"之前得先刪除"產品"重複的部分->Rng(1)
'**** 當產品的ID & PartNumber(F)有重複時有->註解1: Err <> 0
If Err <> 0 Then
Err.Clear
If Rng(1) Is Nothing Then 'Rng(1)->紀錄有重複產品的ID & PartNumber
Set Rng(1) = .Range("J" & i)
Else
Set Rng(1) = Union(.Range("J" & i), Rng(1))
End If
End If
Next
End With
With Worksheets("物料管控清單")
For Each E In .Range("F:F").SpecialCells(xlCellTypeConstants).Offset(1)
.Range("A" & E.Row) = d(E.Value)(1)
.Range("B" & E.Row) = d(E.Value)(2)
.Range("G" & E.Row) = d(E.Value)(3)
.Range("H" & E.Row) = d(E.Value)(4)
.Range("I" & E.Row) = d(E.Value)(5)
.Range("M" & E.Row) = d(E.Value)(6)
.Range("F" & E.Row) = d(E.Value)(7)
'**** "產品"有 "物料"有 則把 "產品" 的資料COPY到 "物料" 原本的位子上
'**** 產品"有 "物料"有 -> Err = 0
If Err = 0 Then '物料的ID & PartNumber,存在產品的ID & PartNumber中
d.Remove E.Value '除去:產品的ID & PartNumber
'**** 有第二筆已除去的產品ID & PartNumber-> 已除去(沒有這KEY值): Err <> 0
ElseIf Err <> 0 And E <> "" Then
'**** "產品"沒有 "物料"有 則把"物料"整欄刪除掉 -> Rng(2)
If Rng(2) Is Nothing Then '取的儲存格的位置
Set Rng(2) = E
Else
Set Rng(2) = Union(E, Rng(2))
End If
End If
Err.Clear
Next
If d.Count > 0 Then
'C ***產品"有 "物料"沒有 則把新增多出來的增加到 "物料" 最下面
i = 0
With .Range("A1").End(xlDown)
For Each E In d
i = i + 1
.Offset(i).Range("A1") = E(1)
.Offset(i).Range("B1") = E(2)
.Offset(i).Range("G1") = E(3)
.Offset(i).Range("H1") = E(4)
.Offset(i).Range("I1") = E(5)
.Offset(i).Range("M1") = E(6)
.Offset(i).Range("F1") = E(7)
Next
End With
End If
End With
If Not Rng(1) Is Nothing Then
'**** 刪除"產品"重複的部分->Rng(1)
If MsgBox("刪除重複的[ID & PartNumber]", vbQuestion + vbYesNo, "產品管控清單") = vbYes Then
Rng(1).EntireRow.Delete
End If
End If
If Not Rng(2) Is Nothing Then
'**** "產品"沒有 "物料"有 則把"物料"整欄刪除掉 -> Rng(2)
If MsgBox("刪除重複的[ID & PartNumber]", vbQuestion + vbYesNo, "物料管控清單") = vbYes Then
Rng(2).EntireRow.Delete
End If
End If
MsgBox "Ok"
End Sub
複製代碼
作者:
li_hsien
時間:
2014-1-21 15:24
回復
2#
GBKEE
板大我發現了一點問題
我如果在產品那邊刪掉一筆
在物料那並沒有刪除掉
新增加的話還OK
最後板大幫我設置的刪除提示
為什麼刪掉後只剩下4.5筆呀???
我用2007的移除重複,並沒有這麼多重複
不知問題出在哪裡???
麻煩幫我看看
謝謝 : )
作者:
li_hsien
時間:
2014-1-21 17:48
回復
2#
GBKEE
謝謝大大的幫忙
可是我發現還是沒有刪除掉耶
產品沒有的,物料那邊還是有出現
我是在產品中間隨便刪一筆測試的
那大大的重複提示
我用2007內建的移除重複測試
發現還是多刪了,可是筆數不多
我要留有重複的第一筆
EX:
A,B,C,A,A,B,C,D
我要留A,B,C,D
不知大大是不是把重複的都刪了
麻煩幫我看看 感謝 : )
作者:
li_hsien
時間:
2014-1-21 21:24
回復
2#
GBKEE
版大我又出現了@@
我試了一試還是怪怪的耶
產品如果在資料中有新增
好像抓不到物料那邊
會怪怪的
還是只能在最下面新增
如果我在產品的資料中刪除一筆
物料那邊還是會出現@@
本身有2007的關係
我驗證資料重複應該剩下1026筆
物料那邊OK 不過產品那邊還是不一致
又再次麻煩大大了
謝謝你 : )
作者:
GBKEE
時間:
2014-1-22 10:33
回復
5#
li_hsien
[A,B,C,A,A,B,C,D我要留A,B,C,D]
d.Add AR, .Range("J" & i).Value
'****** A,B,C,A,A,B,C,D我要留A , B, C,D.. 這裡在處理.
If Err <> 0 Then '錯誤: 產品重複的[ID & PartNumber]
Err.Clear
If Rng(1) Is Nothing Then '紀錄:產品重複的[ID & PartNumber]的位置
Set Rng(1) = .Range("J" & i)
Else
Set Rng(1) = Union(.Range("J" & i), Rng(1))
End If
End If
複製代碼
[產品沒有的,物料那邊還是有出現]
'******* 我如果在產品那邊刪掉一筆,在物料那並沒有刪除掉??這裡有作處裡
If Err = 0 Then '物料的ID & PartNumber,有存在產品的ID & PartNumber中
d.Remove E.Value '除去:產品的ID & PartNumber
Else '-> Err <> 0 有錯誤
'錯誤1:已除去產品的ID & PartNumber
'錯誤2:物料的ID & PartNumber,不存在產品的ID & PartNumber中
If Rng(2) Is Nothing Then '紀錄儲存格的位置
Set Rng(2) = E
Else
Set Rng(2) = Union(E, Rng(2)) '紀錄儲存格的位置
End If
End If
'*********************************************************
Err.Clear
複製代碼
請上傳測試的檔案看看
作者:
li_hsien
時間:
2014-1-22 11:00
回復
6#
GBKEE
我都是直接再次COPY過去
剛剛再次確認
新增應該OK
不過好像都是要按下MSGBOX確認後才可以
可是移除後數量不對
附檔還有兩張圖
一張是原有資料
另一張是用了移除重複後的資料
煩請大大幫我看看
[attach]17336[/attach]
作者:
GBKEE
時間:
2014-1-22 11:58
本帖最後由 GBKEE 於 2014-1-22 12:02 編輯
回復
7#
li_hsien
7#的檔案,執行2#的程式碼
找出 物料管控清單 (產品沒有或物料重複)的ID
[attach]17338[/attach]
1194同列為產品管控清單,物料管控清單的最後一筆資料
[attach]17337[/attach]
[attach]17339[/attach]
作者:
li_hsien
時間:
2014-1-22 14:09
回復
8#
GBKEE
板大我再測試了一下
在物料或是產品的工作表執行應該都沒有差別吧
我不太懂第一次刪除重複的動作
因為附檔的資料一開始在"產品"那邊有1801項,"物料"那邊有1206項
我先用移除重複篩一次"產品"那邊的項目,只剩下1206項
可是我用了程式跑只剩下1196項
應該是多刪了板大圖示的部分
我的處理流程是先依據"產品"裡的來產出"物料"裡面的
動作 是如果 (都是以ID & PART NUMBER為依據)
"產品"有 "物料"有
則把 "產品" 的資料COPY到 "物料" 原本的位子上
"產品"有 "物料"沒有
則把新增多出來的增加到 "物料" 最下面
"產品"沒有 "物料"有
則把"物料"整欄刪除掉
所以是以"產品"擁有的為主,不過產出"物料"之前得先刪除"產品"重複的部分
最後結果是"產品"跟"物料"的項目數會是一樣的沒有錯
不過就在一開始的移除有些問題
做過第一次動作後,我再測試刪刪減減這些動作,都很順利沒有問題 : )
有點冗長@@
煩請板大看看
謝謝
作者:
GBKEE
時間:
2014-1-22 14:30
回復
9#
li_hsien
2#的程式請你修改一下看看產品管控清單重複的ID
'********* "產品管控清單" 刪除重複的[ID & PartNumber]*******************
If Not Rng(1) Is Nothing Then
If MsgBox("刪除重複的[ID & PartNumber]", vbQuestion + vbYesNo, "產品管控清單") = vbYes Then
Worksheets("產品管控清單").Activate
Stop '程式會停止 按F8一步一步執行下去看工作表的情形
Rng(1).EntireRow.Select '選取重複的ID
MsgBox Rng(1).EntireRow.Address
Rng(1).EntireRow.Delete '先註解掉不刪除
End If
End If
複製代碼
作者:
li_hsien
時間:
2014-1-22 15:21
回復
10#
GBKEE
這些是我重複的
$1806:$1810,$1800:$1802,$1798:$1798,$1794:$1795,$1791:$1792,$1788:$1789,$1785:$1785,$1772:$1772,$1764:$1764,$1754:$1758,$1748:$1750,$1743:$1743,$1739:$1740,$1736:$1737,$1733:$1734,$1730:$1730,$1718:$1718,$1710:$1710,$1698:$1701,$1691:$1691,$1688:$1689
如有重複我只要刪除重複的部分
留唯一
還是板大的程式把重複的全刪了???
我也不確定是不是
麻煩大大幫我看看
謝謝你
作者:
Hsieh
時間:
2014-1-22 16:40
本帖最後由 Hsieh 於 2014-1-22 16:43 編輯
回復
1#
li_hsien
Sub ex()
Dim Ar
Set d = CreateObject("Scripting.Dictionary")
With Sheets("產品管控清單")
Ar = .UsedRange.Value
For i = 2 To UBound(Ar, 1) '記錄產品不重覆記錄
d(Ar(i, 10)) = Array(Ar(i, 5), Ar(i, 6), Ar(i, 7), Ar(i, 8), Ar(i, 9), Ar(i, 10), Ar(i, 3), Ar(i, 1), Ar(i, 2))
Next
End With
With Sheets("物料管控清單")
Ar = .UsedRange.Value
For i = 2 To UBound(Ar, 1)
If d.exists(Ar(i, 6)) Then
.Cells(i, 1).Resize(, 9) = d(Ar(i, 6)) '產品出現在物料則更新為產品資料
d.Remove Ar(i, 6) '移除已寫入的資料
End If
Next
'若產品未出現於物料,則新增至物料資料尾
If d.Count > 0 Then .Cells(.Rows.Count, 1).End(xlUp).Offset(1).Resize(d.Count, 9) = Application.Transpose(Application.Transpose(d.items))
End With
End Sub
複製代碼
[attach]17340[/attach]
作者:
li_hsien
時間:
2014-1-22 17:05
回復
12#
Hsieh
謝謝H板大的解答
不過測試了一下
我發現如果我在"產品"那邊刪除一筆,再次執行
"物料"那並不會刪除耶
好像還是有點問題
麻煩板大幫我看看
謝謝: )
作者:
li_hsien
時間:
2014-1-22 18:13
回復
10#
GBKEE
GB板大,如果我不做重複的處理
直接做"產品"跟"物料"的新增刪除修改
改成以下方式可行嗎???
模式一樣是以"產品"為主
如果
"產品"有 "物料"有 則把"產品" 放到 "物料" 原有的位置
"產品"無 "物料"有 則把"物料" 那筆整欄刪掉
"產品"有 "物料"無 則把新增出來的那筆"產品"資訊 新增到"物料"的最下方
但我測試幾次,如果在"產品"的表單中加入一筆新的
可能無法在"物料"中顯示
在最下端增加好像才不會出錯
麻煩板大幫我看看程式還需做怎樣的修改
謝謝你 : )
Sub Ex2()
Dim d As New Collection, AR(1 To 7), i As Integer, Rng As Range, E As Variant
On Error Resume Next 'Collection新增的KEY如被使用或有錯誤
With Worksheets("產品管控清單")
For i = 2 To .Range("J1").End(xlDown).Row
AR(1) = .Range("E" & i) 'PRODUCT ID(A)
AR(2) = .Range("F" & i) 'CHILDPARTNUMBER(B)
AR(3) = .Range("C" & i) 'MP date(G)
AR(4) = .Range("A" & i) '週別(H)
AR(5) = .Range("B" & i) '更新週別(I)
AR(6) = DateDiff("d", Date, AR(3)) '工作日(M)
AR(7) = .Range("J" & i) 'Product ID & PartNumber(F)
d.Add AR, .Range("J" & i).Value
Next
End With
With Worksheets("物料管控清單")
For Each E In .Range("F:F").SpecialCells(xlCellTypeConstants).Offset(1)
.Range("A" & E.Row) = d(E.Value)(1)
.Range("B" & E.Row) = d(E.Value)(2)
.Range("G" & E.Row) = d(E.Value)(3)
.Range("H" & E.Row) = d(E.Value)(4)
.Range("I" & E.Row) = d(E.Value)(5)
.Range("M" & E.Row) = d(E.Value)(6)
.Range("F" & E.Row) = d(E.Value)(7)
If Err = 0 Then '物料的ID & PartNumber,存在產品的ID & PartNumber中
d.Remove E.Value '除去:產品的ID & PartNumber
ElseIf Err <> 0 And E <> "" Then '物料的ID & PartNumber,不存在產品的ID & PartNumber中
If Rng Is Nothing Then '取的儲存格的位置
Set Rng = E
Else
[color=Red]Set Rng = Union(E, Rng)[/color]
[color=Red]Rng.EntireRow.Delete[/color]
End If
End If
Err.Clear
Next
If d.Count > 0 Then '補上:物料沒有的產品ID & PartNumber
i = 0
With .Range("A1").End(xlDown)
For Each E In d
i = i + 1
.Offset(i).Range("A1") = E(1)
.Offset(i).Range("B1") = E(2)
.Offset(i).Range("G1") = E(3)
.Offset(i).Range("H1") = E(4)
.Offset(i).Range("I1") = E(5)
.Offset(i).Range("M1") = E(6)
.Offset(i).Range("F1") = E(7)
Next
End With
End If
End With
複製代碼
作者:
Hsieh
時間:
2014-1-22 21:47
回復
14#
li_hsien
模式一樣是以"產品"為主
如果
"產品"有 "物料"有 則把"產品" 放到 "物料" 原有的位置
"產品"無 "物料"有 則把"物料" 那筆整欄刪掉
"產品"有 "物料"無 則把新增出來的那筆"產品"資訊 新增到"物料"的最下方
這樣不就只是把產品刪除重覆的結果而已嗎?
作者:
li_hsien
時間:
2014-1-22 22:53
回復
15#
Hsieh
"產品"那邊的工作表還是需要保留著
因為"產品"跟"物料"的資訊不太一樣
欄位也不盡相同
但有些部分一樣
那它主要對應的方式都是依據ID & PAERTNUMBER
對了!!!
其實跟之前H版大幫我處理的<兩工作表比對 新增修改>這篇是一樣的
只是我後來應該方便作業所以多產生了一個ID & PAERTNUMBER來比對
不需要好幾欄&起來比對
不過因為我用FOR再跑
所以資料量好大
想尋求快速的比對方式
麻煩各位大大們 謝謝 : )
作者:
GBKEE
時間:
2014-1-23 10:44
回復
16#
li_hsien
11#說: 還是板大的程式把重複的全刪了???
給你驗正一下
If Not Rng(1) Is Nothing Then
'**** 刪除"產品"重複的部分->Rng(1)
If MsgBox("刪除重複的[ID & PartNumber]", vbQuestion + vbYesNo, "產品管控清單") = vbYes Then
Rng(1).Interior.Color = vbGreen '重複的標註為綠色
For Each E In Rng(1).Areas
For i = 1 To E.Cells.Count
Set Rng(3) = Rng(1).EntireColumn.Find(E.Cells(i), LookIn:=xlValues)
If Application.Intersect(Rng(1), Rng(3)) Is Nothing Then
Rng(3).Interior.Color = vbRed '保留第一筆重複的標註紅色
End If
Next
Next
' Rng(1).EntireRow.Delete 先不刪除去看看有保留在哪裡
End If
End If
複製代碼
你說:在最下端增加好像才不會出錯
程式有註解 [ 補上:物料沒有的產品ID & PartNumber ] -> 就是最後補上的
那你想如何補上??
作者:
li_hsien
時間:
2014-1-23 16:56
回復
17#
GBKEE
謝謝板大再次幫我修改
我再測試一次還是會多刪除耶
以下是我用大大程式碼修改後的
Option Explicit
Sub Ex()
Dim d As New Collection, AR(1 To 7), i As Integer, Rng(1 To 2) As Range, E As Variant
On Error Resume Next 'Collection新增的KEY如被使用或有錯誤
With Worksheets("產品管控清單")
For i = 2 To .Range("J1").End(xlDown).Row
AR(1) = .Range("E" & i) 'PRODUCT ID(A)
AR(2) = .Range("F" & i) 'CHILDPARTNUMBER(B)
AR(3) = .Range("C" & i) 'MP date(G)
AR(4) = .Range("A" & i) '週別(H)
AR(5) = .Range("B" & i) '更新週別(I)
AR(6) = DateDiff("d", Date, AR(3)) '工作日(M)
AR(7) = .Range("J" & i) 'Product ID & PartNumber(F)
d.Add AR, .Range("J" & i).Value
'*****找出[產品管控清單]重複的[ID & PartNumber] ****
If Err <> 0 Then
Err.Clear
If Rng(1) Is Nothing Then
Set Rng(1) = .Range("J" & i)
Else
Set Rng(1) = Union(.Range("J" & i), Rng(1))
End If
End If
'*****************************************************
Next
End With
With Worksheets("物料管控清單")
For Each E In .Range("F:F").SpecialCells(xlCellTypeConstants).Offset(1)
.Range("A" & E.Row) = d(E.Value)(1)
.Range("B" & E.Row) = d(E.Value)(2)
.Range("G" & E.Row) = d(E.Value)(3)
.Range("H" & E.Row) = d(E.Value)(4)
.Range("I" & E.Row) = d(E.Value)(5)
.Range("M" & E.Row) = d(E.Value)(6)
.Range("F" & E.Row) = d(E.Value)(7)
If Err = 0 Then '物料的ID & PartNumber,存在產品的ID & PartNumber中
d.Remove E.Value '除去:產品的ID & PartNumber
ElseIf Err <> 0 And E <> "" Then '物料的ID & PartNumber,不存在產品的ID & PartNumber中
If Rng(2) Is Nothing Then '取的儲存格的位置
Set Rng(2) = E
Else
Set Rng(2) = Union(E, Rng(2))
End If
End If
Err.Clear
Next
If d.Count > 0 Then '補上:物料沒有的產品ID & PartNumber
i = 0
With .Range("A1").End(xlDown)
For Each E In d
i = i + 1
.Offset(i).Range("A1") = E(1)
.Offset(i).Range("B1") = E(2)
.Offset(i).Range("G1") = E(3)
.Offset(i).Range("H1") = E(4)
.Offset(i).Range("I1") = E(5)
.Offset(i).Range("M1") = E(6)
.Offset(i).Range("F1") = E(7)
Next
End With
End If
End With
' '********* "產品管控清單" 刪除重複的[ID & PartNumber]*******************
' If Not Rng(1) Is Nothing Then
' If MsgBox("刪除重複的[ID & PartNumber]", vbQuestion + vbYesNo, "產品管控清單") = vbYes Then
' Rng(1).EntireRow.Delete
' End If
' End If
' '********* "產品管控清單" 刪除重複的[ID & PartNumber]*******************
' If Not Rng(1) Is Nothing Then
' If MsgBox("刪除重複的[ID & PartNumber]", vbQuestion + vbYesNo, "產品管控清單") = vbYes Then
' Worksheets("產品管控清單").Activate
' Stop '程式會停止 按F8一步一步執行下去看工作表的情形
' Rng(1).EntireRow.Select '選取重複的ID
' MsgBox Rng(1).EntireRow.Address
' Debug.Print Rng(1).EntireRow.Address
'' Rng(1).EntireRow.Delete '先註解掉不刪除
' End If
' End If
If Not Rng(1) Is Nothing Then
'**** 刪除"產品"重複的部分->Rng(1)
If MsgBox("刪除重複的[ID & PartNumber]", vbQuestion + vbYesNo, "產品管控清單") = vbYes Then
Rng(1).Interior.Color = vbGreen '重複的標註為綠色
For Each E In Rng(1).Areas
For i = 1 To E.Cells.Count
Set Rng(3) = Rng(1).EntireColumn.Find(E.Cells(i), LookIn:=xlValues)
If Application.Intersect(Rng(1), Rng(3)) Is Nothing Then
Rng(3).Interior.Color = vbRed '保留第一筆重複的標註紅色
End If
Next
Next
' Rng(1).EntireRow.Delete 先不刪除去看看有保留在哪裡
End If
End If
'********* "物料管控清單" 刪除重複的[ID & PartNumber]*******************
If Not Rng(2) Is Nothing Then
If MsgBox("刪除重複的[ID & PartNumber]", vbQuestion + vbYesNo, "物料管控清單") = vbYes Then
'Rng(2).EntireRow.Select
Rng(2).EntireRow.Delete
End If
End If
MsgBox "Ok"
End Sub
複製代碼
應該是這樣改沒有錯吧
但我跑出來"產品"那邊一樣是多刪除
正常應該剩1206項但刪除後卻只剩1194項
好奇怪喔@@
大大說新增的部分
因為我的"產品"是由兩張工作表合而為一的
所以新增是分別在兩張工作表做的
所以新增的資訊可能會在"產品"的中間部分
不是在"產品"的最下方
請問大大
我能先處理刪除重複
那單純只做"產品","物料"資訊的新增刪除修改嗎???
這樣是否比較沒這麼複雜
(就去除掉排除重複的步驟,其餘都一樣)
以上 麻煩大大 參酌 謝謝 : )
作者:
li_hsien
時間:
2014-1-23 20:50
回復
17#
GBKEE
大大你也太神奇了
真的100筆以下就OK耶@@
為什麼會這樣啊
不過我不能只有這麼幾筆
不知能否克服???
作者:
GBKEE
時間:
2014-1-24 08:39
回復
19#
li_hsien
正常應該剩1206項但刪除後卻只剩1194項,好奇怪喔@@
C欄日期格式不對導致的!!!
[attach]17352[/attach]
作者:
li_hsien
時間:
2014-1-24 11:19
回復
20#
GBKEE
真的是這個錯誤耶!!!!
我以為有了On Error Resume Next就可以排除了@@
不過資料增加和刪除的部分有辦法修正嗎????
因為可能從"產品"的資訊中間新增或刪除,而不是在下方
可是現在測試的結果,如果在中間新增會有錯誤,新增不到的問題
感謝大大的發現 !!!!!!!
作者:
GBKEE
時間:
2014-1-25 12:10
回復
21#
li_hsien
試試看
9#所說: 最後結果是"產品"跟"物料"的項目數會是一樣的沒有錯
Option Explicit
Sub Ex()
Dim d As New Collection, AR(), i As Integer, Rng As Range ', e As Variant
On Error Resume Next 'Collection新增的KEY如被使用或有錯誤
With Worksheets("產品管控清單")
For i = 2 To .Range("J1").End(xlDown).Row
AR = Application.Transpose(Application.Transpose(.Range("A" & i).Resize(, 10)))
'****** 產品(A:J)欄位資料導入陣列 ****
'1:產品欄位週別 ,2'產品欄:更新週別,3:MP date,4:產品類別,5:PRODUCT ID,
'6:CHILDPARTNUMBER,7:CHILD_DESCRIPTION,8:Maker,9:MAKER & CODE.10:ID & PartNumber
d.Add AR, .Range("J" & i) '
'*****找出[產品管控清單]重複的[ID & PartNumber] ****
If Err <> 0 Then
If Rng Is Nothing Then
Set Rng = .Range("J" & i)
Else
Set Rng = Union(.Range("J" & i), Rng)
End If
End If
Err.Clear
'*****************************************************
Next
End With
On Error GoTo 0 '不再處裡程式的錯誤
If Not Rng Is Nothing Then Rng.EntireRow.Delete
With Worksheets("物料管控清單")
.UsedRange.Offset(1).Clear
For i = 1 To d.Count
With .Range("A" & i + 1)
'產品欄位
'1:產品欄位週別 ,2'產品欄:更新週別,3:MP date,4:產品類別,5:PRODUCT ID,
'6:CHILDPARTNUMBER,7:CHILD_DESCRIPTION,8:Maker,9:MAKER & CODE.10:ID & PartNumber
.Range("A1") = d(i)(5) '導入物品欄位A1-M1
.Range("B1") = d(i)(6)
.Range("C1") = d(i)(7)
.Range("D1") = d(i)(8)
.Range("E1") = d(i)(9)
.Range("F1") = d(i)(10)
.Range("G1") = Format(d(i)(3), "YYYY/M/D")
.Range("H1") = d(i)(2)
.Range("I1") = d(i)(1)
.Range("M1") = DateDiff("d", Date, .Range("G1")) '工作日(M)
End With
Next
End With
MsgBox d.Count & "項 OK"
End Sub
複製代碼
作者:
li_hsien
時間:
2014-1-25 22:55
回復
22#
GBKEE
新增修改正常了
感謝版大不厭其煩的熱心幫助 : )
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)