文字列が改行で終わる場合、文字列から改行を削除したいと思います。
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
str = Replace(str, vbLf, "")
このコードは、コードからすべての改行を取り除きます
最後のものが必要な場合:
If Right(str, 1) = vbLf Then str = Left(str, Len(str) - 1)
あなたがOKを試した方法です。
ラインフィード=ASCII10
、フォームフィード= ASCII12
、キャリッジリターン=ASCII13
。ここでは、私たち全員が知っていることがはっきりとわかります。PCは(電気)タイプライターから来ています。
vbLf
is Chr (10)
andは、カーソルが1行下にジャンプすることを意味します(タイプライター:ローラーを回します)
vbCr
isChr (13)
とは、カーソルが先頭にジャンプすることを意味します(タイプライター:ロールを引き戻す)
DOSでは、とにかくファイルでVBCrLf
は改行は常にまたはですが、たとえばVBのテキストボックスでも同様です。Chr (13) & Chr (10)
一方、Excelセルでは、改行はのみVBLf
であり、2行目は。がなくても最初の位置から始まりvbCr
ます。次に、vbCrLf
1つのセルを深くします。
したがって、文字列をどこから読み取って取得するかによって異なります。文字列内のすべてのvbLf
(Chr(10)
)とvbCr
(Char(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)
Excel を使用しているため、これを実現するために VBA は必要ありません。組み込みの「Clean()」関数を使用するだけで、キャリッジ リターンやライン フィードなどが削除されます。
=Clean(MyString)
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
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