關於Scripting.Dictionary除了過濾重複值,是否可以同時忽略空值?
- 帖子
- 710
- 主題
- 280
- 精華
- 0
- 積分
- 1016
- 點名
- 0
- 作業系統
- Windows 10
- 軟體版本
- Office 2019
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2011-6-30
- 最後登錄
- 2025-1-19
|
關於Scripting.Dictionary除了過濾重複值,是否可以同時忽略空值?
|
|
|
|
|
|
- 帖子
- 976
- 主題
- 7
- 精華
- 0
- 積分
- 1018
- 點名
- 0
- 作業系統
- Win10
- 軟體版本
- Office 2016
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-4-19
- 最後登錄
- 2025-1-10
|
2#
發表於 2021-10-5 17:03
| 只看該作者
|
|
|
|
|
|
- 帖子
- 710
- 主題
- 280
- 精華
- 0
- 積分
- 1016
- 點名
- 0
- 作業系統
- Windows 10
- 軟體版本
- Office 2019
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2011-6-30
- 最後登錄
- 2025-1-19
|
3#
發表於 2021-10-5 17:45
| 只看該作者
回復 2# samwang
說來慚愧,這段程式碼是由網路複製貼來的,
我努力學習及理解中,謝謝抽空解答。 |
|
|
|
|
|
|
- 帖子
- 710
- 主題
- 280
- 精華
- 0
- 積分
- 1016
- 點名
- 0
- 作業系統
- Windows 10
- 軟體版本
- Office 2019
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2011-6-30
- 最後登錄
- 2025-1-19
|
4#
發表於 2021-10-6 01:20
| 只看該作者
本帖最後由 av8d 於 2021-10-6 01:21 編輯
回復 2# samwang
研究了許久,也透過搜索"Scripting.Dictionary",查看了關於您的範例
但還是無法推敲出結果,還請賜教,
因為空值隨時會被填入資料,所以是否能暫時忽略,
但是當填入時,就會算入。 |
|
|
|
|
|
|
- 帖子
- 976
- 主題
- 7
- 精華
- 0
- 積分
- 1018
- 點名
- 0
- 作業系統
- Win10
- 軟體版本
- Office 2016
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2013-4-19
- 最後登錄
- 2025-1-10
|
5#
發表於 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 |
|
|
|
|
|
|
- 帖子
- 710
- 主題
- 280
- 精華
- 0
- 積分
- 1016
- 點名
- 0
- 作業系統
- Windows 10
- 軟體版本
- Office 2019
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2011-6-30
- 最後登錄
- 2025-1-19
|
6#
發表於 2021-10-6 09:23
| 只看該作者
回復 5# samwang
謝謝前輩,真的是豁然開朗,學習了許多新知識,由衷感謝。 |
|
|
|
|
|
|
- 帖子
- 2025
- 主題
- 13
- 精華
- 0
- 積分
- 2053
- 點名
- 0
- 作業系統
- WIN7
- 軟體版本
- Office2007
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 台北市
- 註冊時間
- 2011-3-2
- 最後登錄
- 2024-3-14
     
|
7#
發表於 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 |
|
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式
|
|
|
|
|
- 帖子
- 710
- 主題
- 280
- 精華
- 0
- 積分
- 1016
- 點名
- 0
- 作業系統
- Windows 10
- 軟體版本
- Office 2019
- 閱讀權限
- 50
- 性別
- 男
- 註冊時間
- 2011-6-30
- 最後登錄
- 2025-1-19
|
8#
發表於 2021-10-15 15:03
| 只看該作者
本帖最後由 av8d 於 2021-10-15 15:05 編輯
回復 7# ML089
使用後發現會保留空值一個,
原來也可以這樣寫,萬分感謝,學習了。 |
|
|
|
|
|
|
- 帖子
- 1447
- 主題
- 40
- 精華
- 0
- 積分
- 1471
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 50
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2025-3-24
|
9#
發表於 2023-6-15 11:35
| 只看該作者
謝謝論壇,謝謝各位前輩
後學藉此帖學習到清單知識與字典的運用,學習方案如下,請各位前輩指教
點選清單結果:
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 |
|
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流
|
|
|
|
|
- 帖子
- 354
- 主題
- 5
- 精華
- 0
- 積分
- 387
- 點名
- 0
- 作業系統
- windows7
- 軟體版本
- vba,vb,excel2007
- 閱讀權限
- 20
- 性別
- 男
- 註冊時間
- 2017-1-8
- 最後登錄
- 2024-8-2
 
|
10#
發表於 2023-7-21 06:03
| 只看該作者
回復 6# av8d
If d.exists("") Then d.Remove "" |
|
|
|
|
|
|