Excel макрос текущая дата в ячейку

Автоматическая вставка текущей даты в ячейку при вводе данных

Предположим, у нас имеется таблица заказов, куда пользователь вводит номер заказа, имя клиента, сумму и т.д. Необходимо сделать так, чтобы при внесении номера заказа в столбец А — в столбце B напротив введенного заказа автоматически появлялись дата и время его занесения:

date_auto_enter3.png

Чтобы реализовать такой ввод даты, нам потребуется простой макрос, который надо добавить в модуль рабочего листа. Для этого щелкните правой кнопкой мыши по ярлычку листа с таблицей и выберите в контекстном меню команду Исходный текст (View code).

В открывшееся окно редактора Visual Basic скопируйте этот текст этого макроса:

Private Sub Worksheet_Change(ByVal Target As Range)
    
    For Each cell In Target   'проходим по всем измененным ячейкам
       If Not Intersect(cell, Range("A2:A100")) Is Nothing Then  'если изменененная ячейка попадает в диапазон A2:A100
            With cell.Offset(0, 1)         'вводим в соседнюю справа ячейку дату
               .Value = Now
               .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
            End With
       End If
    Next cell
End Sub

При необходимости измените «чувствительный» диапазон «А2:А100» на свой собственный. Если необходимо вставлять дату не в соседний столбец, а правее — подставьте в оператор Offset(0,1) вместо 1 число побольше.

Закройте редактор Visual Basic и попробуйте ввести что-нибудь в диапазон А2:А100. В соседней ячейке тут же появится текущая дата-время!

Ссылки по теме

  • Как сделать выпадающий календарь для быстрого ввода любой даты мышью в любую ячейку.
  • Как Excel работает с датами
  • Что такое макрос, как он работает, куда копировать текст макроса, как запустить макрос?
Информация о материале
Категория: Макросы Excel

Опубликовано: 25 сентября 2013

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

Для быстрого ввода текущей даты в ячейку предусмотрено стандартное средство Excel — нажатие сочетания горячих клавиш Ctrl+; (либо Ctrl+Ж, кому как удобнее запомнить). В случае, если кому-то такое сочетание клавиш не вполне удобно, то можно сохранить в личной книге макросов процедуру (код которой приведен ниже) и закрепить ее за более удобным сочетанием клавиш, например Ctrl+d (о том как это сделать можно прочитать подробнее), а для того чтобы это сочетание срабатывало независимо от раскладки клавиатуры, можно сохранить не одну, а две идентичных процедуры и привязать их к разным сочетаниям клавиш, например одну к Ctrl+d, а другую к Ctrl+в. 

Sub InsertDate()
' Вставка текущей даты в активную ячейку
' Сочетание клавиш: Ctrl+d
    ActiveCell.Value = Format(Now, "dd.mm.yyyy")
End Sub
'-------------------------------------------------------
Sub Вставка_Даты()
' Вставка текущей даты в активную ячейку
' Сочетание клавиш: Ctrl+в
    ActiveCell.Value = Format(Now, "dd.mm.yyyy")
End Sub

Для того чтобы текущая дата вставлялась не только в активную ячейку, но и во все выделенные ячейки, достаточно добавить цикл в программный код.

Sub InsertDate()
' Вставка текущей даты в активную ячейку
' Сочетание клавиш: Ctrl+d
    for each Cell in Selection    
        Cell.Value = Format(Now, "dd.mm.yyyy")
    Next
End Sub
'-------------------------------------------------------
Sub Вставка_Даты()
' Вставка текущей даты в активную ячейку
' Сочетание клавиш: Ctrl+в
    for each Cell in Selection
        Cell.Value = Format(Now, "dd.mm.yyyy")
    Next
End Sub

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

Другие материалы по теме:

Автоматическая запись текущей даты и времени в первую ячейку новой строки базы данных на листе Excel с помощью кода VBA при выборе второй ячейки этой строки.

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

Самый простой код для записи даты

Для автоматической записи текущей даты и времени в первую ячейку очередной записи базы данных на листе Excel, необходимо открыть редактор VBA Excel и в проводнике дважды кликнуть на листе с базой данных, чтобы открылся модуль листа, в который поместить следующую процедуру с проверкой условия, что ячейка выбрана именно во втором столбце:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  If Target.Column = 2  Then Cells(ActiveCell.Row, 1) = Now

End Sub

При выборе ячейки во втором столбце таблицы, в первую ячейку автоматически записываются текущие дата и время. Записываются они независимо от того, занята первая ячейка или пустая, если она не пустая, то значение перезаписывается. Чтобы случайно не перезаписать нужную дату, случайно выбрав вторую ячейку уже заполненной записи внутри таблицы, необходимо добавить дополнительное условие, как в коде ниже.

Добавление второго условия в процедуру

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  If Target.Column = 2 And Cells(ActiveCell.Row, 1) = 0 Then

    Cells(ActiveCell.Row, 1) = Now

  End If

End Sub

При выборе второй ячейки заполняемой строки, если первая ячейка пуста, в неё автоматически записываются текущие дата и время. Если ячейка не пуста, то перезаписи значения не произойдет. Но, в данном случае, при выборе ячейки во втором столбце ниже первой пустой строки, дата будет также записываться в первую ячейку, что не совсем удобно.

Запись текущей даты с учетом трех условий

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

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  If Target.Column = 2 And Cells(ActiveCell.Row, 1) = 0 _

     And Cells(ActiveCell.Row 1, 1) <> 0 Then

     Cells(ActiveCell.Row, 1) = Now

  End If

End Sub

Вариант для практического использования

Если использовать предыдущую процедуру, то при выборе любой ячейки в первой строке генерируется ошибка. Она возникает из-за того, что, когда выбрана ячейка в первой строке, ячейки Cells(ActiveCell.Row — 1, 1) не существует. Чтобы избежать этой ошибки, необходимо добавить в первую группу условий проверку на то, что индекс строки выбранной ячейки не равен единице, а проверку ячейки Cells(ActiveCell.Row — 1, 1) вынести во второй блок If … End If, который будет выполняться только при выполнении условий первого блока.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  If Target.Column = 2 And Target.Row > 1 And _

     Cells(ActiveCell.Row, 1) = 0 Then

     If Cells(ActiveCell.Row 1, 1) <> 0 Then

        Cells(ActiveCell.Row, 1) = Now

     End If

  End If

End Sub

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

0 / 0 / 0

Регистрация: 11.01.2016

Сообщений: 9

1

11.01.2016, 22:10. Показов 9006. Ответов 24


Студворк — интернет-сервис помощи студентам

Здравствуйте. Помогите в следующем вопросе — в MS EXCEL 2007 создал кнопку с макросом на удаление данных с определенных ячеек.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Private Sub CommandButton1_Click()
' Очистка Макрос
    Range("A5").Select
    ActiveWindow.SmallScroll Down:=180
    Range("A5:J199").Select
    ActiveWindow.SmallScroll Down:=-189
    Range("A5:J199,F2,N5,N6,L7,L9,L10,N19").Select
    Range("N19").Activate
    ActiveWindow.SmallScroll ToRight:=0
    ActiveWindow.ScrollRow = 2
    ActiveWindow.ScrollRow = 3
    ActiveWindow.ScrollRow = 4
    ActiveWindow.ScrollRow = 5
    ActiveWindow.ScrollRow = 6
    ActiveWindow.ScrollRow = 7
    ActiveWindow.ScrollRow = 8
    ActiveWindow.ScrollRow = 9
    ActiveWindow.ScrollRow = 10
    ActiveWindow.ScrollRow = 12
    ActiveWindow.ScrollRow = 13
    ActiveWindow.ScrollRow = 15
    ActiveWindow.ScrollRow = 16
    Range( _
        "A5:J199,F2,N5,N6,L7,L9,L10,N19,L25:M25,L26:M26,L27:M27,L28:M28,L29:M29,L30:M30,L31:M31,L32:M32,L33:M33,L34:M34,L35:M35,L36:M36" _
        ).Select
    Range("L36").Activate
    ActiveWindow.SmallScroll Down:=-24
    Selection.ClearContents
    
End Sub

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

PureBasic
1
2
3
Sub DateCells() 
Range("A1").Value = DateValue(Now) 
End Sub

Но при вставке в код кнопки ничего не выходит. Ноль эмоций. (может его куда-нибуть в другое место нужно вставлять?)
Ячейки все будут защищены от изменений, кроме тех которые очищает макрос данный выше.
Как можно реализовать такую функцию: при нажатии кнопки «Очистить» вставляется дата в защищенную ячейку A2 без дальнейшей возможности изменения по средством ручного редактирования формулы или открытия листа в другие дни.

Вставить текущую дату формата чч/мм/гг, без дальнейших изменений, в ячейку а2

С VB не очень дружу, или не дружу вовсе.



0



#установка даты в ячейку

laik

Дата: Пятница, 01.05.2020, 09:46 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 2


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Создайте новую книгу Excel. Переименуйте ее в “Объектная модель”.

Создайте в ней процедуру, которая будет переименовывать первый лист (новое имя листа — “Объектная модель”).

После этого, обращаясь в коде к этому листу по имени, процедура должна заносить в ячейку A1 текущую дату.
Вот как получилось у меня(только учась создавать макросы)
[vba]

Код

Sub unification()
‘даем имя листу
Sheets(«Лист1»).Select
Sheets(«Лист1»).Name = «Объектная модель»
‘на данном листе
Sheets(«Объектная модель»).Select
‘в ячейке А1 вводим формулу тдата
Range(«A1»).Select
ActiveCell.FormulaR1C1 = «=NOW()»

End Sub

[/vba]

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

Сообщение отредактировал laikПятница, 01.05.2020, 09:57

 

Ответить

_Boroda_

Дата: Пятница, 01.05.2020, 11:21 |
Сообщение № 2

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Два варианта
[vba]

Код

Sub unification() ‘ с проверкой на то, что первый лист уже называется «Объектная модель»
‘ но это наверное лишнее, ведь по условию задачи мы книгу только что создали
    shn_ = «Объектная модель»
    If Sheets(1).Name <> shn_ Then
        Sheets(1).Name = shn_
    End If
    Sheets(shn_).Range(«A1») = Date
End Sub

Sub unification1() ‘ без проверки
    Sheets(1).Name = «Объектная модель»
    Sheets(«Объектная модель»).Range(«A1») = Date
End Sub

[/vba]

Нужно сделать так, чтобы он (1) начинался автоматически при открытии страницы (2), и в ячейке A1 прописывалась дата через =NOW() (3)

1. Он — это кто? Макрос?
2. Про это в условии ничего не сказано
3. Это будет формула. А у Вас в задании просто заносить дату. Не формулой, а просто дату
Еще
4. Первый лист вовсе не обязательно называется «Лист1». Поэтому работаем не с Sheets(«Лист1»), а с листом с индексом, равным 1
5. Select на лист и на ячейку вовсе не обязательны — замедляют работу, ухудшают читабельность кода и вообще моветон
6. Если нужно, чтобы дата изменялась при открытии страницы (предположу, что это значит «при активации листа»), то немного иначе все. Отдельным макросом переименовываем лист, а вторым макросом, лежащим в модуле листа (см. справку), при активации листа переписываем дату
[vba]

Код

Private Sub Worksheet_Activate()
    Range(«A1») = Date
End Sub

[/vba]
7. Если же дату нужно переписывать не при активации листа, а при открытии книги (так было бы грамотнее, если, конечно, книга не бывает открыта в 12 ночи, когда дата сменяется), то код для даты пишем ужа в модуле книги
[vba]

Код

Private Sub Workbook_Open()
    Sheets(«Объектная модель»).Range(«A1») = Date
End Sub

[/vba]


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

laik

Дата: Пятница, 01.05.2020, 17:07 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 2


Репутация:

0

±

Замечаний:
0% ±


Excel 2019

Спасибо, попробую исправить и отпишусь.
задание было такое:
«Создайте новую книгу Excel. Переименуйте ее в “Объектная модель”.

Создайте в нем процедуру, которая будет переименовывать первый лист (новое имя листа — “Объектная модель”).

После этого, обращаясь в коде к этому листу по имени, процедура должна заносить в ячейку A1 текущую дату.»
Но после того,как я написала свой макрос
[vba]

Код

Sub unification()
‘даем имя листу
Sheets(«Лист1»).Select
Sheets(«Лист1»).Name = «Объектная модель»
‘на данном листе
Sheets(«Объектная модель»).Select
‘в ячейке А1 вводим формулу тдата
Range(«A1»).Select
ActiveCell.FormulaR1C1 = «=NOW()»

End Sub

[/vba]
мне ответили:
«К сожалению, макрос не сработал. Нужно сделать так, чтобы он начинался автоматически при открытии страницы, и в ячейке A1 прописывалась дата через =NOW()»

Спасибо за помощь

Сообщение отредактировал Serge_007Четверг, 11.11.2021, 16:19

 

Ответить

_Boroda_

Дата: Пятница, 01.05.2020, 20:21 |
Сообщение № 4

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

— Прочитайте Правила форума
— Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

ElenaOren

Дата: Четверг, 11.11.2021, 15:23 |
Сообщение № 5

Группа: Пользователи

Ранг: Новичок

Сообщений: 12


Репутация:

0

±

Замечаний:
0% ±


Excel 2002

[vba]

Код

Private Sub Workbook_Open()
Sheets(«Объектная модель»).Range(«A1») = Date
End Sub

[/vba]

Здравствуйте. А как сделать так, чтобы в ячейку куда вставляется дата, перед датой стояло слово «от»? Н-р, от 11.11.2021

Сообщение отредактировал Serge_007Четверг, 11.11.2021, 15:44

 

Ответить

Serge_007

Дата: Четверг, 11.11.2021, 15:43 |
Сообщение № 6

Группа: Админы

Ранг: Местный житель

Сообщений: 15888


Репутация:

2623

±

Замечаний:
±


Excel 2016

Здравствуйте

[vba]

Код

Sub ElenaOren()
      Range(«A1») = «от » & Date
End Sub

[/vba]


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

ElenaOren

Дата: Четверг, 11.11.2021, 15:49 |
Сообщение № 7

Группа: Пользователи

Ранг: Новичок

Сообщений: 12


Репутация:

0

±

Замечаний:
0% ±


Excel 2002

Спасибо, Serge_007!

Сообщение отредактировал Serge_007Четверг, 11.11.2021, 16:18

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Excel макрос ссылка на ячейку
  • Excel макрос ссылка на файл
  • Excel макрос сравнения двух листов
  • Excel макрос список уникальных значений
  • Excel макрос список всех листов