ただ不思議に思う、VBAにVB .NETのPadLeftメソッドとPadRightメソッドに相当するものはありますか?
今のところ、文字列を取得し、先頭のスペースで固定長にしたいときはいつでも、文字列の長さに基づいてFor ... Nextループを実行します。
たとえば、次のコードを使用して、先頭のスペースを含む8文字に文字列をフォーマットします。
intOrdNoLen = Len(strOrdNo)
For i = 1 To (8 - intOrdNoLen) Step 1
strOrdNo = " " & strOrdNo
Next
VBAでより少ない行でこれと同じことを行う方法はありますか?
明示的なPADLEFT
またはPADRIGHT
関数があるとは思わないが、SPACE
とLEFT
または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)
これらを使用できます。それらを公開モジュールに入れる
'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
通常、左側にパディングするため、Format()関数は短く、シンプルになります。
Format(number, " ")
Format(number, "00")
Format("abc","!@@@@@@") ' width >= 6; pad right side with spaces
Format("abc","@@@@@@") ' width >= 6; pad left side with spaces
VBAで固定長文字列を使用することもできます。
Dim myString As String * 10
myString = "test"
Debug.Print myString, "(" & Len(myString) & ")" '// Prints "test (10)"
ただし、これは右側のパディングにのみ役立ちます。