我一直在绞尽脑汁寻找最好的方法来检查三个单元格中的单元格值是否完全相同。然而,棘手的部分是,这三个单元格中的任何一个都可以是空白的。我还没有找到一个简单的解决方案,不需要在单元格的公式中使用十几个IF和EXACT函数。我已经尝试了一些用户定义的函数,希望减少单元格公式的复杂性。但我不知道最好的方法是什么
我正在做一个excel表格,允许用户将excel文件导入到工作簿中有一段代码可以解析导入文件的文件名,并将“E1#”粘贴到相应的单元格中(我们将该单元格称为A2。单元格A1显示文件的目录路径。Quant文件的“E1#”编号位于A2中,序列文件的“E1#”号放在A4中(文件目录放在A3中),订单详细信息“E1#”放在A6中。每个文件都是可选的,因此“E1#”单元格(A2,A4,A6)中可以具有或可以不具有数值。(A7)应显示“匹配”,因为单元格A2和A6具有匹配的E1#数字“1234”。如果只有一个单元格具有数字值,而其他两个E1#-单元格为空,如果多于一个的E1#单元格填充有数字并且如果数字彼此不匹配,则灰色单元格显示“不匹配”。
旁注:当我最初创建这个Excel工作表时。用户说他们只需要数量和序列文件字段。所以创建一个单元格公式(在灰色单元格内)用于检查两个单元格(A2和A4)的匹配相当简单。ISBLANK和EXACT语句使它工作得很好,但现在我必须添加第三个文件字段(“订单详情”)到excel表.现在我不知道如何使“匹配/不匹配”检查工作了.有没有更好的算法或代码的做法,我可以采取?任何意见将不胜感激.
我试过用IF、ISBLANK和EXACT函数创建一个很长的单元格公式。但是单元格公式变得太复杂,无法调试和阅读。我已经创建了几个用户定义的函数,但是我仍然很难用它来创建一个工作和内聚的单元格公式。(下面)我的UDF用EXACT函数在单元格公式中使用。InterfaceComp_str返回E1#数字或空白。
Public Function InterfaceComp_str(c1 As String, c2 As String) As String
If Len(c1) < 1 Then
InterfaceComp_str = c2
End If
If Len(c2) < 1 Then
InterfaceComp_str = c1
End If
If Not IsEmpty(c1) And Not IsEmpty(c2) Then
If InStr(c1, c2) <> 0 And Len(c1) = Len(c2) Then
InterfaceComp_str = c2
End If
End If
End Function`
下面是灰色单元格(A7)中的单元格公式的示例:=IF(EXACT(InterfaceComp_str(A2,A4),InterfaceComp_str(A4,A6)),"Match", "Mismatch")
但是这个单元格公式有很多问题,我不确定我的UDF是否是解决这个问题的正确方法。
3条答案
按热度按时间lvjbypge1#
如果输入相同,则以下VBA代码将返回true,如果输入不同(包括空),则返回false
yqkkidmi2#
试试下面的功能。
使用方式:
自定义项:
参数数组:https://learn.microsoft.com/en-us/office/vba/language/concepts/getting-started/understanding-parameter-arrays
xoshrz7s3#
您也可以使用工作表公式执行此操作。
如果单元格中只有数字要检查,则:
如果还需要测试单元格中的值是否为数字,则简单的测试可能包括比较
COUNT
和COUNTA
了解Excel将看起来像日期和/或科学记数法数字的值视为数字,以及输入值的约束条件,您可能需要检查所有字符是否都是数字。