萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 辦公室軟體 >  >> Excel 教學 >> Excel 綜合

Excel 自訂函數 MergerRepeat:提取不重複值的通用方案

函數功能

從多個儲存格區域或陣列常數中提取不重複值集合,支援索引取值與計數。

VBA 程式碼

Function MergerRepeat(Index As Integer, ParamArray arglist() As Variant)
    ' 時間:2008-12-26
    ' 功能:取得指定區域或陣列的不重複集合或單一值
    ' 參數:Index < 1 回傳集合;1~Count 回傳第 N 個不重複值;>Count 回傳空值
    '       arglist:可為 Range 物件或陣列常數
    Dim NotRepeat As Object, tStr As String
    Set NotRepeat = CreateObject("Scripting.Dictionary")
    For Each arg In arglist
        For Each rRan In arg
            If TypeName(rRan) = "Range" Then
                If rRan.Value <> "" Then NotRepeat(rRan.Value) = 0
            Else
                NotRepeat(rRan) = 0
            End If
        Next
    Next
    If Index < 1 Then
        MergerRepeat = NotRepeat.keys
    ElseIf Index <= NotRepeat.Count Then
        Dim arr: arr = NotRepeat.keys
        MergerRepeat = arr(Index - 1)
    Else
        MergerRepeat = ""
    End If
End Function

三大應用範例

  1. 計算不重複值個數: =COUNTA(MergerRepeat(0, A1:A10))
  2. 列出不重複值(B 欄向下): B1 輸入 =MergerRepeat(ROW(), $A$1:$A$10) 向下填充。
  3. 多區域+陣列常數合併去重計數: =COUNTA(MergerRepeat(0, A1:A6, {"abc","Excel吧",1,"excelba.com"}, C2:C6))

技術細節

  • 採用 Scripting.Dictionary 物件天然去重特性(Key 唯一)。
  • ParamArray 允許傳入不定數量參數(區域、常數混合)。
  • 忽略空白儲存格(rRan.Value <> "")。
  • 需儲存為 .xlsm 並啟用巨集。
copyright © 萬盛學電腦網 all rights reserved