【问题标题】:Finding top 2 maximum value betweens alpha numeric in excel vba在excel vba中查找字母数字之间的前2个最大值
【发布时间】:2021-04-15 15:33:31
【问题描述】:

需要找到字母数字之间的前 2 个最大值。数据如下所示 "2FB","4CB","0FW","4CW"

这里的输出会是:4CB,4CW。

字母总是一样的。只有数字会改变。上面的数据是一个函数的输出,我将它存储在 4 个字符串变量中。

非常感谢任何帮助。

之前我将输出保存在每个 excel 行中,并使用下面的 vba 代码来检索最大值。但它没有按预期工作,因为我现在需要前 2 个值

Evaluate("IF(MAX(COUNTIF(" & rng.Address & "," & rng.Address & "))>2,INDEX(" & rng.Address & ",MATCH(MAX(COUNTIF(" & rng.Address & "," & rng.Address & ")),COUNTIF(" & rng.Address & "," & rng.Address & "),0)),0)")

【问题讨论】:

  • 之前我已经将输出保存在每个 excel 行中,并使用下面的 vba 代码来检索最大值.. 但它没有按预期工作,因为我现在需要前 2 个值 Evaluate("IF (MAX(COUNTIF(" & rng.Address & "," & rng.Address & "))>2,INDEX(" & rng.Address & ",MATCH(MAX(COUNTIF(" & rng.Address & ", & rng.Address & ")),COUNTIF(" & rng.Address & "," & rng.Address & "),0)),0)")
  • 在 rng 中我存储了 2,4,0,4 的值。它有时也会得到 0 作为输出.. 因为我是 vba 的新手,所以需要检查任何其他替代方案
  • “最大值”是什么意思?字母在“最大”部分中扮演什么角色?你的意思是“4A”>“4B”(考虑字母顺序?)还是它们被认为是相同的(只检查数字部分)?
  • 是的,只有数字部分
  • yes only numeric part – bvsnkiran 1 hour ago:那么您的问题需要一种非常不同类型的方法。如果您的列表中有2FB,4CB,0FW,4CW,4AB,那么您想要4CB,4CW,4AB 中的哪两个?在决定这两个时应遵循什么逻辑?

标签: excel vba


【解决方案1】:

如何使用 ArrayList 对象:

Sub Test()

'Initialize your input:
Dim arr(): arr = Array("2FB", "4CB", "0FW", "4CW")

'Create the arraylist object:
With CreateObject("System.Collections.ArrayList")
    
    'Loop over your array to load arraylist:
    For Each el In arr
        .Add el
    Next
    
    'Sort our array ascending and reverse the outcome:
    .Sort
    .Reverse
    
    'Demo lines, we allready got our two largest values:
    Debug.Print .Item(0)
    Debug.Print .Item(1)
    
    'Slice away redundant items and report back in array:
    .RemoveRange 2, .Count - 2
    arr = .ToArray
      
End With

End Sub

【讨论】:

  • 值是动态的,可以返回结果
  • 非常感谢 :) 让我试试,我会回复你 JvdV
  • 嗨@JvdV,你的函数正在工作..但事情是因为它被多次调用(比如每2分钟100次)整体性能正在下降..你能建议任何改变吗代码..
  • @bvsnkiran。最好是用你的问题提出一个新问题,一个好的描述和你解决它的尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 2018-03-05
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多