如何在Excel中创建包含双引号的字符串或公式?

353

我该如何在Excel公式中构建以下字符串:

Maurice "The Rocket" Richard

如果我使用单引号,那很容易:="Maurice 'The Rocket' Richard",但如果使用双引号呢?

13个回答

518

你尝试过使用额外的双引号进行转义吗?通过转义字符,你告诉Excel将 " 字符视为普通文本。

= "Maurice ""The Rocket"" Richard"

178

或者,您可以使用CHAR函数:

= "Maurice " & CHAR(34) & "Rocket" & CHAR(34) & " Richard"

5
这对我来说比 "" 更加稳定。也许只是因为我使用的是 Mac Excel 2011 版本。 - Ivan -Oats- Storck
5
不,这不是Mac的问题(我在使用Windows)- 这种方法效果更加一致。在我的情况下,使用&连接一个双引号并放在紧挨着或者紧接着与“&”之后都不能用双双引号的方法实现。 - Amos M. Carpenter
对我来说更加稳定,因为我经常需要在由多个连接字段和插入标点符号组成的复杂字符串周围包装引号。在我最近的情况下,需要得到类似这样的东西:“地点名称,街道地址,城市,州邮编”。 - jamesnotjim

25

三个双引号:""" x """ = "x" Excel会自动更改为一个双引号,例如:

=CONCATENATE("""x"""," hi")  

= "x" hi


(注:该段文本未完整,无法准确翻译)

1
如果这是真的,请详细说明 =concatenate("a"""b") 的结果。根据你的观察,结果应该是a"b。但事实并非如此。实际上,Excel甚至不会接受这个表达式。 - wh81752
1
你忘记了逗号。 - KiwiSteve
2
你示例中的外部引号只是字符串的起始和结束。""创建引号字符,而不是"""。 - Ben I.
1
两个双引号会自动变成一个双引号:=CONCATENATE("<""x"">"," hi") -> <"x"> hi - mwfearnley

8

如果您需要使用JSON进行此操作:

=CONCATENATE("'{""service"": { ""field"": "&A2&"}}'")

1
谢谢!这真的帮了我很多!我一直在努力正确地格式化我的单元格中的JSON数组。 - Brian C
1
谢谢,正是我所需要的 :) - JimiSweden

7
我会使用一个函数来实现这个功能(如果工作簿已经有了VBA)。
Function Quote(inputText As String) As String
  Quote = Chr(34) & inputText & Chr(34)
End Function

这是Sue Mosher的书《Microsoft Outlook Programming》中的内容。那么你的公式将会是:
="Maurice "&Quote("Rocket")&" Richard"
这类似于Dave DuPlantis发布的内容。

4

使用 chr(34)。

    Joe = "Hi there, " & Chr(34) & "Joe" & Chr(34)
    ActiveCell.Value = Joe

结果:

    Hi there, "joe"

2

"作为单独的单元格连接起来:

    A |   B   | C | D
1   " | text  | " | =CONCATENATE(A1; B1; C1);

D1 displays "text"

1
使用空字符串或零长度字符串(例如"")使单元格呈现为空白是工作表公式中的常见做法,但在VBA中通过Range.FormulaRange.FormulaR1C1属性插入公式时重新创建该选项很麻烦,因为必须在引号内重复双引号字符。
工作表的本地TEXT函数可以在不使用引号的情况下产生相同的结果。
'formula to insert into C1 - =IF(A1<>"", B1, "")
range("C1").formula = "=IF(A1<>"""", B1, """")"         '<~quote chars doubled up
range("C1").formula = "=IF(A1<>TEXT(,), B1, TEXT(,))"   '<~with TEXT(,) instead

在我看来,使用TEXT(,)代替""可以简化甚至是像上面那样简单的公式。当在更复杂的公式中使用时,其好处变得越来越显著,例如将空字符串附加到VLOOKUP以避免在查找结果为空白时返回零或在未匹配时使用IFERROR返回空字符串。
'formula to insert into D1 - =IFERROR(VLOOKUP(A1, B:C, 2, FALSE)&"", "")
range("D1").formula = "=IFERROR(VLOOKUP(A1, B:C, 2, FALSE)&"""", """")"
range("D1").formula = "=IFERROR(VLOOKUP(A1, B:C, 2, FALSE)&TEXT(,), TEXT(,))"

使用TEXT(,)替代旧的""方法来传递空字符串,这样您就可以停止使用算盘来确定公式字符串中是否有足够数量的引号字符了。

1
="Maurice "&"""TheRocker"""&" Richard"

1

这个能用于使用.Formula = "=THEFORMULAFUNCTION("STUFF")"的宏吗? 那么它应该是这样的: 这个能用于使用.Formula = "=THEFORMULAFUNCTION(CHAR(34) & STUFF & CHAR(34))"的宏吗?


1
不知道VBA中是否有这种特定的语法。试一试吧。 - Allain Lalonde
看起来是肯定的:http://bytes.com/topic/access/insights/575414-quotes-double-quotes-where-when-use-them - Allain Lalonde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接