Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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_If Statement_Excel Formula - Fatal编程技术网

Vba 用于检测单个单元格中无序数字的公式

Vba 用于检测单个单元格中无序数字的公式,vba,excel,if-statement,excel-formula,Vba,Excel,If Statement,Excel Formula,在工作中,我们目前使用一个程序,在单个单元格中输出产品编号组合。例如,在单元格C2中,将显示“1 4 6”,以显示客户订购的产品1、4和6。这些数字用一个空格分隔。我是否可以使用if()类型的公式来检测产品是否出现“1 6 4”之类的故障。我不想使用文本到列的转换,因为我想把它全部保存在一个步骤中 谢谢 主题外启动 这很奇怪。大约1小时前,我是,因此我决定模拟输入,看看会发生什么。为了模拟输入,我构建了您可能需要的: 离题结束 只需检查rngInput并正确调整即可。它将为您提供下一列中的值。

在工作中,我们目前使用一个程序,在单个单元格中输出产品编号组合。例如,在单元格C2中,将显示“1 4 6”,以显示客户订购的产品1、4和6。这些数字用一个空格分隔。我是否可以使用if()类型的公式来检测产品是否出现“1 6 4”之类的故障。我不想使用文本到列的转换,因为我想把它全部保存在一个步骤中

谢谢

主题外启动

这很奇怪。大约1小时前,我是,因此我决定模拟输入,看看会发生什么。为了模拟输入,我构建了您可能需要的:

离题结束


只需检查
rngInput
并正确调整即可。它将为您提供下一列中的值。此外,如果拆分包含多个空空间,则该功能也可以工作

因此,如果这是输入:

这是输出:

主题外开始

这很奇怪。大约1小时前,我是,因此我决定模拟输入,看看会发生什么。为了模拟输入,我构建了您可能需要的:

离题结束


只需检查
rngInput
并正确调整即可。它将为您提供下一列中的值。此外,如果拆分包含多个空空间,则该功能也可以工作

因此,如果这是输入:

这是输出:


这里有一个VBA函数,它将测试一个数字串是否按升序排列:

Function InOrder(nums As String) As Boolean
    Dim numbers As Variant
    Dim i As Long
    numbers = Split(Trim(nums))
    For i = LBound(numbers) To UBound(numbers) - 1
        If Val(numbers(i)) > Val(numbers(i + 1)) Then
            InOrder = False
            Exit Function
        End If
    Next i
    InOrder = True
End Function

这可以直接在工作表中使用
InOrder(“1 4 6”)
计算结果为
True
InOrder(“1 6 4”)
计算结果为
False

以下是一个VBA函数,它将测试一个数字串是否按升序排列:

Function InOrder(nums As String) As Boolean
    Dim numbers As Variant
    Dim i As Long
    numbers = Split(Trim(nums))
    For i = LBound(numbers) To UBound(numbers) - 1
        If Val(numbers(i)) > Val(numbers(i + 1)) Then
            InOrder = False
            Exit Function
        End If
    Next i
    InOrder = True
End Function

这可以直接在工作表中使用
InOrder(“1 4 6”)
的计算结果为
True
InOrder(“1 6 4”)
的计算结果为
False

以下是使用查找构建的基于IF的公式(与imaginaryhuman所说的相同)

假设包含
1 4 6
等数据的源单元格为A2。没有经过严格的测试


=IF(LOOKUP(9E+307),(MID(SUBSTITUTE(“&A2,”,REPT(“,99)),ROW($1:INDEX(A:A),(LEN(A2)-LEN(SUBSTITUTE(A2,“,”)+1))*99,99)+0(MID(SUBSTITUTE(“0”&A2,”,REPT(“,99)),ROW($1:INDEX(A:A,(LEN(A2)-LEN)-LEN(SUBSTITUTE(A2,“,”)+1))>99,99)+),>0,“无序”,“按顺序”)

以下是使用查找构建的基于IF的公式(与imaginaryhuman所说的相同)

假设包含
1 4 6
等数据的源单元格为A2。没有经过严格的测试


=IF(LOOKUP(9E+307),(MID(SUBSTITUTE(“&A2,”,REPT(“,99)),ROW($1:INDEX(A:A),(LEN(A2)-LEN(SUBSTITUTE(A2,”)+1))*99,99)+0(MID(SUBSTITUTE(“0”&A2,”,REPT(“,99)),ROW($1:INDEX(A:A,(LEN(A2)-LEN)-LEN(SUBSTITUTE(A2,“,”)+1)))+99,99)+>0,“无序”,“按顺序排列”),
它们总是没有指定长度,

,产品范围在1到15之间,组合可以是2或3。例如,它将是“4 15”,另一个可能是“1 3 12”,然后我将使用VBAA解决方案确实存在,只使用一个纯公式(没有VBA或辅助单元格),但该公式将是一个绝对的怪物,因为Excel在解析方面出了名的差,因此必须编写大量非常复杂的手动规则才能完成看似简单的任务。这是你感兴趣的东西吗?它们总是有特定的长度吗?不,产品范围在1到15之间,组合可以是2或3。例如,它将是“4 15”,另一个可能是“1 3 12”,然后我将使用VBAA解决方案确实存在,只使用一个纯公式(没有VBA或辅助单元格),但该公式将是一个绝对的怪物,因为Excel在解析方面出了名的差,因此必须编写大量非常复杂的手动规则才能完成看似简单的任务。这是你感兴趣的东西吗?非常感谢你,我真的很感谢你伸出援手。是否有任何方法可以将同一概念转换为一个excel公式,如果添加了if()函数,该公式将显示“是”或“否”。如果没有,我会加入这个VBA。非常感谢你,我真的很感谢你伸出援手。是否有任何方法可以将同一概念转换为一个excel公式,如果添加了if()函数,该公式将显示“是”或“否”。如果没有,我将添加这个VBA,这是一个很好的捕获。
Trim()
使其更加坚固。谢谢。@vitya是一个很好的捕获。
Trim()
使其更加坚固。谢谢