Vba 根据列中的值对列进行排序

Vba 根据列中的值对列进行排序,vba,excel,sorting,Vba,Excel,Sorting,我正在努力完成一项看似简单的任务,如果我有时间和精力去真正完成它,我可能自己就能解决它 但是,由于时间限制,以及缺乏全面的VBA和/或Excel知识,我坚持以下几点: 一份excel电子表格,其中有1列(我的例子中是C列)和数据。第1行包含标题,第2行也包含标题。第3行到第655行包含以下格式的数据: 1.25L Soft Drinks - 7 Up 1.25L Soft Drinks - Coke 1.25L Soft Drinks# - 7 Up 1.25L Soft Drinks# - C

我正在努力完成一项看似简单的任务,如果我有时间和精力去真正完成它,我可能自己就能解决它

但是,由于时间限制,以及缺乏全面的VBA和/或Excel知识,我坚持以下几点:

一份excel电子表格,其中有1列(我的例子中是C列)和数据。第1行包含标题,第2行也包含标题。第3行到第655行包含以下格式的数据:

1.25L Soft Drinks - 7 Up
1.25L Soft Drinks - Coke
1.25L Soft Drinks# - 7 Up
1.25L Soft Drinks# - Coke
基本上,C列中的所有数据都包含一个副本,这是#标记的唯一区别。我非常希望对C列进行排序,使不带字母的产品按字母顺序出现在选项卡上,带字母的产品也按字母顺序出现在底部。一个很好的选择是在带有#的数据集和带有/没有#的数据集之间有一个空行

我很确定以前也有过类似的代码或其他方法,但在网上搜索了3个相当烦人和浪费时间的小时后,我的老板真的不想让我继续下去:(但是,我必须对数据进行排序。我必须进行多次排序,因此我急切地寻找VBA代码。

您可以通过添加一个辅助列来对数据运行自定义,该列确定描述中是否存在哈希标记字符。将其用作主排序键,将C列用作辅助排序键

Sub hash_sort()
    With Worksheets("Sheet1")    '<~~ set this properly
        With .Cells(1, 1).CurrentRegion
            With .Resize(.Rows.Count - 1, .Columns.Count + 1).Offset(1, 0)
                .Columns(.Columns.Count).Cells.Formula = "=isnumber(find(char(35), C2))"
                .Cells.Sort Key1:=.Columns(.Columns.Count), Order1:=xlAscending, _
                            Key2:=.Columns(3), Order2:=xlAscending, _
                            Orientation:=xlTopToBottom, Header:=xlYes
                .Columns(.Columns.Count).EntireColumn.Delete
            End With
        End With
    End With
End Sub
Sub hash_sort()

在工作表(“Sheet1”)中,添加一个类似于
=IF(iError(FIND(“#”),C3)),1,2)
排序列,然后在ColC.Hi@Jeeped中对数据进行排序,感谢您的解决方案!