【发布时间】:2016-05-17 20:19:11
【问题描述】:
【问题讨论】:
-
使用宏记录器?
【问题讨论】:
我一直非常喜欢在单元格中存储数字。特别是在 Excel 中,数字值得存储,以便进行计算。那么,为什么不将数字 36(例如)与
.NumberFormat = """RetValue ""00""Y"""
那么您仍然可以看到RetValue 36Y,但实际上只有36 是单元格的.Value,您可以进行计算。
不过,要对上表进行排序,没有什么特别需要考虑的。由于所有单元格都以相同的字符串开头,因此所有单元格都将正确排序。唯一的“问题”将是RetValue 4Y,因为它不是两位数。
再一次,我会尝试正确格式化它。如果这不是一个选项,那么我会选择here 提供的任何解决方案来提取数字,然后对其进行排序。在此过程中,我将(如上所述)仅将数字存储在 cell.Value 中,并将其周围的文本包装为 .NumberFormat,以便将来进行更多计算(如有必要)。
之后,您可以使用以下解决方案对表格进行排序: Sort range without sorting it in a spreadsheet
它使您可以选择在将结果粘贴到工作表之前将其作为内存中的数组进行排序,或者使用 UDF(作为数组公式输入)。
未来注意事项:请不要发布图片,而是发布我们可以复制以进行测试的格式化文本。
【讨论】:
我不会使用 VBA,而是使用 Split Text Into Multiple Cells 并在 Filter/Sort 中按新创建的“__Y”列进行排序。
【讨论】:
A1 到 B4 中的数据,在 C1 中输入:
=--LEFT(MID(A1,FIND(" ",A1)+1,9999),LEN(MID(A1,FIND(" ",A1)+1,9999))-1)
然后运行录制的宏:
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 列排序。
【讨论】: