获取作为过滤器结果的列的最通用值(字符串)? VBA

时间:2019-07-20 04:15:45

标签: excel vba

我找到了一个有关通过以下链接使用VBA获取列的最通用值(字符串)的答案,但我不明白为什么必须转置.Items。

is it possible to get the most common value (String) of a column that is the result of a filter? VBA

oMax = Application.Max(Application.Transpose(.Items))

谁能解释原因?

我尝试将水平代码(7列2行)和垂直代码(2列7行)用于上面的代码,但没有转置功能,但仍然可以使用。

完整的代码如下:

Public Function ModeSubTotal(rng As Range) As String
Dim Dn As Range
Dim oMax As Double
Dim K As Variant
Dim val As String

With CreateObject("scripting.dictionary")
     .CompareMode = vbTextCompare
        For Each Dn In rng
           If Dn.Rows.Hidden = False Then
            If Not .Exists(Dn.Value) Then
                .Add Dn.Value, 1
            Else
                .Item(Dn.Value) = .Item(Dn.Value) + 1
            End If
        End If
    Next
oMax = Application.Max(Application.Transpose(.Items))
For Each K In .keys
  If .Item(K) = oMax Then
      val = val & K & ","
  End If
Next K


 ModeSubTotal = Left(val, Len(val) - 1)
End With
End Function

1 个答案:

答案 0 :(得分:0)

Application.Max 函数适用于一维二维阵列

  

我不明白为什么我们必须转置.Items。

都不;转置仅将“ flat” 1维.Items数组转换为基于1的2维数组。 Application.Max()可以在两个维度上使用,而无论可能的内部搜索方向如何,都不会更改结果:-)

可能的背景:

在许多情况下,执行一次数据行的两次转置会先获得转置的2维数组,然后在下一步中最终获取“平面”和1维数组,因为许多函数只能在一个1维数组。也许上面的代码对此感到困惑。