web-dev-qa-db-ja.com

PadLeft / PadRightと同等のメソッドはありますか?

ただ不思議に思う、VBAにVB .NETのPadLeftメソッドとPadRightメソッドに相当するものはありますか?

今のところ、文字列を取得し、先頭のスペースで固定長にしたいときはいつでも、文字列の長さに基づいてFor ... Nextループを実行します。

たとえば、次のコードを使用して、先頭のスペースを含む8文字に文字列をフォーマットします。

intOrdNoLen = Len(strOrdNo)
For i = 1 To (8 - intOrdNoLen) Step 1
    strOrdNo = " " & strOrdNo
Next

VBAでより少ない行でこれと同じことを行う方法はありますか?

41
Taylor K.

明示的なPADLEFTまたはPADRIGHT関数があるとは思わないが、SPACELEFTまたはRIGHTの組み合わせを使用して、文字列を入力してから、正しいX個の文字を取得します。

[〜#〜] padleft [〜#〜]

strOrdNo = RIGHT(Space(8) & strOrdNo, 8)

スペースの代わりに文字が必要な場合は、スペースの代わりにSTRINGを使用できます(下の例はXで左詰めします)。

strOrdNo = RIGHT(String(8, "X") & strOrdNo, 8)

[〜#〜] padright [〜#〜]

strOrdNo = LEFT(strOrdNo & Space(8), 8)

strOrdNo = LEFT(strOrdNo & String(8, "X"), 8)
70

これらを使用できます。それらを公開モジュールに入れる

'NB入力文字列が全長よりも長い場合は失敗

Function PadLeft(text As Variant, totalLength As Integer, padCharacter As String) As String
    PadLeft = String(totalLength - Len(CStr(text)), padCharacter) & CStr(text)
End Function

Function PadRight(text As Variant, totalLength As Integer, padCharacter As String) As String
    PadRight = CStr(text) & String(totalLength - Len(CStr(text)), padCharacter)
End Function
15
Brad

通常、左側にパディングするため、Format()関数は短く、シンプルになります。

Format(number, "    ")

Format(number, "00")
7
Sulaiman
Format("abc","!@@@@@@") ' width >= 6; pad right side with spaces
Format("abc","@@@@@@") ' width >= 6; pad left side with spaces
5
Ernie Thomason

VBAで固定長文字列を使用することもできます。

Dim myString As String * 10
    myString = "test"
    Debug.Print myString, "(" & Len(myString) & ")" '// Prints "test          (10)"

ただし、これは右側のパディングにのみ役立ちます。

3
Sam