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