Здравствуйте. Господа прошу Вашей помощи. Работаю в облачном Exel Google, появилась необходимость в следующей формуле. Есть ячейка А1 в которую нужно возвращать текущую дату при внесении данных в ячейку В1, т.е. забивая данные в ячейку В1, формула должна возвращать текущую дату в ячейку А1. Я заранее Вам при многом благодарен.
Здравствуйте. Господа прошу Вашей помощи. Работаю в облачном Exel Google, появилась необходимость в следующей формуле. Есть ячейка А1 в которую нужно возвращать текущую дату при внесении данных в ячейку В1, т.е. забивая данные в ячейку В1, формула должна возвращать текущую дату в ячейку А1. Я заранее Вам при многом благодарен.Ефгений
Скрипт в помощь: Инструменты - Редактор скриптов Пишем скрипт:
[vba]
Код
function onEdit(e) { var sheet = e.source.getActiveSheet(); var idCol = e.range.getColumn(); var idRow = e.range.getRow(); if ( idCol == 2 && sheet.getName() =='Лист1' ) // Имя листа вставляем своё //указываем ячейку (порядковый номер А=1,В=2 и т.д.) триггер - изменение которой будут давать сигнал на редактирование даты { var Value = e.range.offset(0, -1).getValues(); // Смотрим что в ячейке слева (от триггера) на 1: та куда надо ставить дату (Если нужно смотреть справа минус убираем) if ( Value == 0 ) { var vartoday = getDate(); sheet.getRange(idRow, 1).setValue( vartoday ); //указываем номер столбца в который поставить дату } } } // Далее получаем дату function getDate() { var today = new Date(); today.setDate(today.getDate()); //Формат даты и часовой пояс return Utilities.formatDate(today, 'GMT+05:00', 'dd.MM.yyyy'); }
[/vba]
Сохраняем проект, проверяем. P.S. В данном скрипте если в ячейке А уже стоит какая либо дата, скрипт не будет её менять. Т.е. если , допустим, сегодня в ячейку В2 внесли данные, в ячейку А2 встала дата 7.10.2019, если послезавтра 9.10.2019 в ячейке В2, кто то опять поменяет данные в А2 дата останется такой же 7.10.2019 P.P.S. Есть функция для формул NOW - она возвращает всегда (постоянно обновляется) сегодняшнее число, скорее всего при помощи формул вам задачу свою не решить.
Скрипт в помощь: Инструменты - Редактор скриптов Пишем скрипт:
[vba]
Код
function onEdit(e) { var sheet = e.source.getActiveSheet(); var idCol = e.range.getColumn(); var idRow = e.range.getRow(); if ( idCol == 2 && sheet.getName() =='Лист1' ) // Имя листа вставляем своё //указываем ячейку (порядковый номер А=1,В=2 и т.д.) триггер - изменение которой будут давать сигнал на редактирование даты { var Value = e.range.offset(0, -1).getValues(); // Смотрим что в ячейке слева (от триггера) на 1: та куда надо ставить дату (Если нужно смотреть справа минус убираем) if ( Value == 0 ) { var vartoday = getDate(); sheet.getRange(idRow, 1).setValue( vartoday ); //указываем номер столбца в который поставить дату } } } // Далее получаем дату function getDate() { var today = new Date(); today.setDate(today.getDate()); //Формат даты и часовой пояс return Utilities.formatDate(today, 'GMT+05:00', 'dd.MM.yyyy'); }
[/vba]
Сохраняем проект, проверяем. P.S. В данном скрипте если в ячейке А уже стоит какая либо дата, скрипт не будет её менять. Т.е. если , допустим, сегодня в ячейку В2 внесли данные, в ячейку А2 встала дата 7.10.2019, если послезавтра 9.10.2019 в ячейке В2, кто то опять поменяет данные в А2 дата останется такой же 7.10.2019 P.P.S. Есть функция для формул NOW - она возвращает всегда (постоянно обновляется) сегодняшнее число, скорее всего при помощи формул вам задачу свою не решить.Kashimirush
Работа, работа, перейди на Федота...
Сообщение отредактировал Kashimirush - Понедельник, 07.10.2019, 16:05
Сохраняем проект, проверяем. P.S. В данном скрипте если в ячейке А уже стоит какая либо дата, скрипт не будет её менять. Т.е. если , допустим, сегодня в ячейку В2 внесли данные, в ячейку А2 встала дата 7.10.2019, если послезавтра 9.10.2019 в ячейке В2, кто то опять поменяет данные в А2 дата останется такой же 7.10.2019 P.P.S. Есть функция для формул NOW - она возвращает всегда (постоянно обновляется) сегодняшнее число, скорее всего при помощи формул вам задачу свою не решить.
Сохраняем проект, проверяем. P.S. В данном скрипте если в ячейке А уже стоит какая либо дата, скрипт не будет её менять. Т.е. если , допустим, сегодня в ячейку В2 внесли данные, в ячейку А2 встала дата 7.10.2019, если послезавтра 9.10.2019 в ячейке В2, кто то опять поменяет данные в А2 дата останется такой же 7.10.2019 P.P.S. Есть функция для формул NOW - она возвращает всегда (постоянно обновляется) сегодняшнее число, скорее всего при помощи формул вам задачу свою не решить.
Сохраняем проект, проверяем. P.S. В данном скрипте если в ячейке А уже стоит какая либо дата, скрипт не будет её менять. Т.е. если , допустим, сегодня в ячейку В2 внесли данные, в ячейку А2 встала дата 7.10.2019, если послезавтра 9.10.2019 в ячейке В2, кто то опять поменяет данные в А2 дата останется такой же 7.10.2019 P.P.S. Есть функция для формул NOW - она возвращает всегда (постоянно обновляется) сегодняшнее число, скорее всего при помощи формул вам задачу свою не решить.
Сохраняем проект, проверяем. P.S. В данном скрипте если в ячейке А уже стоит какая либо дата, скрипт не будет её менять. Т.е. если , допустим, сегодня в ячейку В2 внесли данные, в ячейку А2 встала дата 7.10.2019, если послезавтра 9.10.2019 в ячейке В2, кто то опять поменяет данные в А2 дата останется такой же 7.10.2019 P.P.S. Есть функция для формул NOW - она возвращает всегда (постоянно обновляется) сегодняшнее число, скорее всего при помощи формул вам задачу свою не решить.
Изначальный скрипт прописан под конкретный лист [vba]
Код
if ( idCol == 2 && sheet.getName() =='Лист1' )
[/vba] Скрипт будет работать только на одном листе, который прописан в этой строчке кода. Если выполнение скрипта нужно на нескольких листах, можно добавить в код оператор else if после If Тогда код будет выглядеть так: [vba]
Код
function onEdit(a) { var sheet = a.source.getActiveSheet(); var idCol = a.range.getColumn(); var idRow = a.range.getRow(); if ( idCol == 2 && sheet.getName() =='Лист1' ) {var Value = a.range.offset(0, -1).getValues(); if ( Value == 0 ) {var vartoday = getDate(); sheet.getRange(idRow, 1).setValue( vartoday );}} else if ( idCol == 2 && sheet.getName() =='Лист2' ) {var Value = a.range.offset(0, -1).getValues(); if ( Value == 0 ) {var vartoday = getDate(); sheet.getRange(idRow, 1).setValue( vartoday );}} else if ( idCol == 2 && sheet.getName() =='Лист3' ) {var Value = a.range.offset(0, -1).getValues(); if ( Value == 0 ) {var vartoday = getDate(); sheet.getRange(idRow, 1).setValue( vartoday );}} } function getDate() { var today = new Date(); today.setDate(today.getDate()); return Utilities.formatDate(today, 'GMT+05:00', 'dd.MM.yyyy'); } //if ( idCol == 2 && sheet.getName() =='Лист1' ) - указываем ячейку (порядковый номер А=1,В=2 и т.д.) триггер - изменение которой будут давать сигнал на редактирование даты, в данном случае стоит 2 - значит смотрим столбец B //{var Value = a.range.offset(0, -1).getValues(); - Смотрим что в ячейке слева на 1 от idCol (указано -1, если будет 1 значит смотрим справа на одну), если ячейка пуста то ставим дату,если имеет данные то ничего не меняем //{var vartoday = getDate();sheet.getRange(idRow, 1).setValue( vartoday );}} - getRange(idRow, 1) - Указываем куда вставить дату 1 столбец - значит в А
[/vba] Добавил Лист2 и Лист3 в работу кода. С точки зрения программирования, я не могу сказать насколько такое решение оптимально (я дилетант в этом деле); т.к. при таком построении кода видно, что отрабатывает он не сразу и, если добавлять в столбец B данные слишком быстро, то отрабатывает он не каждый раз. Тут возможно помогут более матерые старожилы форума.
Изначальный скрипт прописан под конкретный лист [vba]
Код
if ( idCol == 2 && sheet.getName() =='Лист1' )
[/vba] Скрипт будет работать только на одном листе, который прописан в этой строчке кода. Если выполнение скрипта нужно на нескольких листах, можно добавить в код оператор else if после If Тогда код будет выглядеть так: [vba]
Код
function onEdit(a) { var sheet = a.source.getActiveSheet(); var idCol = a.range.getColumn(); var idRow = a.range.getRow(); if ( idCol == 2 && sheet.getName() =='Лист1' ) {var Value = a.range.offset(0, -1).getValues(); if ( Value == 0 ) {var vartoday = getDate(); sheet.getRange(idRow, 1).setValue( vartoday );}} else if ( idCol == 2 && sheet.getName() =='Лист2' ) {var Value = a.range.offset(0, -1).getValues(); if ( Value == 0 ) {var vartoday = getDate(); sheet.getRange(idRow, 1).setValue( vartoday );}} else if ( idCol == 2 && sheet.getName() =='Лист3' ) {var Value = a.range.offset(0, -1).getValues(); if ( Value == 0 ) {var vartoday = getDate(); sheet.getRange(idRow, 1).setValue( vartoday );}} } function getDate() { var today = new Date(); today.setDate(today.getDate()); return Utilities.formatDate(today, 'GMT+05:00', 'dd.MM.yyyy'); } //if ( idCol == 2 && sheet.getName() =='Лист1' ) - указываем ячейку (порядковый номер А=1,В=2 и т.д.) триггер - изменение которой будут давать сигнал на редактирование даты, в данном случае стоит 2 - значит смотрим столбец B //{var Value = a.range.offset(0, -1).getValues(); - Смотрим что в ячейке слева на 1 от idCol (указано -1, если будет 1 значит смотрим справа на одну), если ячейка пуста то ставим дату,если имеет данные то ничего не меняем //{var vartoday = getDate();sheet.getRange(idRow, 1).setValue( vartoday );}} - getRange(idRow, 1) - Указываем куда вставить дату 1 столбец - значит в А
[/vba] Добавил Лист2 и Лист3 в работу кода. С точки зрения программирования, я не могу сказать насколько такое решение оптимально (я дилетант в этом деле); т.к. при таком построении кода видно, что отрабатывает он не сразу и, если добавлять в столбец B данные слишком быстро, то отрабатывает он не каждый раз. Тут возможно помогут более матерые старожилы форума.Kashimirush
Работа, работа, перейди на Федота...
Сообщение отредактировал Kashimirush - Четверг, 10.10.2019, 09:05
Я что то делаю не так. Выбираю колонку А, из выпадающего списка макросов выбираю getDate, система пишет что скрипт выполнен, но дата не подставляется при внесении данных в колонке И
Я что то делаю не так. Выбираю колонку А, из выпадающего списка макросов выбираю getDate, система пишет что скрипт выполнен, но дата не подставляется при внесении данных в колонке ИЕфгений
Изначальный скрипт прописан под конкретный лист if ( idCol == 2 && sheet.getName() =='Лист1' ) Скрипт будет работать только на одном листе, который прописан в этой строчке кода.
Чтобы он работал не только на одном листе, а на некотором списке листов, можно преобразовать имеющееся условие примерно в такое: [vba]
Код
if ( idCol == 2 && ['Лист1','Лист2','Лист3'].indexOf(sheet.getName()) > -1 )
[/vba] или чтобы уж совсем красиво, то: [vba]
Код
if ( idCol == 2 && ~['Лист1','Лист2','Лист3'].indexOf(sheet.getName()) )
[/vba] где тильда как раз и обозначает операцию не равенства значению -1, что означает, что искомый элемент sheet.getName() найден в массиве.
Изначальный скрипт прописан под конкретный лист if ( idCol == 2 && sheet.getName() =='Лист1' ) Скрипт будет работать только на одном листе, который прописан в этой строчке кода.
Чтобы он работал не только на одном листе, а на некотором списке листов, можно преобразовать имеющееся условие примерно в такое: [vba]
Код
if ( idCol == 2 && ['Лист1','Лист2','Лист3'].indexOf(sheet.getName()) > -1 )
[/vba] или чтобы уж совсем красиво, то: [vba]
Код
if ( idCol == 2 && ~['Лист1','Лист2','Лист3'].indexOf(sheet.getName()) )
[/vba] где тильда как раз и обозначает операцию не равенства значению -1, что означает, что искомый элемент sheet.getName() найден в массиве.Gustav
Здравствуйте еще раз друзья. Не могли бы Вы помочь мне скорректировав следующий скрипт. 1. В скрипте прописан параметр, который прежде чем прописать текущую дату, проверяет наличие данных в другой ячейке. Возможно ли эту проверку отключить? 2. Скрипт прописывает текущую дату, если появляется информация в проверяемой ячейке, скажите, а возможно ли изменять текущую дату при изменении данных в проверяемой ячейке?
Вот собственно скрипт: [vba]
Код
function onEdit(a) { var sheet = a.source.getActiveSheet(); var idCol = a.range.getColumn(); var idRow = a.range.getRow(); if ( idCol == 6 && sheet.getName() =='Реестр' ) {var Value = a.range.offset(1, 3).getValues(); if ( Value == 0 ) {var vartoday = getDate(); sheet.getRange(idRow, 9).setValue( vartoday );}} } function getDate() { var today = new Date(); today.setDate(today.getDate()); return Utilities.formatDate(today, 'GMT+05:00', 'dd.MM.yyyy'); } //if ( idCol == 2 && sheet.getName() =='Лист1' ) - указываем ячейку (порядковый номер А=1,В=2 и т.д.) триггер - изменение которой будут давать сигнал на редактирование даты, в данном случае стоит 2 - значит смотрим столбец B //{var Value = a.range.offset(0, -1).getValues(); - Смотрим что в ячейке слева на 1 от idCol (указано -1, если будет 1 значит смотрим справа на одну), если ячейка пуста то ставим дату,если имеет данные то ничего не меняем //{var vartoday = getDate();sheet.getRange(idRow, 1).setValue( vartoday );}} - getRange(idRow, 1) - Указываем куда вставить дату 1 столбец - значит в А
[/vba]
Здравствуйте еще раз друзья. Не могли бы Вы помочь мне скорректировав следующий скрипт. 1. В скрипте прописан параметр, который прежде чем прописать текущую дату, проверяет наличие данных в другой ячейке. Возможно ли эту проверку отключить? 2. Скрипт прописывает текущую дату, если появляется информация в проверяемой ячейке, скажите, а возможно ли изменять текущую дату при изменении данных в проверяемой ячейке?
Вот собственно скрипт: [vba]
Код
function onEdit(a) { var sheet = a.source.getActiveSheet(); var idCol = a.range.getColumn(); var idRow = a.range.getRow(); if ( idCol == 6 && sheet.getName() =='Реестр' ) {var Value = a.range.offset(1, 3).getValues(); if ( Value == 0 ) {var vartoday = getDate(); sheet.getRange(idRow, 9).setValue( vartoday );}} } function getDate() { var today = new Date(); today.setDate(today.getDate()); return Utilities.formatDate(today, 'GMT+05:00', 'dd.MM.yyyy'); } //if ( idCol == 2 && sheet.getName() =='Лист1' ) - указываем ячейку (порядковый номер А=1,В=2 и т.д.) триггер - изменение которой будут давать сигнал на редактирование даты, в данном случае стоит 2 - значит смотрим столбец B //{var Value = a.range.offset(0, -1).getValues(); - Смотрим что в ячейке слева на 1 от idCol (указано -1, если будет 1 значит смотрим справа на одну), если ячейка пуста то ставим дату,если имеет данные то ничего не меняем //{var vartoday = getDate();sheet.getRange(idRow, 1).setValue( vartoday );}} - getRange(idRow, 1) - Указываем куда вставить дату 1 столбец - значит в А
И всё же придётся научиться. Нажимаете кнопку Правка под своим постом, выделяете код, нажимаете кнопку на панели инструментов, на которой нарисована решетка #, сохраняете изменения
И всё же придётся научиться. Нажимаете кнопку Правка под своим постом, выделяете код, нажимаете кнопку на панели инструментов, на которой нарисована решетка #, сохраняете измененияPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816