字符串-任何等效于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中用更少的行来做同样的事情?

Taylor K. asked 2020-08-11T02:22:29Z
6个解决方案
72 votes

我不相信有任何明确的STRINGPADRIGHT函数,但是您可以结合使用SPACELEFTRIGHT964在字符串前添加空格,然后获取正确的X个字符。

帕莱夫特

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

如果要使用字符而不是空格,则可以使用STRING代替空格(带有X的左键盘下面的示例):

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

帕德莱特

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

strOrdNo = LEFT(strOrdNo & String(8, "X"), 8)
LittleBobbyTables answered 2020-08-11T02:22:48Z
15 votes

您可以使用这些。 将它们放在公共模块中

'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
Brad answered 2020-08-11T02:23:12Z
7 votes

由于我们通常在左侧进行填充,因此Format()函数更短,更简单:

Format(number, "    ")

Format(number, "00")
Sulaiman answered 2020-08-11T02:23:32Z
5 votes
Format("abc","!@@@@@@") ' width >= 6; pad right side with spaces
Format("abc","@@@@@@") ' width >= 6; pad left side with spaces
Ernie Thomason answered 2020-08-11T02:23:47Z
3 votes

您还可以在VBA中使用固定长度的字符串:

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

尽管这仅对右侧的填充有用。

Sam answered 2020-08-11T02:24:11Z
1 votes

我通过重新分配变量解决了问题。
在我的代码中,我从工作簿单元格获取数据并将其限制为5个字符(如有必要,请填充足够的0 ..):

MB = Right(String(5, "0") & Worksheets("HOME").Range("b3"), 5)
MB = Right(MB, 5)
cco answered 2020-08-11T02:24:36Z
translate from https://stackoverflow.com:/questions/12060347/any-method-equivalent-to-padleft-padright