只是想知道,VBA中有没有与VB .NET的PadLeft和PadRight方法等效的东西?
到目前为止,每当我想要一个字符串并使其具有前导空格的固定长度时,我会根据字符串的长度执行For ... Next循环。
例如,我将使用以下代码将字符串格式化为带有前导空格的8个字符:
intOrdNoLen = Len(strOrdNo)
For i = 1 To (8 - intOrdNoLen) Step 1
strOrdNo = " " & strOrdNo
Next
有没有办法在VBA中用更少的行做同样的事情?
答案 0 :(得分:69)
我不相信有任何明确的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)
答案 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。