Страницы: 1
RSS
Автообновление данных в зависимых списках
 
Добрый день.


Прошу помочь с решением задачи:
Есть таблица с тремя листами:
1. Статья_расходов
2. Определение
3. Исходные данные

В лист Исходные_данные данные вносятся посредством выбора значений из списков на листах Статья_расходов и Определение, но если значения этих списков меняются на исходных листах, на листе Исходные_данные значения остаются прежними.

Задача: при изменении значения ячейки в списке-источнике нужно, чтобы данные автоматически обновлялись в зависимом списке.

Например, если в колонке Материал на листе Статья_расходов изменить значение Activ max на Activ min, на листе Исходные_данные в колонке Статья_расходов значение автоматически должно обновиться на Activ min. Если в колонке встречается несколько повторяющихся значений, они должны обновиться все. Автообновление должно работать при изменении любого значения списка-источника.

Файл примера во вложении
 
SilverTigress, это пробовали?https://www.planetaexcel.ru/techniques/2/81/ если я правильно понял
Изменено: Mershik - 17.01.2019 11:32:51
Не бойтесь совершенства. Вам его не достичь.
 
С ВПР колдую в разных вариациях, но пока не получается. Если я правильно понимаю смысл этой функции, она вытаскивает определенные значения и вставляет в указанный диапазон. При этом нужно точно знать, какое значение искать. Как указать новое значение при изменении ячейки в параметры ВПР и показать, что именно старое значение найти в таблице и заменить на новое я пока не разобралась

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

Цель - получить план бюджета на 2019 год, а когда появятся фактические названия материалов и услуг, внести изменения в списки - источники и получить сразу факт с обновленными данными.
Например, я планирую, что химикат будет называться AXE, а по факту, в мае  2019, его в наличие не будет, будет аналог под названием АXE2, я хочу изменить название в источнике плана и получить фактическую картину.
Изменено: SilverTigress - 17.01.2019 12:04:26
 
SilverTigress, а если там есть значение и вас его заменить нужно то это только макросом
Не бойтесь совершенства. Вам его не достичь.
 
Я, если честно, макросы еще никогда не писала :oops: , может уже кто-то сталкивался с подобной задачей и есть уже готовый макрос? ;)  
 
Странное желание. Вы часто собираетесь менять одно наименование на другое? Если Вы напишете в "Определения" вместо "Расходы по новому саду" вообще что-то другое (например Плановые накопления или Расходы по новому пруду), то у Вас на листе "Исх. данные" будет полная абракадабра и несоответствие. А если нужно просто заменить старое надоевшее или не понравившееся название на новое, то это же нечасто бывает, стоит ли заморачиваться с макросом? :)
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Лист Исходные_данные - это исходные данные для сводной таблицы. В нем будет несколько сотен строк, поэтому нужен макрос, чтобы при изменении данных ячеек первоисточника (листов Определения и Статья_расходов) в сводной таблице данные отобразились правильные.
Изменено: SilverTigress - 17.01.2019 12:45:07
 
Цитата
SilverTigress написал:
макрос, чтобы при изменении данных ячеек первоисточника...
Вот - макрос. Дальше - сами или обращайтесь в ветку "Работа".
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Михаил Лебедев,огромное Вам спасибо!!!
Я вчера тоже наваяла свой первый в жизни макрос, но он висиииииит на 200 позициях, будто там 200 тыс  :D

Код
Private Sub Worksheet_Change(ByVal Target As Range)

Dim vOldVal, vNowVal
Dim iCell, iSource As Range
 
Set m_wbBook = ThisWorkbook
Set m_inputSheet = m_wbBook.Worksheets("Исходные_данные (факт 2018)")
Set iSource = m_inputSheet.Range("Сад")

 If Target.Cells.Count > 1 Then Exit Sub
 If Target.Column = Range("garden").Column Then
     If IsEmpty(Target) Then Exit Sub
        vNowVal = Target.Value 'запоминаем введенное значение
            With Application
                .EnableEvents = 0 'отключаем отслеживание событий(чтобы не зациклить)
                .Undo 'отменяем введенные изменения
                 vOldVal = Target.Value 'запоминаем новое значение
                 Target.Value = vNowVal 'если надо вернуть значение
                .EnableEvents = 1 'возвращаем отслеживание событий
                If IsEmpty(vOldVal) Then Exit Sub
                If vOldVal = vNowVal Then Exit Sub
             End With
             
            
             If WorksheetFunction.CountIf(iSource, vOldVal) = 0 Then Exit Sub
             
             Set iCell = iSource.Find(vOldVal)
                Do Until iCell Is Nothing
                   iCell.Value = vNowVal
                  Set iCell = iSource.FindNext
                Loop


 End If
   
End Sub
 
Цитата
SilverTigress написал:
но он висиииииит на 200 позициях
Вииснииит, но отрабатывает до конца? Если нет,, то м.б. (навскидку) из-за цила Do...Loop. Запустите макрос клавишей F8 и пробегите его в пошаговом режиме. Удачи.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Три записи отрабатывает, а 200 полдня провисели :) Буду разбираться, спасибо!
 
Цитата
SilverTigress написал:
...наваяла свой первый в жизни макрос, но...
1. Вы используете Умные таблицы, наверно будет логично при создании макроса изучить и использовать объект ListObject.
2. Да, зацикливание происходит на цикле Do...Loop.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Большое спасибо! У меня все получилось!  
Страницы: 1
Наверх