返回列表 上一主題 發帖

[發問] 新增規則問題(或有更好的解決方式)?

[發問] 新增規則問題(或有更好的解決方式)?

第一次發帖,請多擔待~
想請問,範例簡要如下,第一欄屬於料號,第2欄屬於LOT,
規則描述:料號可以有很多不同的LOT,但是同一個LOT只能對應到1個料號,
如果LOT對應到兩個(以上)料號,必須用紅字顯示,
還有VBA如何找到被規則列為紅字的儲存格呢,
我想用VBA直接幫使用者SELECT到該儲存格的位置,
或事件發生時提醒使用者--->一個LOT對應到"多"個料號,
還望高手們不吝解答~
有更好的解決方案更好(上網GOOGLE好像有看到dictionary,
但是目前看不懂=.=)

料號        LOT
A        1
A        2
A        3
B        4
B        5
C        6
C        7
D        8
D        9
D        0
E        1

問題.rar (7.08 KB)

問題.rar (7.07 KB)

本帖最後由 luhpro 於 2021-3-15 23:23 編輯
第一次發帖,請多擔待~
想請問,範例簡要如下,第一欄屬於料號,第2欄屬於LOT,
規則描述:料號可以有很多不同的 ...
luiroger 發表於 2021-3-13 19:18

Dictionary 指令在 "逐個" (比對 或 尋找) "多組" (相同 或 相異) 資料上滿好用的:
  1. Sub nn()
  2.   Dim lRow&
  3.   Dim dLot, dRow
  4.   
  5.   [A1].CurrentRegion.Interior.ColorIndex = -4142 ' 清空底色
  6.   Set dLot = CreateObject("Scripting.Dictionary") ' 定義要儲存 LOT 的字典
  7.   Set dRow = CreateObject("Scripting.Dictionary") ' 定義要儲存 列號 的字典
  8.   lRow = 2 ' 初始列號
  9.   While Cells(lRow, 1) <> "" ' 迴圈至資料最末
  10.     With Cells(lRow, 1) ' 以 A 欄為主體
  11.       If dLot.Exists(.Offset(, 1).Text) Then ' 如果已有相同 LOT 則
  12.         .Font.ColorIndex = 3 ' 本列 A 欄設紅色
  13.         .Offset(-lRow + dRow(.Offset(, 1).Text)).Font.ColorIndex = 3 ' 上次同 LOT 列的 A 欄設紅色
  14.               ' -lRow + dRow(.Text) 是增量計算列號位移技巧: .offset(-現在列號)=[A0], 再加上上次儲存的列號就指向上次同 LOT A欄儲存格
  15.         .Select ' 移動到同 LOT A欄儲存格
  16.       End If
  17.       dLot(.Offset(, 1).Text) = .Text ' 儲存此 LOT 對應的 料號, 以便後續比對是否有相同 LOT 出現
  18.       dRow(.Offset(, 1).Text) = lRow ' 儲存此 LOT 的列號, 以便若比對出相同 LOT 時,可以一併設定紅色
  19.     End With
  20.     lRow = lRow + 1 ' 列號加 1
  21.   Wend
  22. End Sub
複製代碼
問題-ans.zip (13.79 KB)
簡述 :
lRow = 2 時,
dLot("1") 沒資料, 所以 If 內指令不執行, 後面
dLot("1") = "A"
dRow("1") = 2 (底下比照辦理)

直到 lRow = 12 時,
因之前已設定 dLot("1") = "A", 所以 If 內指令會執行:
[B12] 與 [B2] 都設定紅色, 後面
dLot("1") = "E"
dRow("1") = 12 (餘略)

TOP

回復 2# luhpro

您的程式相當巧妙,我得研究一下,
非常感謝您的回覆^O^~

TOP

如果這表參照表, LOT不准重覆,可用
1) 資料驗證
2) 格式條件
Xl0000022.rar (6.43 KB)

TOP

        靜思自在 : 為人處世要小心細心,但不要「小心眼」。
返回列表 上一主題