一维字符串数组中的vba抓取最小重复成员

问题描述 投票:0回答:1

我使用以下函数来收集数组列中最常见的成员:

Function MosFreqinsimplearr(ByRef arrin As Variant, colindx As Integer) As Variant
Dim i As Integer

Set dic = CreateObject("scripting.dictionary")
On Error Resume Next

xMax = 0
xOutValue = ""
For i = 1 To UBound(arrin)
    xValue = arrin(i, colindx)
    If xValue <> "" Then
        dic(xValue) = dic(xValue) + 1
        xCount = dic(xValue)
        If xCount > xMax Then
            xMax = xCount
            xOutValue = xValue
        End If
    End If
Next i

MosFreqinsimplearr = xOutValue
Set dic = Nothing
End Function

1-我需要返回最小重复或不太常见的成员的程序。似乎同样的程序不能用于获得这样的结果,因为我试过:

Dim dic As Object
Dim j As Integer
Dim xMin As Integer
Dim xOutValue As String
Dim xValue As String
Dim xCount As Integer
Dim ar(1 To 11) As Variant

ar(1) = "banana"
ar(2) = "banana"
ar(3) = "banana"
ar(4) = "apple"
ar(5) = "apple"
ar(6) = "banana"
ar(7) = "cucumber"
ar(8) = "cucumber"
ar(9) = "cucumber"
ar(10) = "apple"
ar(11) = "cucumber"

Set dic = CreateObject("scripting.dictionary")
'On Error Resume Next
xMin = 0
xOutValue = ""
For j = 1 To UBound(ar)
    xValue = ar(j)
    If xValue <> "" Then
        dic(xValue) = dic(xValue) + 1
        xCount = dic(xValue)
        If xCount <= xMin Then
            xMin = xCount
            xOutValue = xValue
            Else: xOutValue = xValue
        End If

    End If
Next j
MsgBox "less repeated value is:" & vbTab & xOutValue
Set dic = Nothing

2-计算每个唯一值的数量的代码是什么:

banana=4
cucumber=4
apple=3

问候;

arrays vba count enumeration mode
1个回答
0
投票

您需要迭代字典的键并比较值。

Dim key As Variant, minKey As Variant

For Each key In dic
    If IsEmpty(minKey) Then
        minKey = key
    Else
        If dic(key) < dic(minKey) Then minKey = key
    End If
Next
© www.soinside.com 2019 - 2024. All rights reserved.