excel 使用VBA对两列进行排序

dkqlctbz  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(343)

每星期,我都要处理收到的资料,使它们体体面面,我必须做好工作。
每个星期都是相同的任务,但数据不同,我决定自动化,以免浪费时间
我先对B列进行排序,并根据B列,对H列进行排序,每次排序之间,用两行分隔。
非常重要的是,经常可能在同一个市场(B列)上有两种不同的费用(H列),因此如果费用不同,也应该跳过两行
基本上,我试图得到的结果,因为1周是:

  • 按列B的字母顺序排序
  • 用两个换行符分隔每个步骤
  • 将费用分开,如果在同一市场上有多项费用,则也用两行分隔符分开
    下面是我能做的代码:
Sub step()
    
'

    
    Dim lngRow&, i&
    Dim strMarket$
    lngRow& = Worksheets("DATA").Cells(Rows.Count, "B").End(xlUp).Row
    With Worksheets("DATA").AutoFilter.Sort
        With .SortFields
            .Clear
            .Add2 Key:=Range("H1:H" & lngRow&), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        End With
        .Header = xlYes
        .Apply
       With .SortFields
        .Clear
           .Add2 Key:=Range("B1:B" & lngRow&), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        End With
        .Header = xlYes
        .Apply
    End With

    For i = lngRow& To 3 Step -1
        strMarket$ = Worksheets("DATA").Cells(i, 2)
        If Worksheets("DATA").Cells(i, 2).Offset(-1) <> strMarket$ Then Rows(i).Insert: Rows(i).Insert
    Next i

以下是我收到的数据:

以下是我希望使用VBA得到的最终结果:

谢谢你提前为那些谁会帮助我,我已经搜索了互联网,但没有类似的答案,我可以找到....我一直强调了一个星期,以找到解决方案....

yws3nbqq

yws3nbqq1#

第二个排序会覆写第一个排序,因为您清除了现有的排序字段。您需要的内容如下:

With Worksheets("DATA").AutoFilter.Sort
    With .SortFields
        .Clear
        .Add2 Key:=Range("B1:B" & lngRow&), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Add2 Key:=Range("H1:H" & lngRow&), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End With
    .Header = xlYes
    .Apply
End With
For i = lngRow& To 3 Step -1
    If Worksheets("DATA").Cells(i - 1, 2) <> Worksheets("DATA").Cells(i, 2) Or Worksheets("DATA").Cells(i - 1, "H") <> Worksheets("DATA").Cells(i, "H")Then Rows(i).Resize(2).Insert
Next i

相关问题