首页 > 解决方案 > 如何对选择进行排序

问题描述

我正在尝试对选择进行排序。我在谷歌上搜索过,所有的点击都想对选择中的数据进行排序,他们的标题不准确。我想对选择进行排序。所以发生的事情是我的工作表在列中有代码列表。用户将根据需要在任意多的列中选择任意数量的代码(通过使用控制键并选择任何他想要的单元格)。当我在 VBA 中循环选择时,我得到了用户选择它们的顺序中的单元格。我需要按列顺序处理它们,然后按行顺序处理它们。我的代码循环选择...

Dim cl As Range
For Each cl In Selection
    MsgBox "Found cell " & cl.Address & "..." & cl.Value
Next cl

我的问题是......我如何让我的循环按(cl.column,cl.row)的顺序给我单元格?

更多信息...我在下面粘贴了我的电子表格的图像。它们是来自 ABS Webservice API 的 CPI 代码列表,尽管这并不重要。我使用了截图工具,当我拍摄图像时,所选单元格的突出显示没有显示,所以我在拍摄图像后再次以黄色突出显示它们。用户可能以任何顺序选择了单元格,但我需要按(列,行)处理选定的单元格。选定的单元格不一定是连续的。

我的电子表格

标签: excelvba

解决方案


我不知道一些“直接”/本机方法可以按排序的行/列顺序循环遍历范围

所以这是一个带有SortedList对象的“间接”:

Option Explicit

Sub ListCellsSortedByColumns()
    Dim cell As Range
    Dim j As Long

    With CreateObject("System.Collections.SortedList")
        For Each cell In Selection
            .add GetKey(cell), cell
        Next

        For j = 0 To .Count - 1
            MsgBox "Found cell " & .GetByIndex(j).Address & "..." & .GetByIndex(j).Value
        Next
    End With
End Sub

Function GetKey(cell As Range) As String
    Dim var As Variant

    var = Split(cell.Address(, , xlR1C1), "C")
    GetKey = Format(var(1), "000") & "|" & Format(Mid(var(0), 2), "000")
End Function

您应该在哪里调整函数的"000"一部分以适应Format()您的情况:“000”处理最大行/列索引为 999 的单元格的排序


推荐阅读