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

Вход

Регистрация

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

 

= Мир MS Excel/Зависимость значения от текущей даты. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Зависимость значения от текущей даты. (Макросы/Sub)
Зависимость значения от текущей даты.
Лорик Дата: Четверг, 18.12.2014, 16:18 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 109
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Добрый день!
Позвольте подкинуть задачку Знатокам VBA. Думаю, что ее решение можно осуществить только с помощью макроса. (Опытом написания, которых не владею).
Исходные данные: В столбце «А» вносятся значения (как числовые, текстовые, так и смешанные). Значения в данном столбце периодически изменяются (в любой ячейке столбца). Рядом с исходным столбцом расположены столбцы по названию каждого из 12 месяцев.
Вопрос: Необходимо, чтобы внесенные изменения в столбец «А» отражались в соответствующем столбце месяца, если они были внесены в период его действия. То есть если, к примеру, файл был открыт в период с 01 декабря по 31 декабря, то внесенные в столбец изменения, отразились в столбце «Декабрь». Если изменения вносим в период 01 марта по 31 марта, то в столбец «Март» и т.п.
В течение текущего периода (месяца) изменения в ячейках столбца «А» могут проводиться не ограниченное число раз, но в столбце соответствующего месяца должно отражаться только последнее, внесенное в исходный столбец изменение (суммировать значения не нужно).
Файл прилагается.
К сообщению приложен файл: 0538552.xlsm (15.9 Kb)
 
Ответить
СообщениеДобрый день!
Позвольте подкинуть задачку Знатокам VBA. Думаю, что ее решение можно осуществить только с помощью макроса. (Опытом написания, которых не владею).
Исходные данные: В столбце «А» вносятся значения (как числовые, текстовые, так и смешанные). Значения в данном столбце периодически изменяются (в любой ячейке столбца). Рядом с исходным столбцом расположены столбцы по названию каждого из 12 месяцев.
Вопрос: Необходимо, чтобы внесенные изменения в столбец «А» отражались в соответствующем столбце месяца, если они были внесены в период его действия. То есть если, к примеру, файл был открыт в период с 01 декабря по 31 декабря, то внесенные в столбец изменения, отразились в столбце «Декабрь». Если изменения вносим в период 01 марта по 31 марта, то в столбец «Март» и т.п.
В течение текущего периода (месяца) изменения в ячейках столбца «А» могут проводиться не ограниченное число раз, но в столбце соответствующего месяца должно отражаться только последнее, внесенное в исходный столбец изменение (суммировать значения не нужно).
Файл прилагается.

Автор - Лорик
Дата добавления - 18.12.2014 в 16:18
Rioran Дата: Четверг, 18.12.2014, 16:40 | Сообщение № 2
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Лорик, здравствуйте.

Благословите модуль листа событийным макросом - и будет Вам счастье.

[vba]
Код
Dim RngX As Range

Private Sub Worksheet_Change(ByVal Target As Range)

Set RngX = Range("A4:A15")

If Not Intersect(Target, RngX) Is Nothing Then
     RngX.Offset(0, 1 + Month(Date)).Value = RngX.Value
End If

End Sub
[/vba]
К сообщению приложен файл: Rio_Columns.xlsm (17.1 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеЛорик, здравствуйте.

Благословите модуль листа событийным макросом - и будет Вам счастье.

[vba]
Код
Dim RngX As Range

Private Sub Worksheet_Change(ByVal Target As Range)

Set RngX = Range("A4:A15")

If Not Intersect(Target, RngX) Is Nothing Then
     RngX.Offset(0, 1 + Month(Date)).Value = RngX.Value
End If

End Sub
[/vba]

Автор - Rioran
Дата добавления - 18.12.2014 в 16:40
Лорик Дата: Четверг, 18.12.2014, 17:09 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 109
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Благословите модуль листа событийным макросом - и будет Вам счастье.

Здравствуйте,Rioran!
В Вашем варианте, при изменении периода, в столбец текущего месяца переносятся все значения которые внесены в ИСХОДНЫЙ столбец. А нужно, что бы при изменении временного периода, в столбце соответствующего месяца отражались только измененные значения. Если, к примеру, столбец "А" заполнен значениями А1,А2,А3,А4,А5, мы открыли файл 25 июня и исправили значение А3 на В18, то в столбце "Июнь" должно отразиться В18. При открытии файла 29 июня, если вносим изменение в ту же ячейку (М58, например), в столбце "Июнь" отражается М58. Открываем файл в августе,все имеющиеся на эту дату значения из ИСХОДНОГО столбца не должны копироваться в столбец "Август", отражаться должны только текущие изменения. Т.Е. в столбцах с наименованием месяца отражаются только те изменения которые вносятся в соответствующем временном периоде (месяце).
 
Ответить
Сообщение
Благословите модуль листа событийным макросом - и будет Вам счастье.

Здравствуйте,Rioran!
В Вашем варианте, при изменении периода, в столбец текущего месяца переносятся все значения которые внесены в ИСХОДНЫЙ столбец. А нужно, что бы при изменении временного периода, в столбце соответствующего месяца отражались только измененные значения. Если, к примеру, столбец "А" заполнен значениями А1,А2,А3,А4,А5, мы открыли файл 25 июня и исправили значение А3 на В18, то в столбце "Июнь" должно отразиться В18. При открытии файла 29 июня, если вносим изменение в ту же ячейку (М58, например), в столбце "Июнь" отражается М58. Открываем файл в августе,все имеющиеся на эту дату значения из ИСХОДНОГО столбца не должны копироваться в столбец "Август", отражаться должны только текущие изменения. Т.Е. в столбцах с наименованием месяца отражаются только те изменения которые вносятся в соответствующем временном периоде (месяце).

Автор - Лорик
Дата добавления - 18.12.2014 в 17:09
Rioran Дата: Четверг, 18.12.2014, 18:45 | Сообщение № 4
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Лорик, для этого поменяем переменные местами:

[vba]
Код
Dim RngX As Range

Private Sub Worksheet_Change(ByVal Target As Range)

Set RngX = Range("A4:A15")

If Not Intersect(Target, RngX) Is Nothing Then
     Target.Offset(0, 1 + Month(Date)).Value = Target.Value
End If

End Sub
[/vba]
К сообщению приложен файл: Rio_Columns2.xlsm (17.1 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеЛорик, для этого поменяем переменные местами:

[vba]
Код
Dim RngX As Range

Private Sub Worksheet_Change(ByVal Target As Range)

Set RngX = Range("A4:A15")

If Not Intersect(Target, RngX) Is Nothing Then
     Target.Offset(0, 1 + Month(Date)).Value = Target.Value
End If

End Sub
[/vba]

Автор - Rioran
Дата добавления - 18.12.2014 в 18:45
Лорик Дата: Пятница, 19.12.2014, 13:55 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 109
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
для этого поменяем переменные местами:

Спасибо,Rioran, Вы умничка! hands
Если можно, на языке обывателя, объясните как работает макрос. Я к тому, что если к примеру таблица с месяцами будет расположена ниже ИСХОДНОГО столбца или вообще на другом листе, будет ли работать макрос. Вообщем, если условие останется то же, но расположение таблиц будет другое.
 
Ответить
Сообщение
для этого поменяем переменные местами:

Спасибо,Rioran, Вы умничка! hands
Если можно, на языке обывателя, объясните как работает макрос. Я к тому, что если к примеру таблица с месяцами будет расположена ниже ИСХОДНОГО столбца или вообще на другом листе, будет ли работать макрос. Вообщем, если условие останется то же, но расположение таблиц будет другое.

Автор - Лорик
Дата добавления - 19.12.2014 в 13:55
Rioran Дата: Пятница, 19.12.2014, 14:55 | Сообщение № 6
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
С удовольствием поделюсь своими представлениями =) Общую логику смотрите в комментариях к коду.

[vba]
Код
'Объявляем публичную переменную.
Dim RngX As Range

'При создании событийного макроса автоматически объявляется переменная Target
'Этой переменной определяются изменённые ячейки
Private Sub Worksheet_Change(ByVal Target As Range)

'Просим переменную отвечать за область, в которой надо отслеживать изменения
Set RngX = Range("A4:A15")

'Если область изменений пересекается с областью, которую отслеживаем
If Not Intersect(Target, RngX) Is Nothing Then
     'То ячейка, отстоящая от изменённой через Х столбцов, равна изменённой
     'Где Х равен номеру месяца от текущей системной даты
     Target.Offset(0, 1 + Month(Date)).Value = Target.Value
End If

End Sub
[/vba]


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеС удовольствием поделюсь своими представлениями =) Общую логику смотрите в комментариях к коду.

[vba]
Код
'Объявляем публичную переменную.
Dim RngX As Range

'При создании событийного макроса автоматически объявляется переменная Target
'Этой переменной определяются изменённые ячейки
Private Sub Worksheet_Change(ByVal Target As Range)

'Просим переменную отвечать за область, в которой надо отслеживать изменения
Set RngX = Range("A4:A15")

'Если область изменений пересекается с областью, которую отслеживаем
If Not Intersect(Target, RngX) Is Nothing Then
     'То ячейка, отстоящая от изменённой через Х столбцов, равна изменённой
     'Где Х равен номеру месяца от текущей системной даты
     Target.Offset(0, 1 + Month(Date)).Value = Target.Value
End If

End Sub
[/vba]

Автор - Rioran
Дата добавления - 19.12.2014 в 14:55
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Зависимость значения от текущей даты. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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