Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/автодополнение ввода даты годом в заданном столбце - Мир MS Excel

  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_, DrMini  
автодополнение ввода даты годом в заданном столбце
карандаш Дата: Среда, 03.12.2014, 10:51 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
в теме "замена запятой на точку при вводе" (имелось в виду ввод даты) )http://www.excelworld.ru/forum/2-14531-1
был получен замечательный макрос

[vba]
Код
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim s$
If Target.Count > 1 Then Exit Sub
If InStr(1, Target.Formula, ",") = 0 Then Exit Sub
s = Target.Formula
If UBound(Split(s, ",")) = 2 Then s = Replace(s, ",", ".")
If IsDate(s) Then Target = Format(s, "dd.mm.yyyy")
End Sub
[/vba]

при вводе даты макрос:
1. вместо запятых подставляет точки (что превращает введёное значение в дату)
2. преобразует "короткую" дату в "полную" (не приходится объяснять экселу какое на дворе столетие)

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

тогда от вводит всего два числа. Например, "12,12", что должно означать 12.12.2014
В таком случае данный макрос необходимо дополнить двумя ограничениями:
1. указать несколько столбцов, где вводится даты (т.к. в других столбцах вводятся цифры и точку на запятую менять не надо)
2. дополнять введённую пару чисел номером года. Что можно сделать двумя путями:
2.1. либо дополнять просто числом, прописанным в конкретной ячейке (например, $E$1)
2.2. либо дополнять текущим годом (который, очевидно, можно извлечь из встроенной формулы типа "СЕГОДНЯ()")

помогите, пожалуйста, с изменением макроса
К сообщению приложен файл: data.xls (36.0 Kb)


Сообщение отредактировал карандаш - Среда, 03.12.2014, 10:52
 
Ответить
Сообщениев теме "замена запятой на точку при вводе" (имелось в виду ввод даты) )http://www.excelworld.ru/forum/2-14531-1
был получен замечательный макрос

[vba]
Код
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim s$
If Target.Count > 1 Then Exit Sub
If InStr(1, Target.Formula, ",") = 0 Then Exit Sub
s = Target.Formula
If UBound(Split(s, ",")) = 2 Then s = Replace(s, ",", ".")
If IsDate(s) Then Target = Format(s, "dd.mm.yyyy")
End Sub
[/vba]

при вводе даты макрос:
1. вместо запятых подставляет точки (что превращает введёное значение в дату)
2. преобразует "короткую" дату в "полную" (не приходится объяснять экселу какое на дворе столетие)

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

тогда от вводит всего два числа. Например, "12,12", что должно означать 12.12.2014
В таком случае данный макрос необходимо дополнить двумя ограничениями:
1. указать несколько столбцов, где вводится даты (т.к. в других столбцах вводятся цифры и точку на запятую менять не надо)
2. дополнять введённую пару чисел номером года. Что можно сделать двумя путями:
2.1. либо дополнять просто числом, прописанным в конкретной ячейке (например, $E$1)
2.2. либо дополнять текущим годом (который, очевидно, можно извлечь из встроенной формулы типа "СЕГОДНЯ()")

помогите, пожалуйста, с изменением макроса

Автор - карандаш
Дата добавления - 03.12.2014 в 10:51
DJ_Marker_MC Дата: Среда, 03.12.2014, 11:12 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Добрый день, а может без макроса через проверку данных?
К сообщению приложен файл: 1518062.xls (34.5 Kb)
 
Ответить
СообщениеДобрый день, а может без макроса через проверку данных?

Автор - DJ_Marker_MC
Дата добавления - 03.12.2014 в 11:12
RAN Дата: Среда, 03.12.2014, 11:25 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
У меня есть, но для формы. Под ячейки адаптировать лениво.
Здесь http://www.cyberforum.ru/search.php?searchid=8462209 попадалось и под ячейки, причем не однократно. (строка запроса как пример)

[p.s.]И вообще, вопросы по VBA нужно задавать в вопросах по VBA.[/p.s.]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Среда, 03.12.2014, 11:28
 
Ответить
СообщениеУ меня есть, но для формы. Под ячейки адаптировать лениво.
Здесь http://www.cyberforum.ru/search.php?searchid=8462209 попадалось и под ячейки, причем не однократно. (строка запроса как пример)

[p.s.]И вообще, вопросы по VBA нужно задавать в вопросах по VBA.[/p.s.]

Автор - RAN
Дата добавления - 03.12.2014 в 11:25
SLAVICK Дата: Среда, 03.12.2014, 11:31 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Добрый день, а может без макроса через проверку данных?

ТС нужна не перепроверка данных а автоматическая замена.
тогда от вводит всего два числа. Например, "12,12", что должно означать 12.12.2014

А в этих столбцах будут только даты? Я писал макрос на преобразование только с 2-мя запятыми - а 12,12 - это число 12 целых и 12 сотых :D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Добрый день, а может без макроса через проверку данных?

ТС нужна не перепроверка данных а автоматическая замена.
тогда от вводит всего два числа. Например, "12,12", что должно означать 12.12.2014

А в этих столбцах будут только даты? Я писал макрос на преобразование только с 2-мя запятыми - а 12,12 - это число 12 целых и 12 сотых :D

Автор - SLAVICK
Дата добавления - 03.12.2014 в 11:31
DJ_Marker_MC Дата: Среда, 03.12.2014, 11:45 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
SLAVICK, для того чтоб не приходилось "заменять" то что неправильно, можно ведь заставить правильно вводить изначально, вы так не считаете? заставить правильно вводить можно через ограничения.
Плюс при таком подходе отпадает необходимость в поиске решения второго задания, поскольку достаточно будет формата ячеек дата и ввода всего лишь двух чисел (чего и хочет ТС).
 
Ответить
СообщениеSLAVICK, для того чтоб не приходилось "заменять" то что неправильно, можно ведь заставить правильно вводить изначально, вы так не считаете? заставить правильно вводить можно через ограничения.
Плюс при таком подходе отпадает необходимость в поиске решения второго задания, поскольку достаточно будет формата ячеек дата и ввода всего лишь двух чисел (чего и хочет ТС).

Автор - DJ_Marker_MC
Дата добавления - 03.12.2014 в 11:45
SLAVICK Дата: Среда, 03.12.2014, 12:14 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
для того чтоб не приходилось "заменять" то что неправильно, можно ведь заставить правильно вводить изначально, вы так не считаете? заставить правильно вводить можно через ограничения.

Я с Вами согласен, но почитайте прошлую тему ТС :D
Он знает, что он вводит не в таком виде как нужно, но ввиду особенностей его работы - крайне неудобно переключать раскладки, или вводить даты через слеш :)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
для того чтоб не приходилось "заменять" то что неправильно, можно ведь заставить правильно вводить изначально, вы так не считаете? заставить правильно вводить можно через ограничения.

Я с Вами согласен, но почитайте прошлую тему ТС :D
Он знает, что он вводит не в таком виде как нужно, но ввиду особенностей его работы - крайне неудобно переключать раскладки, или вводить даты через слеш :)

Автор - SLAVICK
Дата добавления - 03.12.2014 в 12:14
карандаш Дата: Среда, 03.12.2014, 12:30 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
DJ_Marker_MC, "правильно" и "неправильно" вводить имеет противоположные значения для программиста и пользователя, т.к. оба человеки, а значит создания ленивые и оба хотят минимизировать телодвижения.
Но ведь программисты для того и созданы, чтобы один раз "подвигать телом", чтобы потом юзеры им не двигали бесмысленно и не отвлекали своё внимание от главного - ведь там и так ошибок и опечаток хватает.
Поэтому лучше потерять два часа, а потом долететь за 5 минут.
 
Ответить
СообщениеDJ_Marker_MC, "правильно" и "неправильно" вводить имеет противоположные значения для программиста и пользователя, т.к. оба человеки, а значит создания ленивые и оба хотят минимизировать телодвижения.
Но ведь программисты для того и созданы, чтобы один раз "подвигать телом", чтобы потом юзеры им не двигали бесмысленно и не отвлекали своё внимание от главного - ведь там и так ошибок и опечаток хватает.
Поэтому лучше потерять два часа, а потом долететь за 5 минут.

Автор - карандаш
Дата добавления - 03.12.2014 в 12:30
карандаш Дата: Среда, 03.12.2014, 12:32 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
RAN, перенесу вопрос туда
здесь тогда можно закрыть

а клик по вашей ссылке приводи на страницу с перечнем тем. Какая именно тема про то, что вы имели в виду?
 
Ответить
СообщениеRAN, перенесу вопрос туда
здесь тогда можно закрыть

а клик по вашей ссылке приводи на страницу с перечнем тем. Какая именно тема про то, что вы имели в виду?

Автор - карандаш
Дата добавления - 03.12.2014 в 12:32
RAN Дата: Среда, 03.12.2014, 13:00 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Какая то. А может и никакая. :D
Я их не просматривал.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеКакая то. А может и никакая. :D
Я их не просматривал.

Автор - RAN
Дата добавления - 03.12.2014 в 13:00
Pelena Дата: Среда, 03.12.2014, 13:49 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 19572
Репутация: 4646 ±
Замечаний: ±

Excel 365 & Mac Excel
перенесу вопрос туда
здесь тогда можно закрыть

Неправильное решение. Дублирование тем запрещено Правилами. Эту тему переношу, а дубль закрываю


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщение
перенесу вопрос туда
здесь тогда можно закрыть

Неправильное решение. Дублирование тем запрещено Правилами. Эту тему переношу, а дубль закрываю

Автор - Pelena
Дата добавления - 03.12.2014 в 13:49
карандаш Дата: Среда, 03.12.2014, 14:36 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
тут что-то долно быть совсем просто:

If UBound(Split(s, ",")) = 2 Then s = Replace(s, ",", ".")
If IsDate(s) Then Target = Format(s, "dd.mm.yyyy")

между ними надо вставить условие проверки отсутствия символов после второй запятой и через then добавить содержимое произвольной ячейки
просто не силён в бейсике. Это какие-то функции нахождения второго вхождения символа в строке и отрезания конца с проверкой длинны этого конца на ноль.
наверное.
может есть более красивое решение
 
Ответить
Сообщениетут что-то долно быть совсем просто:

If UBound(Split(s, ",")) = 2 Then s = Replace(s, ",", ".")
If IsDate(s) Then Target = Format(s, "dd.mm.yyyy")

между ними надо вставить условие проверки отсутствия символов после второй запятой и через then добавить содержимое произвольной ячейки
просто не силён в бейсике. Это какие-то функции нахождения второго вхождения символа в строке и отрезания конца с проверкой длинны этого конца на ноль.
наверное.
может есть более красивое решение

Автор - карандаш
Дата добавления - 03.12.2014 в 14:36
SLAVICK Дата: Среда, 03.12.2014, 15:30 | Сообщение № 12
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Вы читали пост №4?
Не вижу ответа на уточняющие вопросы. >(
и какая вторая запятая в 12,12?


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеВы читали пост №4?
Не вижу ответа на уточняющие вопросы. >(
и какая вторая запятая в 12,12?

Автор - SLAVICK
Дата добавления - 03.12.2014 в 15:30
карандаш Дата: Среда, 03.12.2014, 16:19 | Сообщение № 13
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
SLAVICK, конечно, читал
из написанно понял, что макрос написан и переписыванию не подлежит
может что-то не так понял

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

Получается, что есть выбор, есть два решения:
1. задавать номера столбцов и использовать одну запятую. При этом надо корректировать макрос при смещении столбца (изменении его номера), что подразумевает сопровождение (это минус)
2. использовать две запятые и не ограничивать себя столбцами (и сопровождением).

наверное, второй вариант предпочтительней.
Если несложно, помогите его реализовать.

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


Сообщение отредактировал карандаш - Среда, 03.12.2014, 16:21
 
Ответить
СообщениеSLAVICK, конечно, читал
из написанно понял, что макрос написан и переписыванию не подлежит
может что-то не так понял

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

Получается, что есть выбор, есть два решения:
1. задавать номера столбцов и использовать одну запятую. При этом надо корректировать макрос при смещении столбца (изменении его номера), что подразумевает сопровождение (это минус)
2. использовать две запятые и не ограничивать себя столбцами (и сопровождением).

наверное, второй вариант предпочтительней.
Если несложно, помогите его реализовать.

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

Автор - карандаш
Дата добавления - 03.12.2014 в 16:19
SLAVICK Дата: Среда, 03.12.2014, 17:48 | Сообщение № 14
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Все что написал человек можно переписать :D
К сообщению приложен файл: 2223759.xls (42.5 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеВсе что написал человек можно переписать :D

Автор - SLAVICK
Дата добавления - 03.12.2014 в 17:48
SLAVICK Дата: Среда, 03.12.2014, 17:58 | Сообщение № 15
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
2-й вариант - нужно обязательно 2-е запятые.
К сообщению приложен файл: data-1-.xls (38.5 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение2-й вариант - нужно обязательно 2-е запятые.

Автор - SLAVICK
Дата добавления - 03.12.2014 в 17:58
карандаш Дата: Четверг, 04.12.2014, 06:32 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
SLAVICK, Большое спаибо!
вопрос:
могу я объединить?

If Target.Column > 2 And Target.Column < 6 Then
...

If Target.Column > 6 And Target.Column < 8 Then
...

If Target.Column > 9 And Target.Column < 11 Then
...

в одно условие как

If (Target.Column > 2 And Target.Column < 6) or
(Target.Column > 6 And Target.Column < 8) or
(Target.Column > 9 And Target.Column < 11) Then

а то повтор три раза одного и того же исполнительного блока - не камильфо. Если что-то надо изменить, так это надо делать три раза. А если кол-во действий большое? тут надо сгруппировать условия. Хотя бы через GOTO. Но go to тоже не камильфо)))

или есть ли бейсике проверка условия вхождения в множество?
что-то типа
If Target.Column=[3..5;7;10] Then

спасибо


Сообщение отредактировал карандаш - Четверг, 04.12.2014, 06:38
 
Ответить
СообщениеSLAVICK, Большое спаибо!
вопрос:
могу я объединить?

If Target.Column > 2 And Target.Column < 6 Then
...

If Target.Column > 6 And Target.Column < 8 Then
...

If Target.Column > 9 And Target.Column < 11 Then
...

в одно условие как

If (Target.Column > 2 And Target.Column < 6) or
(Target.Column > 6 And Target.Column < 8) or
(Target.Column > 9 And Target.Column < 11) Then

а то повтор три раза одного и того же исполнительного блока - не камильфо. Если что-то надо изменить, так это надо делать три раза. А если кол-во действий большое? тут надо сгруппировать условия. Хотя бы через GOTO. Но go to тоже не камильфо)))

или есть ли бейсике проверка условия вхождения в множество?
что-то типа
If Target.Column=[3..5;7;10] Then

спасибо

Автор - карандаш
Дата добавления - 04.12.2014 в 06:32
карандаш Дата: Четверг, 04.12.2014, 06:35 | Сообщение № 17
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
SLAVICK, с двумя запятыми все работает на ура)))
и год можно проставлять, а можно нет

БОЛЬШОЕ СПАСИБО!!!
 
Ответить
СообщениеSLAVICK, с двумя запятыми все работает на ура)))
и год можно проставлять, а можно нет

БОЛЬШОЕ СПАСИБО!!!

Автор - карандаш
Дата добавления - 04.12.2014 в 06:35
SLAVICK Дата: Четверг, 04.12.2014, 12:46 | Сообщение № 18
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
могу я объединить

Можно но лучше через "Case" А лучше этот блок вынести в отдельную процедуру и запускать ее при нужных условиях :D
Пожалуйста <_<


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 04.12.2014, 12:46
 
Ответить
Сообщение
могу я объединить

Можно но лучше через "Case" А лучше этот блок вынести в отдельную процедуру и запускать ее при нужных условиях :D
Пожалуйста <_<

Автор - SLAVICK
Дата добавления - 04.12.2014 в 12:46
RAN Дата: Четверг, 04.12.2014, 14:39 | Сообщение № 19
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

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

Код в тело поста не поместился
К сообщению приложен файл: CellDatValid.txt (5.4 Kb)


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Четверг, 04.12.2014, 14:41
 
Ответить
СообщениеСделал для ячеек.
Дату можно вводить как с разделителем (любой символ, не являющийся цифрой), так и без разделителя (последовательный набор цифр).
При вводе проводится проверка возможности преобразования набора символов в корректную дату. Если это возможно, вводится дата, если нет, ячейка очищается, и выводится сообщение.

Код в тело поста не поместился

Автор - RAN
Дата добавления - 04.12.2014 в 14:39
SLAVICK Дата: Четверг, 04.12.2014, 15:30 | Сообщение № 20
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
RAN, Ваш код хорош, но попробуйте ввести "1,10," - выдает ошибку. а при вводе 1,10 = 01.01.2014 :'(


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеRAN, Ваш код хорош, но попробуйте ввести "1,10," - выдает ошибку. а при вводе 1,10 = 01.01.2014 :'(

Автор - SLAVICK
Дата добавления - 04.12.2014 в 15:30
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!