Как по клику по строчке показывать определенные данные?

У меня Excel 2007, если на нем задача не решается, могу поставить другую версию.
Также подойдет реализация на Google Sheets.
Имеется 3 листа: Менеджеры, Клиенты и Заказы.
Как сделать, чтобы при клике по строке с товарами, сверху менялись данные.
Данные связаны по id клиента и id менеджера.
На последней картинке клик был по ячейке "Мясо", сверху должны быть данные как указаны на картинке.
Листы Менеджеры и Клиенты
618febac7b787081014184.png
618febb443e72394604581.png

618febbbda12b804701753.png

Updt. Через "Исходный код" добавил скрипт вида:
6190232cdfd5b708042614.png
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Range("D5:E9"), Target) Is Nothing Then Exit Sub
    Range("B1").Value = "=ВПР(B" & ActiveCell.Row & ";клиенты!A:C;2;0)"
    Range("C1").Value = "=ВПР(B" & ActiveCell.Row & ";клиенты!A:C;3;0)"
    Range("B2").Value = "=ВПР(С" & ActiveCell.Row & ";менеджеры!A:C;2;0)"
    Range("C2").Value = "=ВПР(С" & ActiveCell.Row & ";менеджеры!A:C;3;0)"
End Sub

Получаю ошибку 1004 при событии.
Хотя формула рабочая и без макроса прекрасно работает:
=ВПР(B5;клиенты!A:C;2;0)
Не могу понять, что не так?
Функция ВПР не может работать через макрос? Чем тогда ее заменить?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 1
Tolly
@Tolly Автор вопроса
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Range("D5:E9"), Target) Is Nothing Then Exit Sub
    Range("B1").FormulaLocal = "=ВПР(B" & ActiveCell.Row & ";клиенты!A:C;2;0)"
    Range("C1").FormulaLocal = "=ВПР(B" & ActiveCell.Row & ";клиенты!A:C;3;0)"
    Range("B2").FormulaLocal = "=ВПР(C" & ActiveCell.Row & ";менеджеры!A:C;2;0)"
    Range("C2").FormulaLocal = "=ВПР(C" & ActiveCell.Row & ";менеджеры!A:C;3;0)"
End Sub
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
ProgrammerForever
@ProgrammerForever Куратор тега Excel
Учитель, автоэлектрик, программист, музыкант
Для Google sheets есть onSelectionChange(event).
  1. Получаете адрес ячейки, и содержимое
    let value = range.getCell(1, 1).getValue()

  2. Ищите данные по этому запросу
    data.filter(row=>row[0]===value)

  3. И пишите результат в нужные ячейки
    range.setValues(outData)


Или можно выделить одну ячейку для текущего значения выделения, а искать значения формулами с ВПР/FILTER, такой гибридный способ и быстрее работать будет и более устойчив к редактированию структуры таблицы
Если нужно готовое решение - пишите в личку
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы