【问题标题】:Sorting variable Ranges using other Ranges as Criteria in VBA使用其他范围作为 VBA 中的条件对变量范围进行排序
【发布时间】:2017-11-01 21:30:38
【问题描述】:

我在一张表(“全部”)的列中有基金名称,在另一张表的相应列(“已编辑”)中有每周基金回报。我将基金名称和回报定义为范围,并尝试使用回报作为 VBA 中的键对名称进行排序。我的目标是对每一列进行排序,因为每一列代表另一周。我的代码在下面。提前致谢。

Sub Sortmydata()

Dim rng As Range

Dim keyrng As Range


For i = 5 To 385


    Set rng = Worksheets("All").Range(Cells(3, i), Cells(385, i))
    Set keyrng = Worksheets("EDITED").Range(Cells(3, i), Cells(385, i))

    rng.Select

    Selection.Sort key1:=keyrng, _
    order1:=xlAscending, Header:=xlNo

    i = i + 1

Next i


End Sub

【问题讨论】:

    标签: excel sorting vba


    【解决方案1】:

    从您的代码中删除 i = i + 1,for 循环会自动递增。

    使用i = i + 1 跳过一列。

    【讨论】:

    • 我做到了,但我的主要问题是我定义的范围。随着代码移动到“keyrng”范围,它会遇到错误。我想我可以在同一个工作簿的两个不同工作表中设置两个范围。并使用其中一个作为键来对另一个进行排序。这可能吗?
    • 没有。键必须在排序范围内我认为您想要做的是按其他列的顺序对列进行排序 - 这是“自定义排序顺序”stackoverflow.com/questions/6100944/…
    • 是的,这就是我想做的。我检查了您发送的链接,但我不知道我是否理解它。(我需要理解它才能将其应用于我的数据:))因此,在这种情况下,我正在考虑添加更多代码以在其他范围内创建伪数据并在那里排序以将排序的数据复制到我一开始想要的任何地方。谢谢。
    【解决方案2】:

    您好,我认为排序只能在具有键值的相同范围内进行。 所以我用我想要排序的值和我的键值创建了一个伪范围。 在伪范围内排序并复制粘贴到我想要的范围内。 谢谢,

    子排序2()

    将 ws 调暗为工作表 将键范围调暗为范围 将排序范围调暗为范围

    对于 i = 5 到 254

     Worksheets("Tier2").Activate
    
    Set sortrange = Range(Cells(3, i), Cells(45, i))
    
    sortrange.Copy
    Range("IW3").PasteSpecial xlPasteValues
    
    
    
    
    Worksheets("EDITEDTier2").Activate
    
    Set keyrange = Range(Cells(3, i), Cells(45, i))
    
    keyrange.Copy
    
    Worksheets("Tier2").Activate
    
    Range("IX3").PasteSpecial xlPasteValues
    
    Range("IW3:IX45").Sort Key1:=Range("IX3:IX45"), _
        order1:=xlDescending, Header:=xlNo
    
    Range("IW3:IW45").Copy
    
    sortrange.PasteSpecial xlPasteValues
    

    下一个

    结束子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-03
      • 2014-09-07
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 2018-05-13
      • 2015-03-28
      • 1970-01-01
      相关资源
      最近更新 更多