如何使用给定的文本条件对VBA进行sorting?

我正在使用一个软件,在下面的图片中产生类似的输出: 在这里输入图像说明

我想根据RetValue之后的数字来sorting这个表格。

有没有一个简单的方法来做到这一点与VBA?

我一直是在单元格中存储数字的忠实粉丝。 尤其是在Excel中,为了便于计算,值得存储。 那么,为什么不把一个单元格放到36号(例如)的位置呢?

.NumberFormat = """RetValue ""00""Y""" 

然后你仍然可以看到RetValue 36Y但实际上只有36是单元格的值,你可以进行计算。

尽pipe如此,为了排列你的上表,没有什么特别的要考虑的。 由于所有的单元格都是以相同的string开始的,因此所有的单元格都会正确地sorting 唯一的“问题”将是RetValue 4Y因为它不是一个两位数的数字。

我再一次尝试正确格式化。 如果这不是一个选项,那么我会去这里提供的任何解决scheme提取数字,然后sorting。 在这个过程中,我将(如上所述)只将数字存储在单元格中。将cell.Value包装为.NumberFormat以允许将来进行更多计算(如有必要)。

之后,您可以使用此解决scheme对表格进行sorting : sorting范围,而不必在电子表格中进行sorting

它可以让你select在将结果粘贴到工作表或者使用UDF(作为数组公式input)之前将其sorting为内存中的数组。

将来的注意事项:请不要张贴图片,而是张贴格式化的文本,我们可以复制testing。

我不会去这个VBA,而是拆分文本到多个单元格,并在filter/sorting我将按新创build的“__Y”列进行sorting。

A1B4中的数据,在C1中input:

 =--LEFT(MID(A1,FIND(" ",A1)+1,9999),LEN(MID(A1,FIND(" ",A1)+1,9999))-1) 

然后运行logging的macros:

 Sub Macro1() Range("A1:C4").Select Application.CutCopyMode = False ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C1:C4"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("A1:C4") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub 

在这里输入图像说明

VBA可能不需要这个。

您可以在列C中插入以下公式(假设列A中的RetValue和列B中的值,并且您的数据从第3行开始)。

= MID(A3,FIND(“”,A3,1)+1,FIND(“Y”,A3,FIND(“”,A3,1)) – 10)

你可以在栏C上sorting