使用 VBA 向单元格添加单引号

Posted

技术标签:

【中文标题】使用 VBA 向单元格添加单引号【英文标题】:Adding single quotes to a cell using VBA 【发布时间】:2012-07-13 18:35:59 【问题描述】:

我正在尝试使用 Chr(39) 为列中的值添加单引号,但我只得到第二个引号。 例如我想要'value',但我得到了value'

但如果我通过使用Chr(34) 来使用双引号,它会起作用,我会得到 "value"

Sub AddQuote()
Dim myCell As Range
    For Each myCell In Selection
        If myCell.Value <> "" Then
            myCell.Value = Chr(39) & myCell.Value & Chr(39)
        End If
    Next myCell
End Sub

【问题讨论】:

如此接近! - 我会添加我的解决方案 【参考方案1】:

只需添加另一个单引号:

Sub AddQuote()
Dim myCell As Range
    For Each myCell In Selection
        If myCell.Value <> "" Then
            myCell.Value = Chr(39) & Chr(39) & myCell.Value & Chr(39)
        End If
    Next myCell
End Sub

【讨论】:

【参考方案2】:

我更喜欢这种语法。无需循环遍历每个单元格,只需将整个选择读入数组,对数组进行操作,然后将数组内容转储回工作表。最多触摸工作表两次。

Sub AddQuote()

  Dim i As Long, j As Long
  Dim inputData As Variant
  Dim outputData As Variant

  ' only act on a range
  If TypeName(Selection) = "Range" Then
    ' assign selection value to a Variant array
    inputData = Selection.Value
    ' create an output array of the same size
    ReDim outputData(LBound(inputData) To UBound(inputData), _
                     LBound(inputData, 2) To UBound(inputData, 2))

    ' loop through all array dimensions
    For i = LBound(inputData) To UBound(inputData)
      For j = LBound(inputData, 2) To UBound(inputData, 2)
        ' array element will be = Empty if cell was empty
        If Not IsEmpty(inputData(i, j)) Then
          outputData(i, j) = Chr(39) & Chr(39) & inputData(i, j) & Chr(39)
        End If
      Next j
    Next i

    Selection.Value = outputData
  End If

End Sub

它还考虑了多列选择。

【讨论】:

【参考方案3】:

第一个引号'表示单元格被视为文本。

因此,您必须在 LHS 上使用两个单引号,并在右侧使用一个单引号才能正确显示。

注意 A1 = ''test'A2 = ''abc'

然后=A1&amp;A2 会给你'test''abc',正如你所期望的那样

【讨论】:

+1 用于建议正确的方法,尽管您可以考虑添加示例代码供 OP 使用/适应。

以上是关于使用 VBA 向单元格添加单引号的主要内容,如果未能解决你的问题,请参考以下文章

vba在单元格中生成的公式如何变成文本值

excel2007 VBA中如何引用指定的单元格地址?

使用VBA向单元格填充文本

使用 VBA 将 Excel 公式写入单元格

excelvba锁定单元格图片不被删除

请问jqgrid怎么向合并后的单元格赋值?