WorksheetFunction.Trim Удаление ведущих нулей - PullRequest
1 голос
/ 24 мая 2019

Я вижу много вопросов, спрашивающих, как удалить ведущие нули, но я в некотором затруднении пытаюсь сохранить мой.

Я пытаюсь запустить макрос Application.WorksheetFunction.Trim общего назначения на серии различных таблиц со смешанными типами данных. Один из этих столбцов будет иметь разные номера длины, некоторые из которых имеют начальные нули, а у меня есть столбец дат. Я могу сохранить нули, форматируя ячейку за ячейкой как текст при запуске, но это, кажется, нарушает мои даты. Я не добился большого успеха, только переключив его в текст, если в ячейке нет даты, попробовав:

If Cell.NumberFormat <> "d-mmm-yy" Or Cell.NumberFormat <> "dd-mmm-yy" Then
    Cell.NumberFormat = "@"
End If

Я пытался принудительно ввести 'в значение ячейки с помощью

If Left(Cell.Value, 1) = "0" Then
    Cell.Value = "'" & Cell.Value
    Debug.Print Cell.Value
End If

Но мне, кажется, не очень повезло. Я пытаюсь создать небольшое решение, которое не требует изменений в электронной таблице, так как другие пользователи добавляют больше информации.

Редактировать: Есть ли способ обнаружить ячейку, уже отформатированную как Дата, и, если это так, избегать перезаписи ее как Текст? В качестве продолжения этого, чтобы сэкономить время в будущем, пометьте его как текст, если его еще нет И это также не дата.

Редактировать 2: Пример - на одном рабочем листе могут быть строки, такие как
ABCD '012345 TL PT1234 NS CA
ABCD 112345 TL PT1235 NS CA
ACBD 0890 TL PT1238 NS CA

тогда как другой будет больше похож на

ABCD DR ROBB Паспорт Боба Робертсона CA M 1/12/1990 (отображается как 1-Dec-90) AA1234501 CA ROBER0123456789 NS CA

1 Ответ

0 голосов
/ 24 мая 2019

Могут быть и другие проблемы с предоставлением примера данных, wpul; помогите объяснить вашу ситуацию, но я начну со следующего.

If Cell.NumberFormat <> "d-mmm-yy" Or Cell.NumberFormat <> "dd-mmm-yy" Then
    Cell.NumberFormat = "@"
End If

Вы попали в общую логическую «дыру». Использование оператора Or здесь неправильно. Если числовой формат ячейки равен d-mmm-yy, то это не dd-mmm-yy, и наоборот. Кроме того, любой другой формат чисел не является ни тем, ни другим. По сути, числовой формат каждой ячейки, независимо от того, что это, не будет одним из вариантов, поэтому проверка всегда верна. Вы хотите оператор And.

If Cell.NumberFormat <> "d-mmm-yy" AND Cell.NumberFormat <> "dd-mmm-yy" Then
    Cell.NumberFormat = "@"
End If

Выше указано, что числовой формат не может быть или"d-mmm-yy" или "dd-mmm-yy".

Тем не менее, свойство .NumberFormat ячейки может иметь значение General и все еще быть истинной датой. Чтобы обойти этот недостаток, была упомянута функция IsDate. Это зависит от региональной информации, прикрепленной к стандартному свойству .Value ячейки (не к свойствам .Text или .Value2).

If NOT ISDATE(Cell.Value) Then
    Cell.NumberFormat = "@"
End If

Я нашел IsDate довольно надежным даже при тестировании текста, который выглядит только как даты.

Q. Если ячейки с начальными нулями не отформатированы в виде текста и не имеют пользовательских форматов чисел, которые приводят к начальным нулям, то что же удерживает ведущие нули там на первом месте?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...