我已经使用CreateObject("Scripting.Dictionary")
创建了一个字典,它将源单词Map到目标单词,以便在某些文本中替换(这实际上是为了混淆)。
不幸的是,当我按照下面的代码进行实际替换时,它会按照源单词添加到字典中的顺序替换源单词。例如,如果我有“Blue”,然后是“Blue Berry”,则“Blue Berry”中的“Blue”部分会被第一个目标替换,而“Berry”保持不变。
'This is where I replace the values
For Each curKey In dctRepl.keys()
largeTxt = Replace(largeTxt, curKey, dctRepl(curKey))
Next
字符串
我想我可以通过首先将字典的键从最长长度到最短长度排序,然后如上所述进行替换来解决这个问题。问题是我不知道如何以这种方式对键进行排序。
6条答案
按热度按时间c9x0cxw01#
看起来好像是我自己弄明白的。我创建了下面的函数,它似乎正在完成这项工作:
字符串
有关静态数组的更多信息,请参见:https://excelmacromastery.com/excel-vba-array/#Declaring_an_Array
zzlelutf2#
我正在寻找一个简单的函数来排序字典升序键值在Microsoft Excel中。
我对neelsg的代码做了一些小的修改以适应我的目的(请参阅下面的
'//
注解以了解修改的详细信息):字符串
jvlzgdj93#
另一种可能性是使用ArrayList对Dictionary键进行排序,然后使用ArrayList值重新创建Dictionary。
字符串
vsdwdz234#
我知道这是一个旧的线程,但它是有帮助的,当我遇到类似的问题。我的解决方案是使用沙箱工作表,让Excel排序键,然后只是重建字典。通过使用沙箱工作表,你可以很容易地使用公式,否则困难的排序情况,而不必编写自己的泡沫排序的键。在原海报的情况下,按Len(Key)降序排序可以解决这个问题。
下面是我的代码:
字符串
pjngdqdw5#
可以通过在过程中添加代码来对键进行排序,而无需创建函数。
字符串
的数据
示例文件源:Get sum of distinct values in Excel
vcudknz36#
或者现在你可以得到一个排序键的数组,并使用它来重新创建字典,或者不重新创建就按顺序遍历字典,方法是:
arrSortedKeys = Application.WorksheetFunction.Sort(Application.WorksheetFunction.Transpose(myDictionary.Keys))