【问题标题】:VBA Sort AlphaNumericVBA 排序字母数字
【发布时间】:2014-04-26 02:03:47
【问题描述】:

我在 VBA 中有一个函数,它应该基于“冒泡排序”对文本进行排序。如果文本只是文本,那很好,但我的文本实际上是一个字母数字字符串。我试图重写它以解释数字部分,但仍然有问题,我似乎无法弄清楚是什么。请帮忙!!

Dim alphaCurr As String
Dim alphaNext As String
Dim rowCurr As FsChartRow
Dim rowNext As FsChartRow
Dim c As Integer
Dim n As Integer
Dim vTemp As Variant

For c = 1 To rows.count - 1
    Set rowCurr = rows(c)
    alphaCurr = GetAlpha(rowCurr.label)
    For n = c + 1 To rows.count
        Set rowNext = rows(n)
        alphaNext = GetAlpha(rowNext.label)

        If alphaCurr > alphaNext Then
            Set vTemp = rows(n)
            rows.Remove n
            rows.Add vTemp, , c
        End If

    Next n
Next c

Dim numCurr As Integer
Dim numNext As Integer
Dim loopCount As Integer

    For c = 1 To rows.count - 1
        Set rowCurr = rows(c)
        alphaCurr = GetAlpha(rowCurr.label)
        numCurr = GetNumeric(rowCurr.label)
        For n = c + 1 To rows.count
            Set rowNext = rows(n)
            alphaNext = GetAlpha(rowNext.label)
            numNext = GetNumeric(rowNext.label)

            If alphaCurr = alphaNext Then
                If numCurr > numNext Then
                    Set vTemp = rows(n)
                    rows.Remove n
                    rows.Add vTemp, , c
                End If
            End If

        Next n
    Next c

我得到的结果如下:

“BK1” “BK2” “FB1” “FB4” “FB3” “FB5” “FB6” “FB2” “FJ2” “FJ1” “FJ3” “FJ4” “……” “FJ15” “RB1” “H1” “H2”

感谢您的帮助!

【问题讨论】:

  • I tried to rewrite it to account for the number part - 为什么简单的冒泡排序不适合?
  • 因为它输出了错误的顺序 BK2 将在 BK1 之前等......除非我做错了。我遵循了在 StackExchange 上找到的示例。
  • 你做错了什么..check this

标签: vba autocad


【解决方案1】:

我找到了解决问题的方法。我仍然无法让冒泡排序工作,所以我创建了自己的,它不需要更多时间来运行冒泡排序。如果对任何人有帮助,我会发布。

Private Function SortFsChartRow(collection As collection) As collection

Dim min As Integer
Dim max As Integer
Dim x As Integer
Dim y As Integer
Dim rowCurr As FsChartRow
Dim numCurr As Integer
Dim rowMin As FsChartRow
Dim rowMax As FsChartRow

Dim search As Integer

Dim sorted As collection
Set sorted = New collection
min = 100
max = 0

For x = 1 To collection.count
    Set rowCurr = collection(x)
    numCurr = GetNumeric(rowCurr.label)
    If numCurr > max Then
        max = numCurr
        Set rowMax = rowCurr
    End If

    If numCurr < min Then
        min = numCurr
        Set rowMin = rowCurr
    End If
Next x

search = min

For y = 0 To max
    For x = 1 To collection.count
        Set rowCurr = collection(x)
        numCurr = GetNumeric(rowCurr.label)
        If numCurr = search Then
            sorted.Add rowCurr
            Exit For
        End If
    Next
    search = search + 1
Next y

Set SortFsChartRow = sorted

结束函数

【讨论】:

    猜你喜欢
    • 2022-01-28
    • 2017-06-05
    • 2015-06-22
    • 2020-09-28
    • 1970-01-01
    • 2014-05-05
    • 2013-10-05
    • 2022-06-13
    相关资源
    最近更新 更多