Ввод дат без разделителей

Разные люди вводят данные по-разному. Когда вы вводите информацию в ячейку, Excel пытается выяснить, какой тип информации вы вводите. Если вы вводите число, например 08242008, Excel предполагает, что вы вводите числовое значение, и обрабатывает его соответствующим образом. Что, если введенное вами число действительно является датой без разделителей? Может ли Excel понять, что вы вводите?

К сожалению, Excel не может. Почему? Потому что вы не указали, что это должно быть свидание. (Клавиши Excel на разделителях, а не на числовых значениях.) Если вы или ваши люди, занимающиеся вводом данных, не можете изменить свои привычки ввода так, чтобы также вводились разделители, вам понадобится какой-то обходной путь для преобразования введенной информации в фактическое значение даты. .

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

## «/» ## «/» ####

В этом формате номер 08152008 будет отображаться как 8/15/ 2008 г. Единственная проблема заключается в том, что он изменяет только отображение числа – если вы хотите использовать дату как настоящую дату Excel, вы не можете этого сделать, потому что вы не преобразовали значение во что-то, что Excel распознает как дату.

Если вводимые значения были очень согласованными по своему формату и если они вводились как текст, а не как числовые значения, то есть простой способ преобразовать их в даты. Под очень последовательным я подразумеваю, что во входных данных всегда использовались две цифры для месяца, две для дня и четыре для года. Кроме того, ячейки, содержащие значения, должны быть отформатированы как текст. В этом случае вы можете выполнить следующие действия:

  1. Выберите столбец дат.
  2. Убедитесь, что в столбце нет ничего, кроме справа от дат.
  3. Выберите «Текст в столбцы» в меню «Данные». (В Excel 2007 выберите «Текст в столбцы» на вкладке «Данные» на ленте.) В Excel отобразится мастер преобразования текста в столбцы. (См. Рис. 1.)
  4. Рис. 1. Мастер преобразования текста в столбцы.

  5. Выберите параметр «Фиксированная ширина», затем нажмите «Далее».
  6. Еще раз нажмите «Далее».
  7. В области “Формат данных столбца” выберите “Дата”.
  8. Выберите диапазон в поле “Назначение”, затем на листе щелкните ячейку справа от первого значения, которое вы выбрано на шаге 1.
  9. Нажмите “Готово”.

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

Другое возможное решение – использовать формулу для преобразовать введенные значения в фактические даты. Вот одна из таких формул:

= DATE (RIGHT (A1,4), LEFT (A1, IF (LEN (A1) = 8,2,1)), LEFT (RIGHT (A1 , 6), 2))

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

Если вы предпочитаете настраиваемые функции, вы можете создать такую ​​в VBA, которая проверяет передаваемые данные и преобразует их в формат даты/времени. , а затем возвращает результат. Следующая функция очень универсальна в этом отношении; он будет работать как с американскими, так и с европейскими форматами даты:

Функция DateTime (dblDateTime As Double, _ Необязательно bAmerican As Boolean = True) ‘Преобразует «число» даты и времени без ограничителей в сериальный формат Excel. (который затем может быть отформатирован в формате Excel’date/time) ‘Если необязательный аргумент имеет значение ИСТИНА (или отсутствует),’ функция предполагает, что значение имеет форму: ‘[m] mddyyyy.hhmm (начальный «0» не требуется) ‘Если необязательный аргумент — ЛОЖЬ, функция’ принимает значение в форме: ‘[d] dmmyyyy.hhmm (ведущий «0» не требуется) Dim iYear As Integer Dim iMonth As Integer Dim iDay As Integer Dim iHour As Integer Dim iMin As Integer iYear = Int ((dblDateTime/10000 — _ Int (dblDateTime/10000)) * 10000) iDay = Int ((dblDateTime/1000000 — _ Int (dblDateTime/1000000)) * 100) iMonth = Int ((dblDateTime/1000000)) iHour = Int ((dblDateTime — Int (dblDateTime)) * 100) iMin = Int ((dblDateTime * 100 — _ Int (dblDateTime * 100)) * 100 + 0,5) Если bAmerican, то DateTime = DateSerial (iYear, iMonth, iDay) Else Da teTime = DateSerial (iYear, iDay, iMonth) End If DateTime = DateTime + (iHour + iMin/60)/24End Function

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

Как вы можете видеть, существует ряд обходных путей, но ни один из них не является таким простым, как просто ввод разделителей при вводе Даты. Если обучить себя или ваших людей, занимающихся вводом данных, сделать это сложно, вы можете подумать о настройке некоторых правил проверки данных для входных ячеек. Эти правила могут проверять, что вы вводите информацию в определенном формате (например, дату с разделителями), и останавливать вас, если это не так. (О том, как создавать правила проверки данных, рассказывалось в других выпусках . )

Источник: frestage.ru

Бытовой вопрос