返回列表 上一主題 發帖

[字典物件]單一欄位的值與多個陣列比對後並分類至不同欄位

本帖最後由 准提部林 於 2016-10-20 16:43 編輯
  1. Sub U_Test()
  2. Dim xR As Range, xD, Arr, Brr, Mx&, N%, G(1 To 4), DK
  3. Arr = Range([A2], Cells(Rows.Count, 1).End(xlUp))
  4. Set xD = CreateObject("Scripting.Dictionary")
  5. For Each xR In [J2:L40]
  6.     If xR <> "" Then xD(UCase(xR)) = xR.Column - 9 '關鍵字依其欄位帶序號
  7. Next
  8. ReDim Brr(1 To UBound(Arr), 1 To 4)

  9. For i = 1 To UBound(Arr)
  10.     N = 4 '預設序號為4
  11.     For Each DK In xD.keys
  12.         If InStr(UCase(Arr(i, 1)), DK) Then N = xD(DK): Exit For '有符合,取出序號
  13.     Next
  14.     G(N) = G(N) + 1 '依序號不同, 各自累計欄位的筆數
  15.     If G(N) > Mx Then Mx = G(N) '取得最大筆數
  16.     Brr(G(N), N) = Arr(i, 1) '按序號及筆數填入資料到陣列
  17. Next i
  18. [B2].Resize(Mx, 4) = Brr
  19. End Sub
複製代碼


InStr 會區分英文大小寫, 必須使用 UCase 統一轉為大寫(LCase也可)

TOP

回復 8# greetingsfromtw


1.能贊助即可貴,這也幫助他人可以在此獲得知識
2.4樓超板的方法也許較符實情(以篩選而言),同一文字包含兩個關鍵字時,則兩次分別取出,
  可測試範例檔的兩個程式去比較
3.另提供一個方便針對選取單一關鍵字的篩選法

20161020_比對單行資料與多個陣列v01.rar (14.18 KB)
 
 

TOP

本帖最後由 准提部林 於 2016-10-21 19:53 編輯

回復 10# greetingsfromtw


那是工作表〔事件〕觸發程式,按Alt + F11,對工作表物件按兩下

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim xR As Range
With Target
  If Intersect([J2:L8], .Cells) Is Nothing Then Exit Sub
  If .Value = "" Then Exit Sub
  Cancel = True
  For Each xR In Range([A2], Cells(Rows.Count, 1).End(xlUp))
    If InStr(UCase(xR), UCase(.Value)) > 0 Then
     Cells(Rows.Count, "G").End(xlUp)(2) = xR
    End If
  Next
End With
End Sub

TOP

        靜思自在 : 人要自愛,才能愛普天下的人。
返回列表 上一主題