Любой метод, эквивалентный PadLeft / PadRight?

31

Просто интересно, есть ли эквивалент в VBA для методов VB.NET PadLeft и PadRight?

Как сейчас, всякий раз, когда я хочу взять строку и сделать ее фиксированной длиной с ведущими пробелами, я делаю цикл For... Next на основе длины строки.

Например, я бы использовал следующий код для форматирования строки до 8 символов с ведущими пробелами:

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

Есть ли способ сделать то же самое в меньшем числе строк в VBA?

Теги:
string

5 ответов

54
Лучший ответ

Я не считаю, что существуют явные функции 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)
  • 0
    Ух ты, я уже знал, как это сделать. Долгий день на работе, наверное. Определенно мой предпочтительный метод.
  • 2
    Основанный на описании PadLeft здесь msdn.microsoft.com/en-us/library/92h5dc07(v=vs.110).aspx , этот код не соответствует поведению PADLEFT, так как пример: str.PadLeft (2, " сорок два ") вернул бы" fo "вместо" сорок два ". Это не произойдет в оригинальном коде.
Показать ещё 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
  • 1
    Вы можете просто добавить проверку в функцию, чтобы увидеть, длиннее ли введенная строка, чем длина ввода, и обработать ее соответствующим образом.
6

Поскольку мы обычно размещаем на левой стороне, функция Format() короче, проще:

Format(number, "    ")

Format(number, "00")
  • 1
    Не работает Попробовать ? "!" & Format("a"," ") & "!" и вы получите !a! и с номером ? "!" & Format(1.23," ") & "!" дает ! !
  • 0
    При форматировании строк, заполненных пробелами, вместо них используйте символ-заполнитель символа «@». См .: Функция форматирования (VBA)
2
Format("abc","!@@@@@@") ' width >= 6; pad right side with spaces
Format("abc","@@@@@@") ' width >= 6; pad left side with spaces
  • 0
    Красиво и легко. Однако для очень больших объемов данных он в 2-3 раза медленнее, чем метод ВЛЕВО / ВПРАВО.
2

Вы также можете использовать строки фиксированной длины в VBA:

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

хотя это полезно только для заполнения справа.

  • 0
    Это очень полезно для заполнения данных в Excel для загрузки символьных строк длиной более 255 в SQL Server. Спасибо за чаевые!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню