Excel VBA изменение формата времени / дня в столбцах - PullRequest
0 голосов
/ 30 мая 2019

Мне нужно изменить формат дня / времени для более чем 9000 записей провайдера. Я новичок в vba и не уверен, каким образом это сделать, поскольку существует более 100 вариантов часов работы провайдера.

Я думал об использовании кнопки, которая создала бы новый столбец, который бы заполнил правильную информацию, но я не уверен, что это правильный путь. Я думал о том, чтобы делать If заявления, но я знаю, что это будет более 100 If заявлений из-за разнообразия рабочих часов.

Текущий формат дня / времени, сгенерированный в Excel:

M 8:30 AM-5:30 PM 
T 8:30 AM-5:30 PM 
W 8:30 AM-5:30 PM 
R 8:30 AM-5:30 PM 
F 8:30 AM-5:30 PM

Мне нужно превратить это в M-F 8:30 AM-5:30 PM

Вот еще один пример

M 7:30 AM-11:00 PM
T 7:30 AM-11:00 PM
W 7:30 AM-11:00 PM
R 7:30 AM-11:00 PM
F 7:30 AM-11:00 PM
S 8:00 AM-9:00 PM

Желаемый конечный результат:

M-F 7:30 AM - 11:00 PM; SA 8:00 AM - 9:00 PM

Ответы [ 2 ]

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

Шаг
1 Заменить - пробелом (столбец C с формулой = ЗАМЕНА (B6, "-", ""))
2 Извлечь день недели (столбец D с формулой = TIMEVALUE (TRIM (MID (ЗАМЕНА (C6, "", REPT ("", LEN (C6))), (1) * LEN (C6) + 1, LEN (C6))) & "" & TRIM (MID (ЗАМЕНА (C6, "",REPT ("", LEN (C6))), (2) * LEN (C6) + 1, LEN (C6))))
3 Время начала извлечения (столбец E с формулой = TIMEVALUE (TRIM (MID (SUBSTITUTE)(C25, "", REPT ("", LEN (C25))), (1) * LEN (C25) + 1, LEN (C25))) & "" & TRIM (MID (ЗАМЕНА (C25, "", REPT)("", LEN (C25))), (2) * LEN (C25) + 1, LEN (C25))))
4 Извлечь время окончания (столбец f с формулой = TIMEVALUE (TRIM (MID (SUBSTITUTE) (C25, "", REPT ("", LEN (C25))), (3) * LEN (C25) + 1, LEN (C25))) & "" & TRIM (СРЕДНИЙ (ЗАМЕНА (C25, "", REPT ("", LEN (C25))), (4) * LEN (C25) + 1, LEN (C25))))
5 Определите, включена ли суббота (D32 с формулой = IF (COUNTIF (D25: D30,«S»), «Да», «Нет»))
6 Get Min Time Start (E32 с формулой = MIN (E25: E29))
7 Get Max Time End (F32 с формулой = MAX (F25): F29))
9 Получить окончательный результат (B34 с формулой = IF (D32 = "Нет", ("MF" & TE)XT (E32, "чч: мм AM / PM") & "-" & TEXT (F32, "чч: мм AM / PM")), ("MF" и TEXT (E32, "чч: мм AM / PM") &"-" & TEXT (F32, "чч: мм AM / PM") & (", SA" & TEXT (VLOOKUP ("S", D25: F30,2, FALSE), "чч: мм AM / PM") & "- "& TEXT (VLOOKUP (" S ", D25: F30,3, FALSE)," чч: мм AM / PM ")))))
Допущения
1 Весь исходный текст отформатирован одинаково
2 Вы ищете самое раннее время начала в массиве
3 Вы ищете самое позднее время окончания в массиве

ПРИМЕЧАНИЯ
1 Это шаги в Excel.Вы можете скопировать их в VBA и поместить их в цикл, если вы выберете
2 «Формулы являются сложными, но гибкими и могут использоваться в качестве шаблонов при исходном изменении данных».
3 Вы можете комбинировать различныеформулы для создания отдельного фрагмента, но их будет довольно сложно читать
4 Лично я бы сделал это в Excel, чтобы я мог просматривать результаты (и искать несоответствующие шаблоны), чтобы их можно было корректировать по мере необходимости.
5 После того, как я проверил свои данные, я скопировал и вставил результаты.
6 Я впервые отвечаю на вопрос на этом форуме, поэтому я надеюсь, что это уместно.

Пример XLSX Я бы приложил электронную таблицу, но не вижу пути.Это может быть запрещено на форуме.

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

В случае, если решение Excel может работать для вас, возможно, вы можете адаптировать это к вашим потребностям:

enter image description here

ПРИМЕЧАНИЕ : для работы этой формулы:

  1. Ваши данные должны начинаться со строки 2 или ниже, но ни в коем случае не в строке 1, иначе формула не будет работать должным образом.
  2. Данные должны быть отсортированы так же, как те, которые вы опубликовали (все время объединяются в группы, иначе они не будут работать)

И формула: =IF(IF(TRIM(MID(A2;3;99))=TRIM(MID(A1;3;99));"";ROW())="";"";LEFT(INDEX($A:$A;IF(TRIM(MID(A2;3;99))=TRIM(MID(A1;3;99));"";ROW()));1)&"-"&LEFT(INDEX($A:$A;IF(TRIM(MID(A2;3;99))=TRIM(MID(A1;3;99));"";ROW())+COUNTIFS($A$2:$A$12;"*"&TRIM(MID(A2;3;99))&"*")-1);1)&" "&TRIM(MID(A2;3;99)))

Как вы могли заметить на изображении, последний результат не соответствует вашим потребностям (вы отправили SA 8:00 AM - 9:00 PM, и моя формула получает S-S 8:00 AM-9:00 PM, потому что, если честно, я понятия не имею, откуда взялась эта A.

Из-за сложности формулы я загрузил файл в мой Gdrive, и в этом файле вы найдете 2 листа: один с формулой всего в 1 ячейке, а другой с формулой в нескольких столбцах, emulatin пошаговое решение, на случай, если вас заинтересует идея, стоящая за ним.

https://drive.google.com/open?id=1pmrpPqMWwtFtdzt3-lQoK5npd_JeQs0m

Попробуйте адаптировать его под свои нужды.

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