Excel VBAでファイルを1行ずつ読み込みます。私は、例えば、いくつかの文字列を持っている文字列の前後の空白の数を数えます。
、
" ooo"
" ooo "
私は、文字列の前の空スペースの数を見つけたいです。トリムを使うと、文字列の前と後ろの両方から空白が削除されます。
Excel VBAでファイルを1行ずつ読み込みます。私は、例えば、いくつかの文字列を持っている文字列の前後の空白の数を数えます。
、
" ooo"
" ooo "
私は、文字列の前の空スペースの数を見つけたいです。トリムを使うと、文字列の前と後ろの両方から空白が削除されます。
Function test(s As String) As Integer
Dim str As String
str = "[abcdefghijklmnopqrstuvwxyz]"
Dim spaceCounter As Integer
For i = 1 To Len(s)
If Not Mid(s, i, 1) Like str Then
spaceCounter = spaceCounter + 1
Else
Exit For
End If
Next i
test = spaceCounter
End Function
を:なぜなど、代わりにTrim
、LTrim
のこの機能を使用できますか?
the full explanationを要約すると、すべてのスペースがTrim
で削除されるわけではありません。しかし、この機能で削除されます。
この例(Iは、説明の目的のためにPhilS' solutionを借りましょう)考えてみましょう:私たちは、文字列は明らかに3つのスペースが含まれていることを確認することができますが、解決策を使用してここ
" a"
2
3
:
Sub testSpaceRemoval()
Dim str1 As String
str1 = " " & Chr(32) & Chr(160) & "a"
Debug.Print Chr(34) & str1 & Chr(34)
Debug.Print NumberOfLeadingSpaces(str1)
Debug.Print test(str1)
End Sub
結果LTrim
は数えただけです。
だから何を使うのですか?
まあ、それは異なります。あなたが壊れていない文字を取得しないことを知っているデータセットをお持ちの場合は、好きなだけTrim
を使用してください!改行しない文字を入力できると思うならば、Trim
だけでは十分ではありません。
リーディング、末尾、または複数の埋め込みスペース文字(Unicode文字セットは、32の値および160)、または非印刷文字(ユニコード:、上にリンクされた説明から引用されているため
文字は、外を見るために文字セットの値は0〜31、127、129、141、143、144、および157)
Trim
32 is the regular space and 160 is a non-breaking spaceので、chr(160)
上記示されたように(chr(32)
を除去)はできません。
あなたの後ろをカバーするためにこだわるなら、このトータルソリューションを検討:OPの特定の質問について
Function cleanSpecialCharacters(str As String) As String
bannedChars = Chr(127) & "," & Chr(129) & "," & Chr(141) & "," & Chr(143) & "," & Chr(144) & "," & Chr(157) & "," & Chr(160)
str = Application.WorksheetFunction.Clean(str)
str = Application.WorksheetFunction.Trim(str)
For Each c In Split(bannedChars, ",")
str = Replace(str, c, "")
Next
cleanSpecialCharacters = str
End Function
を、それはもう少し仕立てでなければならないであろう。
Sub main()
Dim strng As String
Dim i As Long
strng = " ooo "
i = 1
Do While Mid(strng, i, 1) = " "
i = i + 1
Loop
MsgBox "number of front empty spaces: " & i - 1
End Sub
またはLTrim
機能を使用します。人気の要求によって
Sub main2()
Dim strng As String
strng = " ooo "
MsgBox "number of front empty spaces: " & Len(strng) - Len(LTrim(strng))
End Sub
ありがとうございます。LTrimはスペースだけを前面から削除しますか? – Jeevan
あなたはすぐに直接ウィンドウに 'Len(LTrim(" ooo "))'と入力することでそれを見ることができます – user3598756
ありがとう、それは助けました。私は働いています。 – Jeevan
Sub blanks()
cadena = Cells(1, 1)
i = Len(cadena)
Do Until Mid(cadena, i, 1) <> " "
If Mid(cadena, i, 1) = " " Then contador = contador + 1
i = i - 1
Loop
Cells(2, 1) = contador
End Sub
あなたはLTrim
とRTrim
機能を使用することができます。 - 文字列をループして文字比較をするよりも速いと思います。
Public Function NumberOfLeadingSpaces(ByVal theString As String) As Long
NumberOfLeadingSpaces = Len(theString) - Len(LTrim(theString))
End Function
Public Function NumberOfTrailingSpaces(ByVal theString As String) As Long
NumberOfTrailingSpaces = Len(theString) - Len(RTrim(theString))
End Function
そのパターンは '[a-z0-9 ] 'btw –
私はそれを正規表現に使うが、yは知らなかったouは 'Like 'でもそれを使うことができます。ヘッドアップをありがとう。 – Vegard
ええ、それは感謝することができますようないくつかのものの一つです! –