Добрый день. Помогите пожалуйста. Необходимо вводить даты в диапазон В13:С35 (именно этот диапазон) без знаком разделителей, чтобы не тратить на это время и они автоматически проставлялись и эксель распознавал эти ячейки как дату в формате чч.мм.гггг.
Заранее огромное спасибо.
Добрый день. Помогите пожалуйста. Необходимо вводить даты в диапазон В13:С35 (именно этот диапазон) без знаком разделителей, чтобы не тратить на это время и они автоматически проставлялись и эксель распознавал эти ячейки как дату в формате чч.мм.гггг.
Установите для ячеек "Краткий формат даты". "Без разделителей" всё равно придётся вводить с нулями, поскольку, например, "1022017" - даёт неопределенность. То есть вводить придется ВСЕГДА ВОСЕМЬ знаков. Если же вводить с разделителем (например, слэшем) - то вы ВСЕГДА будете вводить НЕ БОЛЕЕ ВОСЬМИ знаков. Например, "5/6/17" (или вообще "5/6") сразу же вернет #05.06.2017# (проверьте и убедитесь). Слэш у вас находится рядом с цифрами на нумпаде (надеюсь, вы не на нетбуке или планшете заполняете же?) То есть вам вообще не нужны никакие "макросы", достаточно научиться правильно быстро вносить дату...
Установите для ячеек "Краткий формат даты". "Без разделителей" всё равно придётся вводить с нулями, поскольку, например, "1022017" - даёт неопределенность. То есть вводить придется ВСЕГДА ВОСЕМЬ знаков. Если же вводить с разделителем (например, слэшем) - то вы ВСЕГДА будете вводить НЕ БОЛЕЕ ВОСЬМИ знаков. Например, "5/6/17" (или вообще "5/6") сразу же вернет #05.06.2017# (проверьте и убедитесь). Слэш у вас находится рядом с цифрами на нумпаде (надеюсь, вы не на нетбуке или планшете заполняете же?) То есть вам вообще не нужны никакие "макросы", достаточно научиться правильно быстро вносить дату...AndreTM
Тема с организацией удобного ввода дат понятна. Например, массовый ввод всяких бухгалтерских сумм обычно производится на правой цифровой клавиатуре. Кнопка "точка" (Del) там угодливо принимает в Excel вид десятичного разделителя локали, во всяком случае, у меня в Excel она остается "запятой" и в русской, и в латинской раскладках (хотя в других приложениях переключается). Поэтому при такой "всегда запятой" массовый ввод дат на правой клавиатуре оказывается не совсем удобным для тех, кто привык разделять компоненты даты точкой. Их, конечно, можно еще разделять слэшем (/) или минусом (-), но таких знатоков гораздо меньше, чем любителей точки. К тому же, на правой клавиатуре эти кнопки расположены над цифровыми, что также может быть не очень удобным…
Короче, весь день сегодня держал открытым прилагаемый файл и, когда появлялся небольшой квант свободного времени, ковырялся с макросом. В итоге получилось
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cellText As String, cellDate As Date Dim datArray, dd, mm, yy
If Target.Cells.Count > 1 Then Exit Sub If Intersect(Target, Range("B13:C35")) Is Nothing Then Exit Sub If IsEmpty(Target) Then Exit Sub
dd = Day(Now): mm = Month(Now): yy = Year(Now) 'инициализация частей - текущей датой
'в качестве разделителя компонентов даты можно использовать 'любой удобный разделитель с цифровой клавиатуры: * + , (/ или - нельзя) 'особенно удобен "плюс" - он большой :) 'разделители даже можно смешивать в одном вводе cellText = Replace(Replace(Replace(Target.Value2, "+", "."), "*", "."), ",", ".") datArray = Split(cellText, ".")
dd = datArray(0) If UBound(datArray) > 0 Then mm = datArray(1) If UBound(datArray) > 1 Then yy = datArray(2)
Application.EnableEvents = False On Error Resume Next
cellDate = CDate(dd & "." & mm & "." & yy) If Err Then Target.Value = "ОШИБКА: " & Target.Value2 Err.Clear Else Target.Value = cellDate End If
Application.EnableEvents = True End Sub
[/vba]
В качестве разделителя дат при вводе макрос разрешает использовать плюс, звездочку и запятую, которая вводится клавишей ". Del". И самой удобной представляется, конечно, кнопка "плюс" - она же большая, как Enter, и по ней можно клацать, практически не глядя.
Слэш и минус я не задействовал. Как мы выяснили, у них свой смысл при вводе дат и они успевают преобразовать ввод до того, как наступает событие листа Change, несколько "мешая" моему макросу. По этой же причине не задействовал и "точку", вводимую с основной клавиатуры, тем более, что выискивать "точку" на основной клавиатуре - потеря времени набора. Использование любого из этих трёх разделителей ( / - . ) в зеленом диапазоне B13:C35 приводит к ошибке.
Правильные же кнопки-разделители в зеленой зоне скоростного ввода дат:
, [+], [. Del]. При вводе неполной даты (например, только числа или числа и месяца) оставшиеся компоненты (месяц и год или только год) автоматически берутся из текущей даты.
Тема с организацией удобного ввода дат понятна. Например, массовый ввод всяких бухгалтерских сумм обычно производится на правой цифровой клавиатуре. Кнопка "точка" (Del) там угодливо принимает в Excel вид десятичного разделителя локали, во всяком случае, у меня в Excel она остается "запятой" и в русской, и в латинской раскладках (хотя в других приложениях переключается). Поэтому при такой "всегда запятой" массовый ввод дат на правой клавиатуре оказывается не совсем удобным для тех, кто привык разделять компоненты даты точкой. Их, конечно, можно еще разделять слэшем (/) или минусом (-), но таких знатоков гораздо меньше, чем любителей точки. К тому же, на правой клавиатуре эти кнопки расположены над цифровыми, что также может быть не очень удобным…
Короче, весь день сегодня держал открытым прилагаемый файл и, когда появлялся небольшой квант свободного времени, ковырялся с макросом. В итоге получилось
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cellText As String, cellDate As Date Dim datArray, dd, mm, yy
If Target.Cells.Count > 1 Then Exit Sub If Intersect(Target, Range("B13:C35")) Is Nothing Then Exit Sub If IsEmpty(Target) Then Exit Sub
dd = Day(Now): mm = Month(Now): yy = Year(Now) 'инициализация частей - текущей датой
'в качестве разделителя компонентов даты можно использовать 'любой удобный разделитель с цифровой клавиатуры: * + , (/ или - нельзя) 'особенно удобен "плюс" - он большой :) 'разделители даже можно смешивать в одном вводе cellText = Replace(Replace(Replace(Target.Value2, "+", "."), "*", "."), ",", ".") datArray = Split(cellText, ".")
dd = datArray(0) If UBound(datArray) > 0 Then mm = datArray(1) If UBound(datArray) > 1 Then yy = datArray(2)
Application.EnableEvents = False On Error Resume Next
cellDate = CDate(dd & "." & mm & "." & yy) If Err Then Target.Value = "ОШИБКА: " & Target.Value2 Err.Clear Else Target.Value = cellDate End If
Application.EnableEvents = True End Sub
[/vba]
В качестве разделителя дат при вводе макрос разрешает использовать плюс, звездочку и запятую, которая вводится клавишей ". Del". И самой удобной представляется, конечно, кнопка "плюс" - она же большая, как Enter, и по ней можно клацать, практически не глядя.
Слэш и минус я не задействовал. Как мы выяснили, у них свой смысл при вводе дат и они успевают преобразовать ввод до того, как наступает событие листа Change, несколько "мешая" моему макросу. По этой же причине не задействовал и "точку", вводимую с основной клавиатуры, тем более, что выискивать "точку" на основной клавиатуре - потеря времени набора. Использование любого из этих трёх разделителей ( / - . ) в зеленом диапазоне B13:C35 приводит к ошибке.
Правильные же кнопки-разделители в зеленой зоне скоростного ввода дат:
, [+], [. Del]. При вводе неполной даты (например, только числа или числа и месяца) оставшиеся компоненты (месяц и год или только год) автоматически берутся из текущей даты.