1

Excel. Преобразование даты

Всем привет!
Профи, подскажите! Пишу макрос в Excel, тем самым автоматизируя определенную работу. Я получаю некий файл, затем копирую его в свой файл и оттуда, с помощью макросов, беру то, что мне не надо. Столкнулся со следующей проблемой, в исходном файле дата представлена как dd.mm.24. И при копировании эксель спрашивает в какой формат преобразовать, dd.mm.1924 или dd.mm.2024? Через кнопку ошибки можно одним кликом это поправить, но таких мест на листе несколько, а мне необходимо всё это запихнуть в макрос. Как можно решить данную задачу?

P.S. мне нужна именно dd.mm.2024

Заранее всем огромное спасибо!

Лига помощи Excel

111 постов918 подписчиков

0
Автор поста оценил этот комментарий

Что и как копируете, что и как вставляете?

Возможны разные варианты

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

2. Копировать можно .Value, .Value2, .Text - в зависимости от п.1 они будут давать разный результат.

Соответственно, в зависимости от того, что скопировали, обрабатывать результат нужно по-разному. Ну и вставлять тоже - в виде текста? В виде числового значения с последующим форматированием в виде даты?


В первых двух строках - текст, в следующих - даты с разным форматированием.
Value и Value2 отличаются тем, что в случае даты содержат данные разных типов: Date и Double соответственно.


Option Explicit

Sub qwe()

Dim i As Long

For i = 1 To 4

Debug.Print i,

Debug.Print "["; Cells(i, 1).Value; "] = "; TypeName(Cells(i, 1).Value),

Debug.Print "["; Cells(i, 1).Value2; "] = "; TypeName(Cells(i, 1).Value2),

Debug.Print "["; Cells(i, 1).Text; "] = "; TypeName(Cells(i, 1).Text)

Next

End Sub


Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Решил так. Ни разу не программист, поэтому как смог. Работает)


Dim cell As Range

Dim D As Date

For Each cell In Range("D2:D3000, F2:F3000")

D = cell.Value

If cell.Value <> "" Then

cell.Value = D

End If

Next

0
Автор поста оценил этот комментарий

Что и как копируете, что и как вставляете?

Возможны разные варианты

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

2. Копировать можно .Value, .Value2, .Text - в зависимости от п.1 они будут давать разный результат.

Соответственно, в зависимости от того, что скопировали, обрабатывать результат нужно по-разному. Ну и вставлять тоже - в виде текста? В виде числового значения с последующим форматированием в виде даты?


В первых двух строках - текст, в следующих - даты с разным форматированием.
Value и Value2 отличаются тем, что в случае даты содержат данные разных типов: Date и Double соответственно.


Option Explicit

Sub qwe()

Dim i As Long

For i = 1 To 4

Debug.Print i,

Debug.Print "["; Cells(i, 1).Value; "] = "; TypeName(Cells(i, 1).Value),

Debug.Print "["; Cells(i, 1).Value2; "] = "; TypeName(Cells(i, 1).Value2),

Debug.Print "["; Cells(i, 1).Text; "] = "; TypeName(Cells(i, 1).Text)

Next

End Sub


Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо за ответ, попробую. Копирую весь лист целиком и его же вставляю. Далее с помощью макроса все становится в нужные столбцы/строки/ячейки.

0
Автор поста оценил этот комментарий

Его нужно превратить в такой:

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Макрос Range("D2:D10").NumberFormat = "d/m/yyyy" превращает ячейки в формат даты, но значение оставляет как 23.09.24

показать ответы
0
Автор поста оценил этот комментарий

Вот так выглядит в исходнике (общий формат):

Иллюстрация к комментарию
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Его нужно превратить в такой:

Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий

это странное поведение...
в экселе дата для вычислений используется как число - если в нужном столбце у тебя именно дата представлена в виде dd.mm.yy - то такого быть не должно, а вот если в исходном файле вместо даты какая-то дичь изначально датой не являющаяся но представленная в виде dd.mm.yy то эксель просто реально может не узнавать год - я вижу решением только указать дату в явную в исходнике (т.е. руками преобразовать все поля в реальную дату чтобы эксель понимал сколько там дней/месяцев/лет путём подмены dd.mm.yy на dd.mm.20yy) - ну или писать костыльку которая сделает это за тебя перед основной обработкой


ЗЫ:

если есть кусок исходного файла и код не стрёмно показать - выложи сюда - глянем чё как

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Вот так выглядит в исходнике (общий формат):

Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий

В исходном файле сделайте поиск и замена,
найти: .24
заменить на: .2024

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Делаю как раз с целью избавиться от похожего шага.

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества