Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在给定文本条件下使用VBA对表格进行排序?_Vba_Excel - Fatal编程技术网

如何在给定文本条件下使用VBA对表格进行排序?

如何在给定文本条件下使用VBA对表格进行排序?,vba,excel,Vba,Excel,我使用的软件生成类似的输出,如下图所示: 我想根据RetValue后面的数字对这个表进行排序 有没有一种简单的方法可以用VBA实现这一点 我不会使用VBA,而是在Filter/Sort中,我将按新创建的“\u_Y”列进行排序。此操作可能不需要VBA 您可以在C列中插入以下公式(假设A列中有RetValue,B列中有Value,数据从第三行开始) =MID(A3,FIND(“,A3,1)+1,FIND(“Y”,A3,FIND(“,A3,1))-10) 您可以在C列上排序。数据位于A1到B4,在C

我使用的软件生成类似的输出,如下图所示:

我想根据RetValue后面的数字对这个表进行排序


有没有一种简单的方法可以用VBA实现这一点

我不会使用VBA,而是在Filter/Sort中,我将按新创建的“\u_Y”列进行排序。

此操作可能不需要VBA

您可以在C列中插入以下公式(假设A列中有RetValue,B列中有Value,数据从第三行开始)

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


您可以在C列上排序。

数据位于A1B4,在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

我一直非常喜欢在单元格中存储数字。特别是在Excel中,为了便于计算,数字本身值得存储。那么,为什么不把数字36(例如)和

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

不过,要对上面的表格进行排序,没有什么特别需要考虑的。由于所有单元格都以相同的字符串开头,因此所有单元格都将正确排序。唯一的“问题”是
RetValue 4Y
,因为它不是两位数

再一次,我会尝试正确格式化它。如果这不是一个选项,那么我会选择提供的任何解决方案来提取数字,然后对其进行排序。在此过程中,我(如上所述)只将数字存储在
单元格.Value
中,并将其周围的文本包装为
.NumberFormat
,以便将来进行更多计算(如有必要)

之后,您可以使用以下解决方案对表格进行排序:

在将结果粘贴到工作表之前,您可以选择将其作为内存中的数组进行排序,或者使用自定义项(作为数组公式输入)


未来注意事项:请不要发布图片,而是发布格式化文本,我们可以复制以供测试。

使用宏记录器?当您和我刚刚准备了这么好的排序代码(包括UDF)时,为什么还要发布“新”排序代码:@Ralph在这种情况下,我想强调录制的代码与“助手”一起使用但是你的方法显然是最好的答案!当然,你是对的。宏记录器是一个经常被遗忘的工具,对于大多数基本的VBA代码(+1)来说,它是一个很好的主意!(+1)
.NumberFormat = """RetValue ""00""Y"""