5

文字列の最初と最後から空白を削除するこの関数を作成しましたが、なぜ機能しないのでしょうか?

Public Function PrepareString(TextLine As String)

    Do While Left(TextLine, 1) = " " ' Delete any excess spaces
        TextLine = Right(TextLine, Len(TextLine) - 1)
    Loop
    Do While Right(TextLine, 1) = " " ' Delete any excess spaces
        TextLine = Left(TextLine, Len(TextLine) - 1)
    Loop

    PrepareString = TextLine

End Function
4

3 に答える 3

15

あなたの機能をテストしましたが、私のマシンでは問題なく動作します。

Trim()同じことを行う UDF を作成する代わりに、これを行う組み込み関数を使用できます。

Trim(TextLine)

参考:http ://www.techonthenet.com/excel/formulas/trim.php

于 2012-09-29T13:24:24.330 に答える
3

これはどう。Application.Trim が削除しない複数の空白を削除する Worksheetfunction.Trim の使用に注意してください。

Option Explicit

Dim oRegex As Object

Sub test()
Dim dirtyString As String

    dirtyString = "   This*&(*&^% is_                          The&^%&^%><><.,.,.,';';';  String   "
    Debug.Print cleanStr(dirtyString)
End Sub

Function cleanStr(ByVal dirtyString As String) As String

    If oRegex Is Nothing Then Set oRegex = CreateObject("vbscript.regexp")
    With oRegex
        .Global = True
        'Allow A-Z, a-z, 0-9, a space and a hyphen -
        .Pattern = "[^A-Za-z0-9 -]"
        cleanStr = .Replace(dirtyString, vbNullString)
    End With
    cleanStr = WorksheetFunction.Trim(cleanStr)
End Function
于 2012-09-29T14:24:25.483 に答える
1

なぜこれではないのですか?

Public Function PrepareString(TextLine As String)
    PrepareString = Trim(TextLine)
End Function

Alexandre/slaver113 は、組み込み関数を UDF 内にラップする意味がないという点で完全に正しいです。上記を行った理由は、UDF を機能させる方法を指摘するためです。実際のシナリオでは、UDF をそのような方法で使用することは決してありません。:)

于 2012-09-29T13:24:17.810 に答える