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

Дано: на листе 1 и листе 2 есть по 3 столбца (предположим, x, y, z, где z = x*y). Листы не полностью повторяют друг друга, но эти колонки есть в каждом из них.
Задача: как сделать, чтобы при изменении любого из параметров xyz в столбцах автоматически менялись и другие два параметра, но (!) не только в рамках листа 1, но и на другом. Я догадываюсь, что это должно быть сделано при помощи Worksheet_Change, но не понимаю как увязать диапазоны ячеек с двух различных листов :(

Спасибо!
 
Лучше бы в файле-примере показать, что конкретно хотите.
По Вашему объяснению судя, получается простая формула, но, подозреваю, что не все так просто там...
Кому решение нужно - тот пример и рисует.
 
У меня к сожалению с рабочего компьютера нельзя прицепить файл - слишком заботятся о безопасности :(

Но в принципе суть такая: допустим, на одном листе три столбца: количество X, цена Y и общая сумма Z (произведение первых двух).
В другом листе тоже есть эти столбцы, но находятся в другом порядке расположения, а потому использовать ввод значений на всех листах сразу через выделение всех листов не получится. Нужно: я ввожу значение количества - меняется соответствующая сумма на всех листах. Ввожу сумму - меняется зависящее от неё количество (также на всех листах).

Была некогда тема схожая, но там вопрос был в значении на одном листе и с указанием одной конкретной ячейки, а вот как быть с диапазоном на других листах, я не пойму.
 
Цитата
nansipok написал: У меня к сожалению с рабочего компьютера нельзя прицепить файл
Будете дома - прицепите.
 
Посмотрите в файле (изменяете X,Y в исходной таблице - меняются значения в зависимой)
Изменено: Sanja - 22.06.2015 10:23:17
Согласие есть продукт при полном непротивлении сторон
 
Юрий М, ну рабочий файл я так и так не смогу прицепить. Только чисто для примера набросать две таблички с тремя столбцами. Sanja подобный файл приложил (можно на его примере), но мне нужно чтобы листы были взаимозаменяемы, то есть изменение значений в одном, влекло изменение значений в другом и наоборот, то есть нет одного строго зависимого.
 
Цитата
nansipok написал:
рабочий файл я так и так не смогу прицепить. Только чисто для примера набросать две таблички с тремя столбцами.
ИМЕННО это и нужно - никто не требует от Вас РАБОЧИЙ файл, создайте небольшой аналог с такой же структурой.
 
Верно ли я понимаю, что у вас две одинаковые таблицы на двух листах, и надо обеспечить отслеживание изменений в любой из них, с соответствующим изменением в другой?
Кому решение нужно - тот пример и рисует.
 
Юрий М, ну только когда доберусь до другого компьютера :) Пока без возможности.

Пытливый, да, верно. Таблицы могут быть и не одинаковые, но эти три столбца в них есть точно.
 
"Столбцы" = диапазоны? Они всегда одинакового размера? Например А1:А10, С1:С10, В1:В10 на всех таблицах?
Если да, то можно решить довольно простым макросом копирования диапазона, в котором произошли изменения в другие заданные листы, и так для каждого листа, участвующего в развлечении.. :)
Кому решение нужно - тот пример и рисует.
 
Пытливый, да, если в одной табличке 10 ячеек в столбце, то и в другом столько же, то есть размерность везде "А1:А10, С1:С10, В1:В10".
Ну вот для меня не так просто увязать эти диапазоны взаимно :)
 
В принципе, возможно сделать как-то так:
В книге с листами с именами Лист1, Лист2, Лист3 в модуль каждого листа запихнуть одинаковый макрос, реагирующий на изменение в диапазоне А1:С10. Примерно вот такой:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim byI As Byte
Dim lngJ As Long
Dim strList()
    strList = Array("Лист1", "Лист2", "Лист3") 'задаем массив имен листов, на которых расположены связанные диапазоны
    'отслеживаем изменения только в ОДНОЙ ячейке заданного диапазона,
    'т.е. если изменения в нескольких ячейках сразу
    'или изменяется ячейка, не входящая в диапазон - не сработает.
    If Target.Cells.Count > 1 And Not Intersect(Target, Range("A1:C10")) Is Nothing Then
        Exit Sub
    End If
lngJ = Target.Column
'копируем диапазон (весь) содержащий измененную ячейку
Cells(1, lngJ).Resize(Cells(Rows.Count, lngJ).End(xlUp).Row, 1).Copy
    'проверяем все листы с заданными именами
    For byI = LBound(strList) To UBound(strList)
        'если имя проверяемого листа отличается от активного
        If Worksheets(strList(byI)).Name <> ActiveSheet.Name Then
            'решительно вставляем скопированный диапазон в нужный столбец на проверяемом листе
            With Worksheets(strList(byI))
                .Range(.Cells(1, lngJ).Address).PasteSpecial Paste:=xlPasteAll
            End With
        End If
    Next byI
Application.CutCopyMode = False
End Sub

Затем, на любом листе, в пределах заданного диапазона меняем значение ячейки - происходит копирование измененного диапазона на другие листы.
Пример работы - в прилагаемом файле.
Писал на скору руку, опытные камрады могут показать более оптимальный код.
Кому решение нужно - тот пример и рисует.
 
Цитата
Пытливый написал: в модуль каждого листа запихнуть одинаковый макрос
Можно ОДИН, но в модуль книги )
 
Пытливый, у меня не работает :/
 
nansipok, у вас к стати макросы разрешены? Вкладка разработчик - безопасность макросов - включить все макросы.
 
Да, само собой, разрешены.
 
А "не работает" - вы изменяете в заданном диапазоне значения в моем примере, а на других значения не меняются? Или что?

P.S.И, кстати, уважаемый Юрий М, конечно же, прав! Можно один макрос. :)
Изменено: Пытливый - 22.06.2015 14:03:18
Кому решение нужно - тот пример и рисует.
 
Цитата
вы изменяете в заданном диапазоне значения в моем примере...
Да, именно так. Макросы включены. У Вас работает?
 
Да, у меня работает. При открытии моего файла запрашивает включение макросов?
У вас есть файлы с макросам, которые работают?
Еще вариант - открыть мой последний файл, залезть в модуль книги, скопировать код, создать новый файл с 3 листами Лист1, Лист2..., вставить в модуль книги скопированный код, сохранить.
Кому решение нужно - тот пример и рисует.
 
Пытливый, проблема оказалась в смешном, а именно в "новый файл с 3 листами Лист1, Лист2..." - я совсем забыл, что у меня английский эксель на работе и, соответственно, листы и книги зовутся Sheets и Books :)

Работает! Но сам бы я до такого решения не додумался точно. Спасибо большое!
Страницы: 1
Читают тему
Наверх