#excel #vba #date #replace
#excel #vba #Дата #заменить
Вопрос:
Я пытался заменить все «-» на «/» в моей электронной таблице Excel с помощью VBA, но это работает не так, как я хочу. Пожалуйста, отправьте справку:’)
Проблема: ячейки, содержащие даты в формате 00-00-0000, изменяются на 00.00.0000 вместо желаемого формата 00/00/0000. Результаты будут такими же, даже если я сделаю это вручную, используя функцию поиска и замены Excel.
Некоторая информация о ячейках даты:
- Они находятся в «общем» формате и меняются на формат «Дата» (некоторые по-прежнему остаются общими) после запуска кода
Код:
Sub FindReplace()
Dim X, Y As Range
Set X = Range("A2").CurrentRegion
For Each Y In X.Cells
Y = Replace(Y, "-", "/")
Next Y
End Sub
Спасибо за чтение 🙂
Комментарии:
1. Использовать
Replace(Y, "-", "/")
? В настоящее время вы заменяете точку, а не тире.2. Извините, что я виноват, но код по-прежнему не работает даже с dash
3. Вы можете попробовать использовать функцию ДАТЫ . Как расположены ваши значения? ДД / ММ / ГГГГ или ММ / ДД / ГГГГ или что-то еще?
4. можете ли вы опубликовать некоторые примеры данных?
5. @EvilBlueMonkey. Я попробовал функцию даты вручную, но она также не дает мне формат DD / MM / YYYY, который мне требовался.
Ответ №1:
Не просматривая данные, вы можете попробовать это…
Sub FindReplace()
Dim x, y As Range
Set x = Range("A2").CurrentRegion
For Each y In x.Cells
y = format(y,"dd/mm/yyyy")
Next y
End Sub
Комментарии:
1. Я попробовал предложенный вами код, но он выдал мне ошибку времени выполнения 6; Ошибка переполнения. x.x Данные представляют собой просто некоторые числа в ДД / ММ / ГГГГ или ДД / ММ / ГГГГ ЧЧ: ММ и в общем формате. Если я не ошибаюсь, некоторые знают эти данные как даты, отформатированные в тексте? Однако, даже когда я попытался найти и заменить даты в формате даты с помощью приведенного выше кода, это все равно не сработало.
2. Второй y в формуле в нижнем регистре. Попробуйте изменить его на верхний регистр.
3. @EvilBlueMonkey Да, вы правы, я изменил его. Спасибо.
Ответ №2:
Предполагая, что ваши исходные данные также находятся в формате ДД.ММ.ГГГГ, я написал эту подпрограмму:
Sub FindReplace()
Dim RngRange01 As Range
Dim RngTarget As Range
Set RngRange01 = Range("A2").CurrentRegion
For Each RngTarget In RngRange01
RngTarget.Value = DateSerial(Right(RngTarget.Value, 4), Mid(RngTarget.Value, 4, 2), Left(RngTarget.Value, 2))
Next RngTarget
End Sub
Я протестировал его в диапазоне с датами, написанными с точкой вместо косой черты, и, похоже, это работает для меня.
Дополнительный совет: я бы не использовал одну букву для идентификации переменной. Их действительно сложно заменить и отследить. По крайней мере, 3 буквы, которые вы обычно не находите в остальной части кода, намного лучше. Что-то вроде xyz
или sss
или qwe
. Еще лучше, если вы добавите небольшой тег, чтобы запомнить, какие это переменные (например Rng
, для диапазона Byt
, для байта или Dbl
для double).
Комментарии:
1. К сожалению, это также не сработало для меня, поскольку проблема связана с моими региональными и языковыми настройками. Мне нужно было только изменить свой формат на английский (Великобритания), и проблема исчезла бы ~ Спасибо за ваш ответ и советы!!
2. Какие языковые / региональные настройки у вас есть? Возвращает ли подпрограмма какую-либо ошибку? Дает ли это вам какой-либо результат?
3. Извините за поздний ответ @EvilBlueMonkey, мои языковые / региональные настройки были на французском (Швейцария). Да, это так. Я получил ошибку времени выполнения ’13’: несоответствие типов.
4. Хм, я бы сказал, что он пытается скрыть данные, которые не должны быть датой. Вы можете либо попытаться лучше определить свой диапазон, не включая ничего, кроме дат, либо попытаться поставить a
On Error Resume Next
перед циклом For-Next. Я бы предложил первое.