52

文字列が改行で終わる場合、文字列から改行を削除したいと思います。

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
4

14 に答える 14

88

概要

str = Replace(str, vbLf, "")

このコードは、コードからすべての改行を取り除きます

最後のものが必要な場合:

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

あなたがOKを試した方法です。


背景情報

ラインフィード=ASCII10フォームフィード= ASCII12キャリッジリターン=ASCII13。ここでは、私たち全員が知っていることがはっきりとわかります。PCは(電気)タイプライターから来ています。

vbLfis Chr (10)andは、カーソルが1行下にジャンプすることを意味します(タイプライター:ローラーを回します)

vbCrisChr (13)とは、カーソルが先頭にジャンプすることを意味します(タイプライター:ロールを引き戻す)

DOSでは、とにかくファイルでVBCrLfは改行は常にまたはですが、たとえばVBのテキストボックスでも同様です。Chr (13) & Chr (10)

一方、Excelセルでは、改行はのみVBLfであり、2行目は。がなくても最初の位置から始まりvbCrます。次に、vbCrLf1つのセルを深くします。

したがって、文字列をどこから読み取って取得するかによって異なります。文字列内のすべてのvbLfChr(10))とvbCrChar(13))を削除する場合は、次のように実行できます。

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

最後のものだけを削除したい場合は、次のようにテストできます。

If Right(str, 1) = vbLf or Right(str, 1) = vbCr Then str = Left(str, Len(str) - 1)
于 2012-04-05T11:19:24.527 に答える
7

Excel を使用しているため、これを実現するために VBA は必要ありません。組み込みの「Clean()」関数を使用するだけで、キャリッジ リターンやライン フィードなどが削除されます。

=Clean(MyString)
于 2012-04-05T09:11:57.827 に答える
5

Clean 関数は、次の方法で VBA から呼び出すことができます。

Range("A1").Value = Application.WorksheetFunction.Clean(Range("A1"))

ただし、ここに書かれているように、CLEAN 関数は、7 ビット ASCII コード (値 0 から 31) の最初の 32 個の非印刷文字をテキストから削除するように設計されています。Unicode 文字セットには、追加の非印刷文字 (値 127、129、141、143、144、および 157) があります。CLEAN 関数自体は、これらの追加の印刷されない文字を削除しません。

Rick Rothsteinは、この状況 もこのように処理するコードを作成しました。

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
于 2015-09-23T10:38:34.417 に答える
0
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
于 2014-01-12T08:02:04.350 に答える