Board logo

標題: [發問] 請教vba這段程式的意思 [打印本頁]

作者: alsr    時間: 2018-8-22 17:07     標題: 請教vba這段程式的意思

Dear Sirs

想請教各位,我之前在知乎看到vba撰寫function
結果如下
[attach]29253[/attach][attach]29254[/attach]
https://zhuanlan.zhihu.com/p/41740899

它的程式如下,順便將我的解讀撰寫如下

Function 提取重覆(rg1 As Range, rg2 As Range)
Dim arr1, arr2   
arr1 = Split(rg1, ",")  '將長串數據1,按逗號拆分成一組數據
arr2 = Split(rg2, ",")  '將長串數據2,按逗號拆分成一組數據   
a = ""
For h = 0 To UBound(arr1)           '逐個比對兩組數字  
For i = 0 To UBound(arr2)  
If arr1(h) = arr2(i) Then    a = a & arr2(i) & ","  '將兩組數據相同的部分留下,以","分隔相同數據,組成一連串字串
End If
Next
Next

Dim arr, d As Object    '剔除结果中的重覆值
Set d = CreateObject("scripting.dictionary") '將d設為一個字典
arr = Split(Mid(a, 1, Len(a) - 1), ",")  '將長串數據a,按逗號拆分成一組數據,順便將a字串最後一個逗號消除。

For i = 0 To UBound(arr)
d(arr(i)) = "" '不知道為什麼要將d(arr(i))設為空白
Next i
提取重复 = Join(d.keys, ",") '為什麼會用d.keys,看不懂
End Function

再麻煩各位大德,想不通,也查不太到資料,謝謝您。
作者: GBKEE    時間: 2018-8-23 09:17

回復 1# alsr
VBA 的說明
Dictionary 物件
物件,用於儲存資料關鍵字和項目對。
請注意
Dictionary 物件與 PERL 相關陣列全等。可以是任何型式的資料的項目被儲存在陣列中。每個項目都與一個唯一的關鍵字相關。該關鍵字用來取出單個項目,通常是整數或字串,可以是除陣列外的任何型態。

Split 函數
傳回一個陳列索引從零開始的一維陣列,它包含指定數目的子字串。
  1. Option Explicit
  2. Sub Ex()
  3.     Dim D As Object, KEY As Variant
  4.     Set D = CreateObject("SCRIPTING.DICTIONARY")  '字典物件
  5.     D("ABC") = "ISABC"    'ABC 是字典物件的KEY (關鍵字) 'ISABC 是字典物件的ITEM
  6.     D("BCD") = ""
  7.     [a1] = "Excel_VBA"
  8.     Set D("CDE") = [a1]
  9.     MsgBox Join(D.KEYS, ",")
  10.     MsgBox Join(D.ITEMS, ",")
  11.     For Each KEY In D.KEYS
  12.         Debug.Print KEY
  13.     Next
  14.     For Each KEY In D.ITEMS
  15.         Debug.Print KEY
  16.     Next
  17. End Sub
複製代碼

作者: alsr    時間: 2018-8-24 16:31

謝謝您,我再確認看看。
作者: alsr    時間: 2018-9-4 15:05

再請教一下,在dictionary中,所有的"key"皆為單一性,不能重覆嗎,謝謝您。
作者: a5007185    時間: 2018-9-4 16:22

回復 4# alsr

對,不能重複。
作者: alsr    時間: 2018-9-5 08:37

回復 5# a5007185

感謝您。




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