vba - VBA中的快速排序不忽略字母的大小写

标签 vba quicksort

我正在寻找一种在 VBA 中对数组进行排序的方法,并发现了这个 topic

但是,此函数在小写字母和大写字母之间也有所不同。

通常“also”这个词出现在“apple”之前,但是当我将这个快速排序与“also”和“APPLE”一起使用时,突然“APPLE”出现在前面。

这正常吗?如果是,有办法忽略字母的大小写吗?

感谢您的帮助。

最佳答案

尝试添加Option Compare Text在 QuickSort 类/模块的顶部。 (这应该是所有代码顶部的第一行(或 Option Explicit 之后的第二行)。)

原因当然是因为“A”和“a”的 ASCII 值不同,如在立即窗口中执行以下操作即可证明:

? Asc("A")
 65 

? Asc("a")
 97 

您会看到“A”位于“a”之前。

现在,在引用的 QuickSort 中,您会看到他们正在使用推理比较,使用 ><类型比较器。这使用了 Ascii 值的严格比较(见上图)。 Option Compare Text将强制 VBA 考虑“a”=“A”。

在添加 Option Compare Text 之前尝试以下代码一次,以及之后一次。

Public Sub test()
    Debug.Print "also" < "APPLE"
End Sub

或者,您可以将快速排序修改为不区分大小写。您必须使用 < 替换所有隐式比较器(例如 >=StrComp )功能--务必包括vbTextCompare作为第三个参数。

例如:

pivot < vArray(tmpHi)

...将替换为:

StrComp(pivot, vArray(tmpHi), vbTextCompare) < 0

StrComp 做一些实验功能。一开始它可能看起来很奇怪,但它功能强大,并且(我相信)比正常的 VBA 字符串比较更快。

关于vba - VBA中的快速排序不忽略字母的大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32204550/

相关文章:

vba - 将多张工作表中的行复制到一张工作表中

excel - Excel的 'Dependency-Chain'是增加还是减少?

algorithm - 将迭代算法转换为递归算法的问题

c++ - 在 VC++ 2010 中将数组作为参数传递时出现编译器错误

java - 使用快速选择算法在未排序的数组中查找中位数

excel - 在IE窗口中填写表单: Press buttons and fill in text boxes

excel - 在单独的 Google Chrome 浏览器窗口中打开多个 URL

c++ - STL 排序进入无限循环?

java - Java 数组快速排序中的堆栈溢出

types - 我的快速排序不适用于负数 (Common Lisp)