【问题标题】:How to write raw string in Excel VBA?如何在 Excel VBA 中编写原始字符串?
【发布时间】:2017-09-23 21:11:47
【问题描述】:

我需要通过 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""" + "))),""" + """)"

【问题讨论】:

  • - 不是“赖特” ....
  • @John Coleman 我将此公式应用于 R(R2:R50000) 列中的 sheet4 公式是 =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"))),"")
  • @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 摄氏度""" + ",""" + "N /A""" + "))),""" + """)"
  • 有什么问题?该代码似乎成功地将公式放入带有引号的单元格中您想要它们的位置。插入的公式与您要插入的公式有何不同?请阅读minimal reproducible example
  • @John Coleman 感谢您的回复,我的 formla 在 VBA 中是成功的,但是我想在我的整个代码 70-80 类型中输入这样的公式,因此很难处理双引号这就是我在 excel VBA 中寻找原始字符串函数的原因。

标签: vba excel


【解决方案1】:

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

说了这么多,你似乎做的工作比需要的多,因为在字符串中任何两个连续的双引号都被一个双引号替换了。您不需要所有这些连接来构建最终字符串。

【讨论】:

  • @我感谢您的帮助和功能的想法,这也很有用,但对于上述情况 Single QuoteSymbol( ' ) 无法在 excel 中工作
  • @DineshPawar 你是什么意思?我给出的代码不会尝试在 Excel 的公式中使用单引号。函数r() 的整个point 允许您在VBA 中使用单引号(或您选择的任何其他符号)代替双引号。 r() 用正确转义的双引号替换这些符号。我提供的用于将公式放入 R 列的代码在功能上等同于您的代码。
【解决方案2】:

只需添加一个引号(“),如下例: 公式:

=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

【讨论】:

    【解决方案3】:

    由于VBA中没有原始字符串的概念,所以这个问题可以通过将锯字符串放在excel单元格中然后在公式中使用它来解决

    Sheet4.Range("R2:R50000").Formula = "=" & Cstr(Sheet10.Cells(1,2).Value)

    下次只更改单元格中的值和公式得到更新

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 2013-09-24
      • 2010-09-18
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2018-09-26
      相关资源
      最近更新 更多