【问题标题】:How to sort columns with headers alphabetically using VBA如何使用 VBA 按字母顺序对带有标题的列进行排序
【发布时间】:2021-12-03 02:32:24
【问题描述】:

我有一个宏,它接受用户的输入,在 SQL 数据库中搜索信息,然后将该信息粘贴到表中。

我可以按字母顺序对一列进行排序,但是相邻的列也没有排序。

下面是排序的sn-p代码:

Sub testSort()
'Sheets(1).Range("A2", Sheets(1).Range("A2").End(xlDown)).Select
'Sheets(1).Range("A2:" & Sheets(1).Range("A2").End(xlDown).Address).Select
Dim testrange As Range
Set testrange = Sheets(1).Range("A2", Sheets(1).Range("A2").End(xlDown))
testrange.Sort key1:=Range("A2"), _
  order1:=xlAscending, _
  Orientation:=xlSortColumns
End Sub

原始测试数据集的图像,在我的宏之后会发生什么,应该是什么:

【问题讨论】:

  • 您用于排序的范围testrange 只是一列。这意味着它对 A 列中的名称进行排序,但不会将 B 列中的数字移动到名称的新位置。要解决此问题,请在 testrange 中包含 B 列,例如 Sheets(1).Range("A2", Sheets(1).Range("B2").End(xlDown))
  • 完美,非常感谢。

标签: excel vba sorting


【解决方案1】:

您用于排序的范围testrange 只是一列。这意味着它对 A 列中的名称进行排序,但不会将 B 列中的数字移动到名称的新位置。要解决此问题,请在 testrange 中包含 B 列

Set testrange = Sheets(1).Range("A2", Sheets(1).Range("B2").End(xlDown))

testrange 现在包括 A 列和 B 列。

要在多个相邻的表上进行循环,我们可以使用一个变量作为起始位置,然后移动每个循环的起始位置。

Sub testSort()

Dim topCorner As Range
Set topCorner = Sheets(1).Range("A2")

For i = 1 To 3
    Dim testrange As Range
    Set testrange = Sheets(1).Range(topCorner, topCorner.End(xlDown).Offset(, 1))
    testrange.Sort Key1:=testrange.Columns(1), _
                   Order1:=xlAscending, _
                   Orientation:=xlSortColumns
    
    Set topCorner = topCorner.Offset(, 3)
Next
            
End Sub

【讨论】:

    【解决方案2】:

    下面是更新成功的代码

    Sub testSort()
    
    Dim testrange As Range
    Set testrange = Sheets(1).Range("A2", Sheets(1).Range("B2").End(xlDown))
    testrange.Sort key1:=Range("A2:B2"), _
    order1:=xlAscending
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 2021-11-20
      • 2015-07-26
      • 1970-01-01
      相关资源
      最近更新 更多