在Excel VBscript / VBA中插入行返回

时间:2017-03-17 13:44:44

标签: excel excel-vba vbscript vba

使用Excel v16

我正在尝试通过使用回车替换像tilde~这样的字符来格式化单元格中的文本,其中完成的结果将是多行。这实际上是多行和多列的合并单元格,如下所示

这是输入 enter image description here

这是所需的输出 enter image description here

这是我在宏中使用的脚本

Sub FindReplaceAll()
    Sheets("Template").Select
    Range("A34").Select

    iStr = ActiveCell.Value

    For i = 1 To Len(iStr)
        If Mid(iStr, i, 1) = "~" Then
            rtStr = rtStr + vbCr
    Else
        rtStr = rtStr + Mid(iStr, i, 1)
    End If

    Next i

    ActiveCell.Value = rtStr

End Sub

不幸的是,我得到的所有内容都与删除了代字号相同 使用换行文本格式化单元格。不知道从哪里开始。

2 个答案:

答案 0 :(得分:5)

您的整个子程序只能用一行代替:

sub findReplaceAll()
    Sheets("template").Range("A34").Value = Replace(Sheets("template").Range("A34").value, "~", chr(13)) 
end sub

这会将单元格的值设置为自身,但用回车符替换波浪号。正如在@ johncoleman的回答中所提到的,你可以使用vbcrlf作为回车符/换行符,或者chr(13) & chr(10)如果你想拆分头发。

这也可以在工作表公式中完成:

=SUBSTITUTE(A34, "~", CHAR(13))

答案 1 :(得分:4)

通常,在newlines的Windows中,您需要vbCrLF而不是vbCr。可以使用vbCrLf或简单vbLf将多行字符串写入Excel单元格。如果您使用Alt+Enter从用户界面输入此类字符串,则执行后续操作会直接对应。

如果您打算对字符串执行其他操作而不是在单元格中显示该字符串,则执行此操作可能会导致问题,例如将其写入文本文件或将其复制到剪贴板并将其粘贴到其他应用程序。例如,如果您在单元格A1中输入a Alt+Enter b,则会在a上直接显示b,但如果您运行以下代码:

Sub test()
    Dim FSO As Object
    Dim f As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set f = FSO.CreateTextFile("C:/programs/test.txt")
    f.Write Range("A1").Value
    f.Close
End Sub

然后在记事本中检查文件,不会显示换行符。出于这些原因,我在VBA中构建多行字符串时几乎总是使用vbCrLf

因此 - 如果您只想显示字符串,请使用chr(10)vbLf,但您可能希望稍后在其他位置使用此字符串,请使用vbCrLf