如何使用列标题作为参考排序?

时间:2018-03-01 06:49:26

标签: excel vba excel-vba

VBA中有没有办法使用它的标题名称对列进行排序?由于列可能会定期更改,我无法引用列号对其进行排序,我需要使用列标题进行排序。例如,我在C列中有订单状态(列标题),我需要对此订单状态进行排序,而不是将其称为 C列

这是我到目前为止的代码:

'Sort the "Order Status(Column C)" 
'Clear out any previous Sorts that may be leftover
ws.Sort.SortFields.Clear

'range that includes all columns to sort
Set Rngsort = ws.UsedRange

'Columns with keys to sort
Set RngKey1 = ws.Range("C1")

'Perform the sort
With ws.Sort
    Rngsort.Sort Key1:=RngKey1, Order1:=xlAscending, header:=xlYes, _
    OrderCustom:=Application.CustomListCount + 1, MatchCase:=False, _
    Orientation:=xlSortColumns, DataOption1:=xlSortNormal
End With

3 个答案:

答案 0 :(得分:0)

在OP显示他当前的代码

之后,

编辑

你可以使用这个助手子:

Sub SortIt(rngToSort As Range, header As String)
    With rngToSort ' reference passed range to sort
        .Sort key1:=.Rows(1).Find(what:=header, LookIn:=xlValues, lookat:=xlWhole), _
              order1:=xlAscending, header:=xlYes ' sort it by its column whose header is the passed one
    End With
End Sub

您可以在当前代码中利用如下:

With ws ' reference your sheet
    .Sort.SortFields.Clear 'Clear out any referenced sheet previous "Sorts" that may be leftover
    SortIt .UsedRange, "status" 'Perform the sort on the referenced sheet used range
End With

答案 1 :(得分:0)

虽然window.addEventListener('scroll', function(e) { if (document.body.scrollTop == 0) { alert("top"); } }); 我怀疑效率更高,而且代码肯定更少,这很好,但我有兴趣使用.Find进行游戏,所以写下以下内容,我欢迎提供反馈意见...

我基本上尝试匹配Application.Match标题行中的headerToFind字符串,如果没有找到则使用错误处理,否则排序。

usedRange

答案 2 :(得分:0)

这就是我的操作方式,基本上是先更改Header:=xlYes然后更改key1:="HeaderName"

例如

ws.Range("A1:" & lColLet & lRow).Sort key1:="Area", order1:=xlAscending, Header:=xlYes
相关问题