返回列表 上一主題 發帖

[發問] 改善大筆資料處理

回復 2# GBKEE

謝謝大大的幫忙

可是我發現還是沒有刪除掉耶

產品沒有的,物料那邊還是有出現

我是在產品中間隨便刪一筆測試的


那大大的重複提示

我用2007內建的移除重複測試

發現還是多刪了,可是筆數不多

我要留有重複的第一筆
EX:
A,B,C,A,A,B,C,D
我要留A,B,C,D

不知大大是不是把重複的都刪了


麻煩幫我看看  感謝  :  )
用功到世界末日那一天∼∼∼

TOP

回復 2# GBKEE

板大我發現了一點問題

我如果在產品那邊刪掉一筆

在物料那並沒有刪除掉

新增加的話還OK


最後板大幫我設置的刪除提示

為什麼刪掉後只剩下4.5筆呀???


我用2007的移除重複,並沒有這麼多重複

不知問題出在哪裡???



麻煩幫我看看

謝謝  :  )
用功到世界末日那一天∼∼∼

TOP

本帖最後由 GBKEE 於 2014-1-22 14:52 編輯

回復 1# li_hsien

改用 Collection 物件 不用 Dictionary 物件
  1. Option Explicit
  2. Sub Ex()
  3.     Dim d As New Collection, AR(1 To 7), i As Integer, Rng(1 To 2) As Range, E As Variant
  4.     On Error Resume Next              '註解1 :Collection新增的KEY如被使用或有錯誤
  5.     With Worksheets("產品管控清單")
  6.         For i = 2 To .Range("J1").End(xlDown).Row
  7.             AR(1) = .Range("E" & i)             'PRODUCT ID(A)
  8.             AR(2) = .Range("F" & i)             'CHILDPARTNUMBER(B)
  9.             AR(3) = .Range("C" & i)             'MP date(G)
  10.             AR(4) = .Range("A" & i)             '週別(H)
  11.             AR(5) = .Range("B" & i)             '更新週別(I)
  12.             AR(6) = DateDiff("d", Date, AR(3))  '工作日(M)
  13.             AR(7) = .Range("J" & i)             'Product ID & PartNumber
  14.             d.Add AR, .Range("J" & i).Value     '紀錄產品的ID & PartNumber
  15.             
  16.             '**** 所以是以"產品"擁有的為主,不過產出"物料"之前得先刪除"產品"重複的部分->Rng(1)
  17.             '**** 當產品的ID & PartNumber(F)有重複時有->註解1: Err <> 0
  18.             If Err <> 0 Then
  19.                 Err.Clear
  20.                 If Rng(1) Is Nothing Then       'Rng(1)->紀錄有重複產品的ID & PartNumber
  21.                     Set Rng(1) = .Range("J" & i)
  22.                 Else
  23.                     Set Rng(1) = Union(.Range("J" & i), Rng(1))
  24.                 End If
  25.             End If
  26.         Next
  27.     End With
  28.     With Worksheets("物料管控清單")
  29.         For Each E In .Range("F:F").SpecialCells(xlCellTypeConstants).Offset(1)
  30.             .Range("A" & E.Row) = d(E.Value)(1)
  31.             .Range("B" & E.Row) = d(E.Value)(2)
  32.             .Range("G" & E.Row) = d(E.Value)(3)
  33.             .Range("H" & E.Row) = d(E.Value)(4)
  34.             .Range("I" & E.Row) = d(E.Value)(5)
  35.             .Range("M" & E.Row) = d(E.Value)(6)
  36.             .Range("F" & E.Row) = d(E.Value)(7)
  37.             
  38.             '**** "產品"有 "物料"有  則把 "產品" 的資料COPY到 "物料" 原本的位子上
  39.             '**** 產品"有 "物料"有 -> Err = 0
  40.             If Err = 0 Then                     '物料的ID & PartNumber,存在產品的ID & PartNumber中
  41.                 d.Remove E.Value                '除去:產品的ID & PartNumber
  42.             '**** 有第二筆已除去的產品ID & PartNumber-> 已除去(沒有這KEY值): Err <> 0
  43.             ElseIf Err <> 0 And E <> "" Then
  44.             '**** "產品"沒有 "物料"有 則把"物料"整欄刪除掉 -> Rng(2)
  45.                 If Rng(2) Is Nothing Then       '取的儲存格的位置
  46.                     Set Rng(2) = E
  47.                 Else
  48.                     Set Rng(2) = Union(E, Rng(2))
  49.                 End If
  50.             End If
  51.             Err.Clear
  52.         Next
  53.         If d.Count > 0 Then
  54.             
  55.             'C ***產品"有 "物料"沒有 則把新增多出來的增加到 "物料" 最下面
  56.             i = 0
  57.             With .Range("A1").End(xlDown)
  58.                 For Each E In d
  59.                     i = i + 1
  60.                     .Offset(i).Range("A1") = E(1)
  61.                     .Offset(i).Range("B1") = E(2)
  62.                     .Offset(i).Range("G1") = E(3)
  63.                     .Offset(i).Range("H1") = E(4)
  64.                     .Offset(i).Range("I1") = E(5)
  65.                     .Offset(i).Range("M1") = E(6)
  66.                     .Offset(i).Range("F1") = E(7)
  67.                 Next
  68.             End With
  69.         End If
  70.     End With
  71.     If Not Rng(1) Is Nothing Then
  72.     '**** 刪除"產品"重複的部分->Rng(1)
  73.         If MsgBox("刪除重複的[ID & PartNumber]", vbQuestion + vbYesNo, "產品管控清單") = vbYes Then
  74.             Rng(1).EntireRow.Delete
  75.         End If
  76.     End If
  77.    
  78.     If Not Rng(2) Is Nothing Then
  79.         '**** "產品"沒有 "物料"有 則把"物料"整欄刪除掉 -> Rng(2)
  80.         If MsgBox("刪除重複的[ID & PartNumber]", vbQuestion + vbYesNo, "物料管控清單") = vbYes Then
  81.            Rng(2).EntireRow.Delete
  82.         End If
  83.     End If
  84.     MsgBox "Ok"
  85. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 忘功不忘過,忘怨不忘恩。
返回列表 上一主題