如何在Excel VBA中编写原始字符串?

3
我需要通过VBA在Excel表格中编写一个公式,所以我通过选择范围并应用公式来实现,但我的公式太长了,而且它包含很多双引号("),为了忽略双引号(") ,我添加了两个双引号("")。

有时字符串会按照我的要求编写,或者由于双引号(")不匹配而导致字符串被更改,从而应用的公式不正确。

就像在Python中我们在字符串前面加上r一样:

print(r'hello\'s Sam.')   

hello\'s Sam

但在Excel VBA中有没有办法编写这样的原始字符串呢?

公式如下:

=IF(NOT($E24=""),IF($Q24="0-10V(AI)","Direct (0-10V) = (0-100%)",IF($Q24="2-10V(AI)","Direct (2-10V) = (0-100%)",IF(OR($Q24="PT 1000",$Q24="NTC 20K"),"-50 to 150 Deg C","N/A"))),"")

然后我通过 VBA 进行应用,如下所示

Sheet4.Range("R2:R50000").Formula = "=IF(NOT($E2=""" + """),IF($Q2=""" + "0-10V(AI)""" + ",""" + "Direct (0-10V) = (0-100%)""" + ",IF($Q2=""" + "2-10V(AI)""" + ",""" + "Direct (2-10V) = (0-100%)""" + ",IF(OR($Q2=""" + "PT 1000""" + ",$Q2=""" + "NTC 20K""" + "),""" + "-50 to 150 Deg C""" + ",""" + "N/A""" + "))),""" + """)"

1
写代码 - 不是“赖特”... - marc_s
@John Coleman 我想将这个公式应用到Sheet4的R列(R2:R50000)。公式是=IF(NOT($E24=""),IF($Q24="0-10V(AI)","直接(0-10V) = (0-100%)",IF($Q24="2-10V(AI)","直接(2-10V) = (0-100%)",IF(OR($Q24="PT 1000",$Q24="NTC 20K"),"-50到150摄氏度","N/A"))),"")。 - Dinesh Vilas Pawar
@John Coleman 和我使用 Excel VBA 编写了以下代码: Sheet4.Range("R2:R50000").Formula = "=IF(NOT($E2=""" + """),IF($Q2=""" + "0-10V(AI)""" + ",""" + "直接模拟量(0-10V) = (0-100%)""" + ",IF($Q2=""" + "2-10V(AI)""" + ",""" + "直接模拟量(2-10V) = (0-100%)""" + ",IF(OR($Q2=""" + "PT 1000""" + ",$Q2=""" + "NTC 20K""" + "),""" + "-50 到 150 摄氏度""" + ",""" + "不适用""" + "))),""" + """)" - Dinesh Vilas Pawar
问题出在哪里?代码似乎成功地将公式放入了带引号的单元格中。插入的公式与您想要插入的公式有何不同之处?请阅读[mcve]。 - John Coleman
@John Coleman,感谢您的回复。我的VBA公式已经成功了,但这只是一个例子。我想在我的整个代码中都使用这样的公式,大约有70-80个类型,所以很难处理双引号。这就是为什么我正在寻找Excel VBA中的原始字符串函数的原因。 - Dinesh Vilas Pawar
3个回答

2

在VBA 中没有原始字符串的概念,但是您可以使用单引号而不是双引号来编写公式,然后进行替换。您甚至可以制作一个简单的实用程序函数来完成此操作:

Function r(s As String, Optional QuoteSymbol As String = "'") As String
    r = Replace(s, QuoteSymbol, """")
End Function

然后,您的公式可以简单地插入如下:
Sheet4.Range("R2:R50000").Formula = r("=IF(NOT($E2=''),IF($Q2='0-10V(AI)','Direct (0-10V) = (0-100%)',IF($Q2='2-10V(AI)','Direct (2-10V) = (0-100%)',IF(OR($Q2='PT 1000',$Q2='NTC 20K'),'-50 to 150 Deg C','N/A'))),'')")

如果您需要在最终公式中使用单引号,则可以将反引号(`)传递给可选参数QuoteSymbol

话虽如此,您似乎做了比必要的工作更多。在字符串内,任何两个连续的双引号都将被替换为一个双引号。您不需要所有的连接来构建最终字符串。


感谢您的帮助和有用的函数想法,但对于上述情况,在Excel中无法使用单引号符(')。 - Dinesh Vilas Pawar
@DineshPawar 你是什么意思?我提供的代码并没有尝试在Excel公式中使用单引号。函数r()的整个目的是允许您在VBA中使用单引号(或任何其他符号)代替双引号。 r()将这些符号替换为正确转义的双引号。我提供的代码用于将公式放入R列,与您的代码在功能上是等效的。 - John Coleman

0
由于VBA中没有原始字符串的概念,因此可以通过将saw字符串放入Excel单元格中,然后在公式中使用它来解决此问题。
例如:
Sheet4.Range("R2:R50000").Formula = "=" & Cstr(Sheet10.Cells(1,2).Value)
下一次只需更改单元格中的值即可更新公式。

0

只需像以下示例一样添加一个引号("): 公式:

=text(now(),"mmm dd yyyy")

VBA:

Sub InsertTodaysDate() 
    ' This macro will put today's date in cell A1 on Sheet1 
    Sheets("Sheet1").Select 
    Range("A1").Select 
    Selection.Formula = "=text(now(),""mmm dd yyyy"")" 
    Selection.Columns.AutoFit 
End Sub

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