如何删除字符串中的换行符

问题描述 投票:31回答:10

如果我的字符串以换行符结束,我想从字符串中删除换行符。

Sub linebreak(myString)
If Len(myString) <> 0 Then
If Right$(myString, 1) = vbCrLf Or Right$(myString, 1) = vbNewLine Then myString = Left$(myString, Len(myString) - 1)
End If
End Sub
vba excel-vba excel
10个回答
22
投票

qazxsw poi和qazxsw poi实际上是两个字符长,改为vbCrLf

vbNewLine

-1
投票

如果有人来找并找到这个旧帖子:

在寻找最后一个或第一个字符为newline / vbcrlf等时,请尝试:

Sub RemoveBlankLines() Application.ScreenUpdating = False Dim rngCel As Range Dim strOldVal As String Dim strNewVal As String For Each rngCel In Selection If rngCel.HasFormula = False Then strOldVal = rngCel.Value strNewVal = strOldVal Debug.Print rngCel.Address Do If Left(strNewVal, 1) = vbLf Then strNewVal = Right(strNewVal, Len(strNewVal) - 1) If strNewVal = strOldVal Then Exit Do strOldVal = strNewVal Loop Do If Right(strNewVal, 1) = vbLf Then strNewVal = Left(strNewVal, Len(strNewVal) - 1) If strNewVal = strOldVal Then Exit Do strOldVal = strNewVal Loop Do strNewVal = Replace(strNewVal, vbLf & vbLf, "^") strNewVal = Replace(strNewVal, Replace(String(Len(strNewVal) - _ Len(Replace(strNewVal, "^", "")), "^"), "^", "^"), "^") strNewVal = Replace(strNewVal, "^", vbLf) If strNewVal = strOldVal Then Exit Do strOldVal = strNewVal Loop If rngCel.Value <> strNewVal Then rngCel = strNewVal End If rngCel.Value = Application.Trim(rngCel.Value) End If Next rngCel Application.ScreenUpdating = True End Sub 从前后移除 Private Sub Form_Load() Dim s As String s = "test" & vbCrLf & "this" & vbCrLf & vbCrLf Debug.Print (s & Len(s)) s = Left(s, Len(s) - Len(vbCrLf)) Debug.Print (s & Len(s)) End Sub 从头上删除 trim(string)从前面移除


53
投票
Right$(myString, 2)

此代码从代码中取出所有换行符

如果你只想要最后一个:

Sub linebreak(myString)
    If Len(myString) <> 0 Then
        If Right$(myString, 2) = vbCrLf Or Right$(myString, 2) = vbNewLine Then 
            myString = Left$(myString, Len(myString) - 2)
        End If
    End If
End Sub

是你如何尝试好的方式。


更新:

换行= ASCII 10,换页= ASCII 12和回车= ASCII 13.这里我们清楚地看到我们都知道的:PC来自(电动)打字机

vbLf是Chr(10)并且表示光标向下跳一行(打字机:转动滚轮)vbCr是Chr(13)表示光标跳到开头(打字机:拉回滚动)

在DOS中,无论如何,换行符总是VBCrLf或Chr(13)&Chr(10),但是例如还有VB中的文本框。

另一方面,在Excel单元格中,换行符仅为VBLf,即使没有vbCr,第二行也会从第一个位置开始。使用vbCrLf然后更深入一个单元格。

所以它取决于你从哪里读取并从中获取字符串。如果你想在你的tring中删除所有的vbLf(Char(10))和vbCr(Char(13)),你可以这样做:

str = Replace(str, vbLf, "")

如果你只想删除最后一个,你可以测试这样做:

If Right(str, 1) = vbLf Then str = Left(str, Len(str) - 1)

6
投票

当您使用Excel时,您不需要VBA来实现这一点,您可以简单地使用内置的“Clean()”函数,这将删除回车符,换行符等,例如:

strText = Replace(Replace(strText, Chr(10), ""), Chr(13), "")

4
投票

可以通过这种方式从VBA调用Clean函数:

If Right(str, 1) = vbLf or Right(str, 1) = vbCr Then str = Left(str, Len(str) - 1)

但是,如=Clean(MyString) 所示,CLEAN函数旨在从文本中删除7位ASCII代码(值0到31)中的前32个非打印字符。在Unicode字符集中,还有其他非打印字符(值127,129,141,143,144和157)。 CLEAN函数本身不会删除这些额外的非打印字符。

Rick Rothstein已编写代码来处理这种情况Range("A1").Value = Application.WorksheetFunction.Clean(Range("A1"))这样:

here

4
投票

只是这个:

here

3
投票
Function CleanTrim(ByVal S As String, Optional ConvertNonBreakingSpace As Boolean = True) As String
  Dim X As Long, CodesToClean As Variant
  CodesToClean = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, _
                       21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 129, 141, 143, 144, 157)
  If ConvertNonBreakingSpace Then S = Replace(S, Chr(160), " ")
  For X = LBound(CodesToClean) To UBound(CodesToClean)
    If InStr(S, Chr(CodesToClean(X))) Then S = Replace(S, Chr(CodesToClean(X)), "")
  Next
  CleanTrim = WorksheetFunction.Trim(S)
End Function

1
投票

替换(yourString,vbNewLine,“”,,, vbTextCompare)


1
投票

我知道这篇文章已经很老了,但我找不到任何能做到这一点的东西。所以我终于从所有的论坛中把它放在了一起。

这将从左侧和右侧删除所有换行符,并删除任何空行。然后修剪一切看起来不错。改变你认为合适的方式。如果有兴趣的话,我还会删除All Line Breaks。 TY

str = Replace(str, vbCrLf, "")

0
投票
mystring = Replace(mystring, Chr(10), "")
© www.soinside.com 2019 - 2024. All rights reserved.