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

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

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

##"/"##"/"####

В этом формате номер 08142020 будет отображаться как 14.08.2020. Единственная проблема заключается в том, что при этом изменяется только отображение числа — если вы хотите использовать дату как настоящую дату Excel, вы не можете этого сделать, потому что вы не преобразовали значение во что-то, что Excel распознает как дату.

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

  1. Выберите столбец дат.

  2. Убедитесь, что в столбце справа от дат ничего нет.

  3. Выберите «Текст в столбцы» на вкладке «Данные» ленты в группе «Работа с данными». Excel отображает мастер преобразования текста в столбцы. (См. Рис. 1.)

  4. Выберите параметр «Фиксированная ширина» и нажмите «Далее».

  5. Снова нажмите Далее.

  6. В области Формат данных столбца выберите Дата.

  7. Выберите диапазон в поле «Назначение», затем на листе щелкните ячейку справа от первого значения, выбранного на шаге 1.

  8. Щелкните Готово.

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

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

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

Эта формула предполагает, что введенная дата (без разделителей)

находится в ячейке A1. Формула будет работать с датами из семи или восьми цифр.

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

Function DateTime(dblDateTime As Double, _   Optional bAmerican As Boolean = True)



' Converts Date and time "number" without ' delimiters into an Excel serial number (which ' can then be formatted with the Excel ' date/time formats)



' If optional argument is TRUE (or missing), ' function assumes value is of form:

'    [m]mddyyyy.hhmm  (leading "0" not required)



' If optional argument is FALSE, function ' assumes value is of form:

'    [d]dmmyyyy.hhmm  (leading "0" not required)



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)



If bAmerican Then         DateTime = DateSerial(iYear, iMonth, iDay)

Else         DateTime = DateSerial(iYear, iDay, iMonth)

End If

DateTime = DateTime + (iHour + iMin / 60) / 24 End Function

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

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

_Примечание: _

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

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (11400) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Entering_Dates_without_Separators [Ввод дат без разделителей].