嗨伙计们,
我的excel宏有点麻烦。有一部分代码将从sheet1到sheet2的单元格进行比较。问题是,即使sheet1中的单元格与sheet2中的单元格匹配,它仍然显示为“不匹配”。
我相信其中一个细胞,无论是ValueA还是ValueB,都有隐藏的特征。它们的内容来自不同的来源。我试着用干净的()公式,但没什么用。有什么想法吗?请参阅上面的链接文件。我按原样复制和粘贴了两个值,这样您就可以测试隐藏的内容。
我正在处理大量的数据,所以我不想在VBA中使用DO。是否有公式或代码在单元格中只保留可见字符和空格?
================================================================
下面是另一个示例,这是从主文件本身提取的,因此它接近原始文件。如您所见,sheet1列B中有一个公式,用于检查sheet2中是否存在每个记录ID。他们都说“找不到”(在sheet2中不存在),但其中许多实际上已经存在于sheet2中,包括记录ID "1743840“。如果您执行手动CTRL+F以在sheet2中找到记录ID,您将看到它在那里,并且查找系统可以工作,但公式不工作。
发布于 2014-06-29 12:39:04
尝试用IFERROR(VALUE($A2),$A2)
替换查找值
所以,你的公式变成
=IF(IFERROR(MATCH(IFERROR(VALUE($A2),$A2),OldFile!A:A,0),"NOT FOUND")<>"NOT FOUND","FOUND","NOT FOUND")
发布于 2014-06-29 11:41:05
嗯。您的示例没有宏,它有一个公式。
消除文本/数字问题的一种方法是使用精确的工作表函数(它可以处理数字以及文本字符串)。
例如:
=IF(EXACT(B3,C3),"Same","Not Same")
如果要使其不区分大小写,请使用上级将文本字符串更改为所有大写。
嗯,根据你的新例子,一个简单的UDF就能做到这一点。它模仿的是您手动使用的“查找”方法。我让它对大小写敏感,但你可以很容易地改变它。下面将返回true或false,这取决于是否有匹配。R是搜索范围,所以可以是OldFile!$A$2:$A$160。
Function IsFound(S As String, R As Range) As Boolean
With R
If Not .Find(what:=S, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True) Is Nothing Then
IsFound = True
Else
IsFound = False
End If
End With
End Function
发布于 2014-06-29 11:02:41
在附加的工作表中,B3中的值存储为文本,而单元格C3中的值是数字,因此在技术上它们是不一样的。您可以通过将D3中的公式更改为以下内容来解决这一问题:
=IF(B3+0=C3+0,"Same","Not Same")
+0强制将文本解释为数字。通过将0添加到已存储为文本的数值中,可以将相同的逻辑应用于较大的工作表。
要快速将文本转换为数字,有一种方法是使用VBA (不知道数据的布局):
Sheet1.Range("B1").Copy
Sheet1.Range("B2:B2000").PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd, SkipBlanks:=False, Transpose:=False
这假设B1是一个空白单元格,并且以文本形式存储的数字在B2:B 2000中。您将不得不调整范围,以适应您的情况,或张贴关于您的数据布局的更多细节。
https://stackoverflow.com/questions/24479222
复制