【发布时间】:2017-03-04 05:36:03
【问题描述】:
我是编写 VBA 的新手。我了解核心编程概念,因为我拥有编程学位,但我再次学习 VBA 语法、方法、它们的常量、限制,只是整个 9。
我的问题很瘦: 我正在尝试使用我拥有的自动排序方法。但是,我需要按三列之一分组。我使用 SQL 的经验让我寻找一种在包含日期的列上使用 group by 的方法。但没有骰子。
样本数据:(根据预期结果)
Column C Column D
02/1/2017 TRUCK
02/1/2017 TRUCK
02/1/2017 COLLECT
02/1/2017 HOLLAND
02/2/2017 TRUCK
02/2/2017 TRUCK
02/3/2017 TRUCK
02/3/2017 COLLECT
02/4/2017 COLLECT
02/4/2017 HOLLAND
02/4/2017 HOLLAND
02/4/2017 HOLLAND
我一直在寻找解决问题的方法 - 无济于事。这是我遇到的一些问题,但我还没有找到解决方案。
以下链接中的此方法不起作用,因为它侧重于对要排序的行进行分组,我想按包含日期的列进行分组: excel vba: How to Sort Group of Row based on column value
这个链接中的这个方法看起来我可以得到我需要的东西,但还没有答案: Group and combine values in vba
此方法将在 Excel 中创建组。关闭,但我想分组...这个问题的标题应该是“使用 VBA 分组” Group By With VBA
我还找到了一些关于排名的信息,但我很难在这里找到适合它的方法。
我正在运行的代码可以正常排序,但不完全存在。我需要它对 D 列进行排序,同时仍保持 C 列升序。请注意,此代码是我编写的一个单独的模块,用于测试它是如何工作的。请不要指出我需要对 3 列进行排序,但以下仅引用 D 列。我可以将新想法与我必须展示的东西放在一起。
'method to sort values based on carriers defined in a custom list
'carriers are ordered by pickup times
'
Sub CustomSort()
ActiveWorkbook.Worksheets("Outbound Work Status").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Outbound Work Status").Sort.SortFields.Add Key:=Range("D:D"), _
SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
"Truck,Collect,Holland,LME,YRC", DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Outbound Work Status").Sort
.SetRange Range("A3:Z9999")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
非常感谢任何可以指导我解决难题的正确方向的提示!
抱歉,如果这已被询问并解决 - 我似乎找不到它。
谢谢!
【问题讨论】:
-
样本数据会有所帮助。我们不知道您的数据现在是什么样子以及您希望它是什么样子
-
我很抱歉 - 这是约会。例如:2/1/2017、2/2/2017、2/3/2017。每个日期有多个条目。我想将所有 2/1/2017 保留在顶部,然后使用提到的自定义排序值。然后是 2/2/2017 和自定义排序值。最终将所有最旧的日期列在最前面,并按照每组日期(例如所有 2017 年 2 月 1 日)的一致自定义排序。如果这没有意义,请告诉我。
-
我仍然不认为您要实现的目标很明确。也许您可以在排序之前编辑您的问题以包含 D 列中的一些数据,以及您希望它如何处理分组。
-
J. Garth - 我已经编辑包含一个实际的数据样本。上面代码中提到的自定义排序是 TRUCK、COLLECT、HOLLAND 等。因此,示例显示我想使用此自定义顺序并保持日期升序。希望为大家澄清。
-
我们仍然不知道这个问题。我们只知道“只是不完全存在”。如果您对问题的分析足以提供清晰的解释,那么您很可能会自己提出解决方案
标签: excel vba sorting group-by