[算表] vba dictionary 遇到空值如何跳過
軟體:excel
版本:2016
hi,小弟前兩天有發問如何用access 顯示重複次數,用來管理歌曲清單的(兩萬多筆)
當初是因為excel 函數(count if) 計算太吃資源,爬文可以用access 來處理
現在又覺得access 不是很直覺,因為不太會用...
反正現在試出一個方法就是用vba來檢查是否重複(如圖),跑起來也是很快速
https://imgur.com/EBq3gWS.png

現在一個問題就是,我的語法裡面,如果遇到空白的值,也會返回 "重複" 結果
程式碼如下,不知道該怎麼修改...
Sub 按鈕5_Click()
Dim Arr, xD, i&, T$, U&, TM
TM = Timer
Set xD = CreateObject("Scripting.Dictionary")
Arr = Range([K2], Cells(Rows.Count, 11).End(3))
For i = 1 To UBound(Arr)
T = Arr(i, 1): U = xD(T): Arr(i, 1) = ""
If U > 0 Then Arr(U, 1) = "重覆": xD(T) = -1: U = -1
If U < 0 Then Arr(i, 1) = "重覆"
If U = 0 Then xD(T) = i
Next i
[I2].Resize(UBound(Arr)) = Arr
MsgBox Timer - TM
End Sub
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.221.186.225
※ 文章網址: https://www.ptt.cc/bbs/Office/M.1550742493.A.882.html
→
02/21 18:14,
7年前
, 1F
02/21 18:14, 1F
→
02/21 18:53,
7年前
, 2F
02/21 18:53, 2F
謝謝soyoso大神幫忙解決,我現在才發現我昨天寫錯了..但空白值這測試應該沒問題
現在想重新發問...圖片中有詳細說明...感謝您的幫忙...
https://i.imgur.com/QEtFrAx.png

程式碼一樣是上面那個下去改應該就可以了吧?
※ 編輯: sworder12 (114.221.186.225), 02/22/2019 19:40:37
※ 編輯: sworder12 (114.221.186.225), 02/22/2019 19:42:28
→
02/22 21:25,
7年前
, 3F
02/22 21:25, 3F
→
02/22 21:26,
7年前
, 4F
02/22 21:26, 4F
→
02/22 21:26,
7年前
, 5F
02/22 21:26, 5F
→
02/22 21:27,
7年前
, 6F
02/22 21:27, 6F
→
02/22 21:28,
7年前
, 7F
02/22 21:28, 7F
→
02/22 21:41,
7年前
, 8F
02/22 21:41, 8F
→
02/22 21:41,
7年前
, 9F
02/22 21:41, 9F
小弟資質駑頓...試了幾次和爬文找解釋還是寫不出來...
目前寫到這樣...感覺卡在K欄迴圈不懂怎麼寫入...
Sub 按鈕5_Click()
Dim Arr, xD, i&, T$, U&, TM
Dim Arr, Brr, xD, i&, T$, U&, TM
TM = Timer
Set xD = CreateObject("Scripting.Dictionary")
Arr = Range([A2], Cells(Rows.Count, 1).End(3)) '改為a2至a欄下方最後一個有值的儲存格
Brr = Range([K2], Cells(Rows.Count, 11).End(3))
'加上迴圈於k欄,將有資料的值先加入於變數xD內,值指定為0;該迴圈寫於原本for...next的上方
----這邊寫不出來----
For i = 1 To UBound(Arr)
T = Arr(i, 1): Arr(i, 1) = ""
if xD.exists(T) then U = xD(T)
If U > 0 Then Arr(U, 1) = "重覆": xD(T) = -1: U = -1
If U < 0 Then Arr(i, 1) = "重覆"
If U = 0 Then xD(T) = i And T <> ""
end if
Next i
[I2].Resize(UBound(Arr)) = Arr
MsgBox Timer - TM
End Sub
※ 編輯: sworder12 (114.221.186.225), 02/22/2019 23:37:54
※ 編輯: sworder12 (114.221.186.225), 02/22/2019 23:38:45
→
02/23 07:21,
7年前
, 10F
02/23 07:21, 10F
→
02/23 07:21,
7年前
, 11F
02/23 07:21, 11F
→
02/23 07:22,
7年前
, 12F
02/23 07:22, 12F
→
02/23 07:22,
7年前
, 13F
02/23 07:22, 13F
→
02/23 07:23,
7年前
, 14F
02/23 07:23, 14F
→
02/23 07:23,
7年前
, 15F
02/23 07:23, 15F
→
02/23 07:25,
7年前
, 16F
02/23 07:25, 16F
→
02/23 07:26,
7年前
, 17F
02/23 07:26, 17F
→
02/23 07:27,
7年前
, 18F
02/23 07:27, 18F
→
02/23 07:28,
7年前
, 19F
02/23 07:28, 19F
→
02/23 07:31,
7年前
, 20F
02/23 07:31, 20F
→
02/23 07:32,
7年前
, 21F
02/23 07:32, 21F
→
02/23 07:34,
7年前
, 22F
02/23 07:34, 22F
感謝大神幫忙,測試可用!!
最終程式碼如下在此貼上,有需求的人可以看看,最後再次感謝大神幫忙!
Sub 按鈕5_Click()
Dim Arr, Brr, xD, i&, T$, U&, TM
TM = Timer
Set xD = CreateObject("Scripting.Dictionary")
Arr = Range([A2], Cells(Rows.Count, 1).End(3))
Brr = Range([K2], Cells(Rows.Count, 11).End(3))
For i = 1 To UBound(Brr)
T = Brr(i, 1)
If T <> "" Then xD(T) = 0
Next i
For i = 1 To UBound(Arr)
T = Arr(i, 1): Arr(i, 1) = ""
If xD.exists(T) Then
U = xD(T)
If U > 0 Then Arr(U, 1) = "重覆": xD(T) = -1: U = -1
If U < 0 Then Arr(i, 1) = "重覆"
If U = 0 And T <> "" Then xD(T) = i
End If
Next i
[I2].Resize(UBound(Arr)) = Arr
MsgBox Timer - TM
End Sub
※ 編輯: sworder12 (117.60.68.75), 02/23/2019 09:02:43
Office 近期熱門文章
PTT數位生活區 即時熱門文章