Excel использует дату / время с несколькими различными форматами региона.VB?Формулы? - PullRequest
0 голосов
/ 08 сентября 2011

Я в настоящее время в США EST и формат даты, используемый в моей компании

Месяц / День / Год Час: Минуты: сек

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

День / Месяц / Год Час: Мин: сек

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

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

Я думаю об использовании Visual Basic для итерации, используя уникальный идентификатор каждой строки, чтобы определить, является ли она Великобританией или США. Я на правильном пути?

Иначе для этого есть формула или метод Excel?

Заранее спасибо

1 Ответ

4 голосов
/ 08 сентября 2011

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

Так что если у вас источник даты, у вас все хорошо.Если это строка, я бы сделал это:

  1. преобразовать исходную строку с помощью = DATEVALUE () ... это будет работать, если название месяца написано на системном языке
  2. если временно изменить системный язык невозможно, следующим будет = DATE (yy, mm, dd), в результате чего аргументы должны быть созданы с помощью = LEFT (...), = MID (...), = RIGHT (...)
  3. в конечном итоге вы должны преобразовать названия месяцев с одного языка на другой, как в следующем примере:

    A1 содержит JANFEBMAR...

    A2 содержит JÄNFEBMÄR...

    формула преобразования =MID(A2;FIND("MAR";A1);3)

Редактировать в ответ на комментарий Кайла:

Помимо того факта, что немецкий (австрийский) языковой стандарт сразу распознает эту строку как дату, давайте разберем проблему на жевательные кусочки.Ваша строка даты обозначена в A1

  1. , временная часть проста: это аддитивный термин TIMEVALUE(RIGHT(A1;8))
  2. , разделяющий дату, с которой нам приходится бороться с разделителями в динамическом режиме.местах.Положение разделителей можно найти с помощью

    2a) =FIND("/";A1;1) ... найти положение первого разделителя

    2b) =FIND("/";A1;4) ... 2-й разделитель, при этом первая цифра можетбыть только 1 или 2 символами и без пробелов раньше - в качестве альтернативы мы должны заменить константу "4" на член (2a) + 1

    2c) =FIND("/";A1;FIND("/";A1;1)+1) ... более безопасная версия (2b)

  3. теперь у нас есть большинство вещей, готовых построить середину левой и правой стороны

    3a) =LEFT(A1;FIND("/";A1;1)-1) ... 1-ая цифра ... длина (2a) -1

    3b) =MID(A1;FIND("/";A1;1)+1;FIND("/";A1;FIND("/";A1;1)+1)-FIND("/";A1;1)-1) ... 2-я цифра ... начало: = (2a) +1, num_Chars = (2c) - (2a) -1

    3c) =MID(A1;FIND("/";A1;FIND("/";A1;1)+1)+1;4) ... 3-я цифра ... start: = (2c) +1, num_chars = 4 - если год всегда равен 4 цифрам.более абстрактный случай был бы (3b) с (2c), являющимся =FIND() для первого пробела

Как интерпретировать особенно 1-ю и 2-ю цифру (то есть MM / DD илиДД / ММ) зависит от вас.

  1. теперь самое интересное, то есть объединение всех этих формул в одном монстре, чтобы получить дату

    4a), начав с ввода= ДАТА (1; 2; 3)

    4b) заменить 1 на (3c), 2 на (3b), 3 на (3a) ... не копировать начальный "="

    4c) =DATE(MID(A1;FIND("/";A1;FIND("/";A1;1)+1)+1;4);MID(A1;FIND("/";A1;1)+1;FIND("/";A1;FIND("/";A1;1)+1)-FIND("/";A1;1)-1);LEFT(A1;FIND("/";A1;1)-1))+TIMEVALUE(RIGHT(A1;8))

Вы не видите время, только дату!.... Не забудьте указать пользовательский формат ячейки, отображающий дату и время, т.е. "ДД.ММ.ГГГГ чч: мм: сс"

ОК ... эта формула абсолютно нечитаема и непонятна, поэтомуВы можете захотеть отображать промежуточные результаты в (временных) полях / столбцах.

И эта формула будет работать, только если входная строка более или менее строго отформатирована.Он может справиться с некоторыми добавленными пробелами в первом и втором числах, но, начиная с YYYY, становится сложнее.Затем необходимо включить другие понятия, такие как удаление всех пробелов на =SUBSTITUTE(A1;" ";"") перед всеми остальными и т. Д. И т. Д.

Подсказка : я всегда строю сложные формулы, как это: изолировать терминыв отдельных клетках, а затем объединить их в одну большую формулу

...