Board logo

標題: 關於Scripting.Dictionary除了過濾重複值,是否可以同時忽略空值? [打印本頁]

作者: av8d    時間: 2021-10-5 16:09     標題: 關於Scripting.Dictionary除了過濾重複值,是否可以同時忽略空值?

[attach]34143[/attach]

正常時會過濾重複
[attach]34147[/attach]

當出現空值時則異常
[attach]34145[/attach]
[attach]34146[/attach]

還是說不適合使用Scripting.Dictionary?
作者: samwang    時間: 2021-10-5 17:03

回復 1# av8d

建議空白可以直接排除,謝謝
作者: av8d    時間: 2021-10-5 17:45

回復 2# samwang


    說來慚愧,這段程式碼是由網路複製貼來的,
    我努力學習及理解中,謝謝抽空解答。
作者: av8d    時間: 2021-10-6 01:20

本帖最後由 av8d 於 2021-10-6 01:21 編輯

回復 2# samwang

研究了許久,也透過搜索"Scripting.Dictionary",查看了關於您的範例
但還是無法推敲出結果,還請賜教,

因為空值隨時會被填入資料,所以是否能暫時忽略,
但是當填入時,就會算入。
作者: samwang    時間: 2021-10-6 07:37

回復 4# av8d

因為空值隨時會被填入資料,所以是否能暫時忽略,
但是當填入時,就會算入。
>>更改如下,謝謝
For Each A In .Range("B4", .[B65536].End(xlUp))
            If A.Value = "" Then GoTo 99
            d(A.Value) = ""
  '只取B欄不重複值
            'd(A.Value) = IIf(d(A.Value) = "", A.Offset(, 1).Value, d(A.Value) & "," & A.Offset(, 1))
99:     Next

作者: av8d    時間: 2021-10-6 09:23

回復 5# samwang

  謝謝前輩,真的是豁然開朗,學習了許多新知識,由衷感謝。
作者: ML089    時間: 2021-10-6 10:27

For Each A In .Range("B4", .[B99].End(xlUp))
            'd(A.Value) = IIf(d(A.Value) = "", A.Offset(, 1).Value, d(A.Value) & "," & A.Offset(, 1))
            If A.Value <> "" Then d(A.Value) = "" '排除空值
Next
作者: av8d    時間: 2021-10-15 15:03

本帖最後由 av8d 於 2021-10-15 15:05 編輯

回復 7# ML089

使用後發現會保留空值一個,
原來也可以這樣寫,萬分感謝,學習了。
作者: Andy2483    時間: 2023-6-15 11:35

謝謝論壇,謝謝各位前輩
後學藉此帖學習到清單知識與字典的運用,學習方案如下,請各位前輩指教

點選清單結果:
[attach]36590[/attach]


Option Explicit
Private Sub ComboBox1_Change()
Dim A As Range, d As Object
Set d = CreateObject("Scripting.Dictionary")
With Sheets("我的知識庫")
   For Each A In .Range("B4", .[B65536].End(xlUp)).SpecialCells(2)
      d(A.Value) = ""
   Next
   ComboBox1.List = d.keys
End With
End Sub

Private Sub ComboBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    '觸發ComboBox1_Change
    ComboBox1.Value = "."
    ComboBox1.Value = ""
End Sub
作者: singo1232001    時間: 2023-7-21 06:03

回復 6# av8d


    If d.exists("") Then d.Remove ""




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