我正在为VBA中的数组寻找合适的排序实现.Quicksort将是首选.或任何其他排序算法除了冒泡或合并之外的就足够了.
请注意,这是为了与MS Project 2003一起使用,因此应避免使用任何Excel本机函数和任何.net相关的函数.
在我向VBA集合添加一些值之后,有没有办法保留所有键的列表?
例如
Dim coll as new Collection
Dim str1, str2, str3
str1="first string"
str2="second string"
str3="third string"
coll.add str1, "first key"
coll.add str2, "second key"
coll.add str3, "third key"
Run Code Online (Sandbox Code Playgroud)
我知道如何保留字符串列表:
first string
second string
third string
Run Code Online (Sandbox Code Playgroud)
再一次:有没有办法保留钥匙?
first key
second key
third key
Run Code Online (Sandbox Code Playgroud)
注意:我正在通过AutoCAD 2007使用VBA
对于给定的单元格,我选择数据/验证并将允许设置为"列表".我现在希望像这样设置Source:
= rNames(REGS)
但这不起作用(找不到名字).所以我去插入/名称/定义并通过简单地指定上面的公式创建"REGNAMES"(没有单元格范围).然后我返回数据/验证,当我像这样设置Source时:
= REGNAMES
现在我得到"Source当前评估为错误".不幸的是,即使忽略它,这个错误也不会消失.我可以在表格中创建一个范围公式,如下所示:
{= REGNAMES}
并将其拖到几个单元格的右侧,并忠实地返回rNames函数
选项#1 | 选项#2 | ...
也就是说,该函数返回预期的范围.
我知道我可以使用宏代码来操作VBA中该单元格的List设置.我不太喜欢这些副作用.我更喜欢一个基于函数的干净依赖树.任何想法如何让数据/验证接受从rNames返回的数组值?
谢谢.
PS:rNames将结果范围作为Variant返回,如果有任何影响的话.
我目前会使用Range,Cells等许多不同方式使用相同的基本原理.
Range("A1", Range("A1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("IV1"), Unique:=True
Dim myArr as Variant
myArr = Range("IV1", Range("IV1").End(xlDown))
Columns("IV").Delete
Run Code Online (Sandbox Code Playgroud)
有没有办法直接将这些唯一值加载到VBA中的任何类型的对象而无需复制到另一个位置?
冒着成为话题的风险,我决定分享一些问答式的代码。如果一般意见认为这将是题外话,我很乐意在需要时删除。
背景
我们可以从任何一维数组或Range变成一维数组的对象中检索所有唯一值,而不必遍历其元素吗?就我而言,普遍的共识是必须迭代不同的元素,最好的方法是使用字典或集合来存储唯一值。这是我发现非常有效的方法为了这个目的。
题
那么如何从一维数组中检索唯一元素,例如:
Dim arr As Variant: arr = Array("A", "A", "C", "D", "A", "E", "G")
Run Code Online (Sandbox Code Playgroud)
结果数组在哪里:
{"A", "C", "D", "E", "G"}
Run Code Online (Sandbox Code Playgroud) 我在MS Excel 2010的一列中有大约80,000封电子邮件.
其中一些是重复的,我需要找到并拉出那些重复.我希望将重复项放在单独的文档中.
现在我可以找到它们并使用内置于Excel中的条件格式功能(主页选项卡>条件格式>突出显示单元格规则>重复值)以红色突出显示它们,但实际上只是突出显示它们.
还有删除重复项,显然只删除它们; 不是我想要的.
有什么建议?
vba ×5
excel ×4
arrays ×3
excel-vba ×2
unique ×2
collections ×1
excel-2010 ×1
filter ×1
ms-project ×1
sorting ×1
vb6 ×1