当数字包含短划线时在Excel中sorting数字“ – ”

我在excel中有一些数字,像这样:

201 202 208-1 210 

当我对这个列进行sorting时,sorting的列如下所示:

 201 202 210 208-1 

我如何对这个列进行sorting? 我想sorting列变成这样:

 201 202 208-1 210 

要么

 210 208-1 202 201 

一个选项是一个隐藏的列,比如说如果你的值在A2:A5中,向右插入一列,在B2中input下面的公式,并将其复制到其他B单元格中:

 =IFERROR(VALUE(LEFT(A2,FIND("-",A2)-1)),VALUE(A2)) 

或@ Gary'sStudentbuild议的替代方法,可以在连字符之后处理值,也可以转换为小数:

 =IFERROR(VALUE(SUBSTITUTE(A2,"-",".")),VALUE(A2)) 

这将数字删除到第一个连字符。 select两列中的所有值,selectsorting,然后按列Bsorting。 您可以右键单击B列并select隐藏。

如果你不想使用隐藏的列,那么我认为你唯一的select就是写一些VBA来做一个自定义的sorting过程。 然后,您还需要一种触发方式,例如电子表格中的控件,或者只是一个键盘快捷方式。

UPDATE

我已经去了VBA程序,并没有像我期望的那么直接,所以可能有一个更简单的方法来做到这一点。

我所经历的基本步骤是提示用户input一个单元格区域(在提示时只需select单元格),将值存储到string数组中,创build一个等效的数字数组,其中连字符用小数点replace,对数值数组进行sorting,然后循环遍历粘贴在值中的初始范围。

我很惊讶地发现,VBA没有内置的数组sorting方法,但是发现了一些可以在这里使用的代码。 这将创build一个临时工作表并使用工作表函数,还有一个纯粹的VBA解决scheme的代码,但它非常冗长。

要创buildVBA过程,需要使用F11打开VBA编辑器并创build一个新模块,然后将以下代码粘贴到模块中(创build一个新模块 – 右键单击​​模块并插入),然后粘贴下面的代码。

您需要调用的过程是sort_with-hyphens

您将需要创build一个控件或创build一个键盘快捷键来触发这个。 对于任何一种,您都需要通过“文件”>“选项”启用开发人员function区选项 对于控制做开发>控制>button,并右键单击来分配一个macros。 对于键盘快捷方式开发人员>macros,请从macros列表中selectVBA过程名称,然后select选项。

 Sub sort_with_hyphens() On Error GoTo sort_with_hyphens_err Dim vRange As Range Dim vCell As Variant Dim vStrArray(), vNumArray() Dim i As Long, vStart As Long, vEnd As Long Dim vStep As String: vStep = "Initialising values" ' prompt user to specify range Set vRange = Application.InputBox("Select a range to be sorted", _ "Obtain Range Object", _ Type:=8) vStrArray = vRange.Value vStart = LBound(vStrArray) vEnd = UBound(vStrArray) ReDim vNumArray(vStart To vEnd) vStep = "Populating Numeric Array" ' loop through array copying strings with hyphen to decimal equivalent For i = vStart To vEnd vNumArray(i) = Val(Replace(vStrArray(i, 1), "-", ".")) Debug.Print i, vNumArray(i) Next i ' sort numeric array vStep = "Sorting Numeric Array" SortViaWorksheet vNumArray ' write out sorted values vStep = "Writing out Sorted Values" For i = vStart To vEnd ' convert back to string and switch periods back to hyphens vRange.Cells(i, 1).Value = Replace(CStr(vNumArray(i)), ".", "-") Next sort_with_hyphens_exit: Exit Sub sort_with_hyphens_err: If vStep = "Writing out Sorted Values" Then MsgBox ("An error has occurred, the original values will " & _ "be restored. Error in Step: " & vStep & vbCrLf & _ "Error Details:" & vbCrLf & err.Number & " - " & _ err.Description) For i = vStart To vEnd ' replace with original value incase of error vRange.Cells(i, 1).Value = vStrArray(i) Next Else MsgBox ("An error has occurred in Step: " & vStep & vbCrLf & _ "Aborting sort procedure." & vbCrLf & _ "Error Details:" & vbCrLf & err.Number & " - " & _ err.Description) End If End Sub Sub SortViaWorksheet(pArray) Dim WS As Worksheet ' temporary worksheet Dim R As Range Dim N As Long Application.ScreenUpdating = False ' create a new sheet Set WS = ThisWorkbook.Worksheets.Add ' put the array values on the worksheet Set R = WS.Range("A1").Resize(UBound(pArray) - LBound(pArray) + 1, 1) R = Application.Transpose(pArray) ' sort the range R.Sort key1:=R, order1:=xlAscending, MatchCase:=False ' load the worksheet values back into the array For N = 1 To R.Rows.Count pArray(N) = R(N, 1) Next N ' delete the temporary sheet Application.DisplayAlerts = False WS.Delete Application.DisplayAlerts = True Application.ScreenUpdating = True ' test/debug/confirmation Debug.Print vbCrLf & "Sorted Array:" & vbCrLf & "------------" For N = LBound(pArray) To UBound(pArray) Debug.Print N, pArray(N) Next N End Sub 

如果您有任何问题,请告诉我。