嗨,大家好,
我的excel宏有点麻烦。这是代码的一部分,其中它比较了sheet1到sheet2的单元格。问题是即使sheet1中的单元格与sheet2中的单元格匹配,它仍然显示为" NOT MATCH"。
我相信其中一个单元格(ValueA或ValueB)中隐藏了字符。他们的内容来自不同的来源。我尝试过做CLEAN()公式,但这并没有帮助。有任何想法吗?请看上面的链接文件。我按原样复制并粘贴了2个值,以便您可以测试可隐藏的内容。
我正在处理大量数据,因此我不想在VBA中使用DO WHILE。是否有公式或代码只在单元格中留下可见字符和SPACE?
=============================================== =================
这是另一个示例,它取自主文件本身,因此它接近原始文件。如您所见,sheet1列B中有一个公式,用于检查sheet2中是否已存在每个记录ID。所有人都说"没有找到" (并不存在于sheet2中)但是其中许多实际上已经存在于sheet2中,包括Record ID" 1743840"。如果您使用手动CTRL + F在sheet2中找到该记录ID,您将在那里看到它并且FIND系统正常工作,但公式不是。
答案 0 :(得分:2)
嗯。您的示例没有宏,它有一个公式。
消除文本/数字问题的一种方法是使用EXACT工作表函数(适用于数字和文本字符串)。
e.g:
=IF(EXACT(B3,C3),"Same","Not Same")
如果您想使其不区分大小写,请使用UPPER将文本字符串更改为全部大写。
嗯,基于你的新例子,一个简单的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
答案 1 :(得分:0)
在附页中,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:B2000中。您必须根据自己的情况调整范围,或发布有关数据布局的更多详细信息。
答案 2 :(得分:0)
与您的情况相关,假设您比较Sheet1的单元格A1中的值和Sheet2的单元格A1的值。好的起点是尝试Excel工作表函数,例如:在Sheet1的单元格A2中输入=(A1=Sheet2!A1)
并查看结果。根据调查结果,继续使用工作表函数或VBA(必要时)。
如果单元格格式不同(例如,一个格式为文本,另一个格式为数字),则将两者都转换为文本并应用trim()函数(以防万一)。
RGDS,
答案 3 :(得分:0)
尝试使用IFERROR(VALUE($A2),$A2)
所以,你的公式变为
=IF(IFERROR(MATCH(IFERROR(VALUE($A2),$A2),OldFile!A:A,0),"NOT FOUND")<>"NOT FOUND","FOUND","NOT FOUND")