任何等同于PadLeft / PadRight的方法?

时间:2012-08-21 17:52:51

标签: string vba

只是想知道,VBA中有没有与VB .NET的PadLeft和PadRight方法等效的东西?

到目前为止,每当我想要一个字符串并使其具有前导空格的固定长度时,我会根据字符串的长度执行For ... Next循环。

例如,我将使用以下代码将字符串格式化为带有前导空格的8个字符:

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

有没有办法在VBA中用更少的行做同样的事情?

7 个答案:

答案 0 :(得分:69)

我不相信有任何明确的PADLEFTPADRIGHT函数,但您可以使用SPACELEFTRIGHT的组合来在您的字符串前面添加空格,然后获取正确的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)

答案 1 :(得分:14)

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

'如果输入字符串长于总长度

,则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

答案 2 :(得分:6)

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

Format(number, "    ")

Format(number, "00")

答案 3 :(得分:3)

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

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

虽然这只对右边的填充有用。

答案 4 :(得分:3)

Format("abc","!@@@@@@") ' width >= 6; pad right side with spaces
Format("abc","@@@@@@") ' width >= 6; pad left side with spaces

答案 5 :(得分:1)

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

MB = Right(String(5, "0") & Worksheets("HOME").Range("b3"), 5)
MB = Right(MB, 5)

答案 6 :(得分:0)

合并前两个答案(感谢 LittleBobbyTables Brad ),并注意辅助功能 max ,我建议:

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

Function PadRight(ByVal text As Variant, ByVal totalLength As Integer, ByVal padCharacter As String) As String
    PadRight = Left(CStr(text) & String(totalLength, padCharacter), max(totalLength, Len(CStr(text))))
End Function

Public Function max(ByVal x As Variant, ByVal y As Variant) As Variant
  max = IIf(x > y, x, y)
End Function

totalLength最好命名为minimumLength,因为总是返回整个原始字符串,这可能导致结果长于minimumLength。