如何删除Excel单元格多余引号以实现VBA跨文件字符串匹配
VBA删除字符串中多余双引号的解决方案
问题根因
你之前使用的Replace(String, """, "")存在VBA语法错误。VBA规定,要在字符串常量中表示单个字面双引号,需要用两个连续双引号进行转义,你写的三个连续双引号不符合语法规则,因此替换逻辑无法正常执行。
解决方法
方案1:全量删除所有双引号(适合匹配比对场景)
该方案会抹除字符串中所有的双引号,处理后两个示例字符串都会变为ABC Co.,可直接完成匹配,代码如下:
' 封装为工具函数,传入原始字符串返回无引号的处理结果 Function RemoveAllQuotes(ByVal inputStr As String) As String ' 第二个参数为4个连续双引号:首尾2个是VBA字符串边界,中间2个转义为1个待匹配的字面双引号 RemoveAllQuotes = Replace(inputStr, """", "") End Function ' 比对调用示例 Sub MatchTwoCells() Dim strFile1 As String, strFile2 As String ' 读取两个文件对应单元格的内容,按需修改工作簿、工作表、单元格地址 strFile1 = Workbooks("文件1.xlsx").Worksheets("Sheet1").Range("A1").Value strFile2 = Workbooks("文件2.xlsx").Worksheets("Sheet1").Range("A1").Value If RemoveAllQuotes(strFile1) = RemoveAllQuotes(strFile2) Then ' 匹配后的逻辑自行补充 Debug.Print "字符串匹配" Else Debug.Print "字符串不匹配" End If End Sub
方案2:仅删除多余转义引号,保留原始语义
如果需要保留原本的合法引号,将"""ABC"" Co."还原为"ABC" Co.,可使用如下处理逻辑:
Function FixExtraQuotes(ByVal inputStr As String) As String ' 先把连续两个双引号替换为临时标记 inputStr = Replace(inputStr, """""", "|QUOTE_TEMP|") ' 删除剩余的单独多余引号 inputStr = Replace(inputStr, """", "") ' 把临时标记替换回单个双引号,完成还原 FixExtraQuotes = Replace(inputStr, "|QUOTE_TEMP|", """") End Function
内容的提问来源于stack exchange,提问作者Aleksandra
相关产品推荐
相关产品推荐

