На одном листе две одинаковые таблицы по структуре ( первая Остатки, вторая Поступление). Как сделать чтоб значения в таблице Остатки запоминала свои значения и складывала к ним значения из соответствующих ячеек другой таблицы Поступления.
На форуме нашла решение только для одной ячейки, ну мне нужно для всей таблицы. Заранее благодарю за помощь.
пример загурзила
На одном листе две одинаковые таблицы по структуре ( первая Остатки, вторая Поступление). Как сделать чтоб значения в таблице Остатки запоминала свои значения и складывала к ним значения из соответствующих ячеек другой таблицы Поступления.
На форуме нашла решение только для одной ячейки, ну мне нужно для всей таблицы. Заранее благодарю за помощь.
Сделать не сложно - можно на словаре парой циклов, можно тупо цикл в цикле в цикле в цикле перебором ячеек, но я вообще против такой организации всего этого дела. Потом кто-то дважды код запустит а я буду виноват... ((
Сделать не сложно - можно на словаре парой циклов, можно тупо цикл в цикле в цикле в цикле перебором ячеек, но я вообще против такой организации всего этого дела. Потом кто-то дважды код запустит а я буду виноват... ((Hugo
Добрый вечер. Конкретно для вашего примера достаточно простой макрос в модуль листа. Принцип такой - при изменении значения какой то ячейки в диапазоне P5:Y66 это значение прибавляется к значению ячейки в той же строке на 14 столбцов левее. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("P5:Y66")) Is Nothing And Target.Count = 1 Then Target.Offset(, -14) = Target.Offset(, -14) + Target End If End Sub
[/vba] (Упростил вашу формулу в столбцах L и Z , и рекомендация - не мешало бы защитить первую таблицу от ручного изменения значений)
Добрый вечер. Конкретно для вашего примера достаточно простой макрос в модуль листа. Принцип такой - при изменении значения какой то ячейки в диапазоне P5:Y66 это значение прибавляется к значению ячейки в той же строке на 14 столбцов левее. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("P5:Y66")) Is Nothing And Target.Count = 1 Then Target.Offset(, -14) = Target.Offset(, -14) + Target End If End Sub
[/vba] (Упростил вашу формулу в столбцах L и Z , и рекомендация - не мешало бы защитить первую таблицу от ручного изменения значений)i691198
Я когда писал про словарь или циклы - это писалось для универсального варианта, если вдруг перепутаны местами названия и профили. А так то конечно можно слепо прибавлять при изменениях, но не дай бог ошибиться при вводе...
Я когда писал про словарь или циклы - это писалось для универсального варианта, если вдруг перепутаны местами названия и профили. А так то конечно можно слепо прибавлять при изменениях, но не дай бог ошибиться при вводе...Hugo
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("P5:Y66")) Is Nothing And Target.Count = 1 Then Target.Offset(, -14) = Target.Offset(, -14) + Target End If End Sub
Класс! Вот, что значит хорошее логическое мышление и знания! Спасибо вам большое!
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("P5:Y66")) Is Nothing And Target.Count = 1 Then Target.Offset(, -14) = Target.Offset(, -14) + Target End If End Sub
Класс! Вот, что значит хорошее логическое мышление и знания! Спасибо вам большое!Naira-Ast
Эта проблема актуальна для любых подобных накопительных таблиц или ведомостей. Поэтому выполнять такую работу должны ответственные операторы, а не случайные люди. Для знающего человека исправить ошибку совсем несложно, главное её выявить. Благо структура входной таблицы удобна для визуального контроля.
Эта проблема актуальна для любых подобных накопительных таблиц или ведомостей. Поэтому выполнять такую работу должны ответственные операторы, а не случайные люди. Для знающего человека исправить ошибку совсем несложно, главное её выявить. Благо структура входной таблицы удобна для визуального контроля.i691198
(Упростил вашу формулу в столбцах L и Z , и рекомендация - не мешало бы защитить первую таблицу от ручного изменения значений)
Для меня Экзель открывается с новой стороны о которой я даже не знала, всегда считала Экзель примитивной программой и топила за 1С, ну сейчас понимаю, что можно такие крутые вещи делать!
изменения в формуле в столбцах L и Z не работает почему то, загружу сейчас эту формулу, в чем интересно ошибка?
(Упростил вашу формулу в столбцах L и Z , и рекомендация - не мешало бы защитить первую таблицу от ручного изменения значений)
Для меня Экзель открывается с новой стороны о которой я даже не знала, всегда считала Экзель примитивной программой и топила за 1С, ну сейчас понимаю, что можно такие крутые вещи делать!
изменения в формуле в столбцах L и Z не работает почему то, загружу сейчас эту формулу, в чем интересно ошибка?Naira-Ast
изменения в формуле в столбцах L и Z не работает почему то
- работало в примере... Но я предлагаю такой вариант, тут и поправить косяки всегда можно за любую дату. Ещё форматы в шапках поправил, но это не принципиально. Можно в коде добавить чтобы при удалении значений по одному вручную в базу не писало, но это на результат не влияет. Зато видно что кто-то косячил )) Можно кстати и этого оператора тоже туда писать, если нужно, а лист сделать скрытым чтоб оператор туда не лез.
изменения в формуле в столбцах L и Z не работает почему то
- работало в примере... Но я предлагаю такой вариант, тут и поправить косяки всегда можно за любую дату. Ещё форматы в шапках поправил, но это не принципиально. Можно в коде добавить чтобы при удалении значений по одному вручную в базу не писало, но это на результат не влияет. Зато видно что кто-то косячил )) Можно кстати и этого оператора тоже туда писать, если нужно, а лист сделать скрытым чтоб оператор туда не лез.Hugo
Hugo, Так удобно! Благодарю! единственное ,если можете подсказать как защитить исходную (СЛЕВА) таблицу от изменений, чтоб формулы не удалились
Hugo, Так удобно! Благодарю! единственное ,если можете подсказать как защитить исходную (СЛЕВА) таблицу от изменений, чтоб формулы не удалилисьNaira-Ast
Сообщение отредактировал Naira-Ast - Четверг, 25.07.2024, 21:56
- и слева, и справа - это в формате ячейки крыжик делает. И Рецензирование - снять/поставить защиту. Пароля сейчас нет. Лист отобразить можно в VBE. Или кодом, если уметь и знать что где искать. Когда/если VBE закрыт паролем. P.S. тут код ещё и юзера пишет, себя я подтер ))
- и слева, и справа - это в формате ячейки крыжик делает. И Рецензирование - снять/поставить защиту. Пароля сейчас нет. Лист отобразить можно в VBE. Или кодом, если уметь и знать что где искать. Когда/если VBE закрыт паролем. P.S. тут код ещё и юзера пишет, себя я подтер ))Hugo
Hugo, точно! буду пробовать доделывать,по аналогии и по другим материалам похожие таблицы, спасибо за код, сама точно такой не смогла бы написать! если возникнут еще вопросы я напишу)))!
Hugo, точно! буду пробовать доделывать,по аналогии и по другим материалам похожие таблицы, спасибо за код, сама точно такой не смогла бы написать! если возникнут еще вопросы я напишу)))!Naira-Ast
Naira-Ast, И в таком решении эти таблицы могут быть расположены как угодно (хоть на разных листах, или в разных файлах), содержать шапки слева и сверху в любом порядке, с любым содержимым - суммироваться будет если совпадёт с базой название и профиль, следить нужно чтоб это совпадало - а то в базу вдруг понапишите названия с английской "a" - и не посчитается половина данных... И формат данных профилей важен - не путать текст с числами, или учитывать это усложняя формулы.
Naira-Ast, И в таком решении эти таблицы могут быть расположены как угодно (хоть на разных листах, или в разных файлах), содержать шапки слева и сверху в любом порядке, с любым содержимым - суммироваться будет если совпадёт с базой название и профиль, следить нужно чтоб это совпадало - а то в базу вдруг понапишите названия с английской "a" - и не посчитается половина данных... И формат данных профилей важен - не путать текст с числами, или учитывать это усложняя формулы.Hugo
Hugo, Добрый вечер! Пыталась подстроить ваш код под чуть измененную мной форму, ну увы ничего не выходит.. подскажите что нужно изменить? Здесь нужно чтоб данные с правой таблицы передавались в левую и заполнялась база , ну просто не знаю что еще поменять, чтоб заработало Прикрепила файл, заранее спасибо!
Hugo, Добрый вечер! Пыталась подстроить ваш код под чуть измененную мной форму, ну увы ничего не выходит.. подскажите что нужно изменить? Здесь нужно чтоб данные с правой таблицы передавались в левую и заполнялась база , ну просто не знаю что еще поменять, чтоб заработало Прикрепила файл, заранее спасибо!Naira-Ast
[/vba] Но формулы нужно докрутить, чтоб по виду раскидывало. P.S. Сори, раскидывает, но не везде - проверьте все формулы, они с косяками! В первой строке.
[/vba] Но формулы нужно докрутить, чтоб по виду раскидывало. P.S. Сори, раскидывает, но не везде - проверьте все формулы, они с косяками! В первой строке.Hugo
Но формулы нужно докрутить, чтоб по виду раскидывало. P.S. Сори, раскидывает, но не везде - проверьте все формулы, они с косяками! В первой строке.
Это формулы с прошлого файла сохранились, здесь нужно сделать проще ,в прошлом нужна была сумма произведений длины профиля на количество, а здесь только сумма количества и я не смогла ее изменить под эту задачу просто, использовать Функцию СуммаЕСли может нужно здесь
Но формулы нужно докрутить, чтоб по виду раскидывало. P.S. Сори, раскидывает, но не везде - проверьте все формулы, они с косяками! В первой строке.
Это формулы с прошлого файла сохранились, здесь нужно сделать проще ,в прошлом нужна была сумма произведений длины профиля на количество, а здесь только сумма количества и я не смогла ее изменить под эту задачу просто, использовать Функцию СуммаЕСли может нужно здесьNaira-Ast
Сообщение отредактировал Naira-Ast - Вторник, 30.07.2024, 20:26
суммирует произведение значения столбца D на 0 или 1 и на 0 или 1. Если оба условия в строке выполняются то *1, иначе *0 Т.е. в базу копируется то что человек вводит в правую таблицу, а левая из базы суммирует всё что введено для этого названия и этого вида. Можно кстати ещё добавить в условие отбор/фильтр по например только для сегодня, или текущая неделя, или текущему месяцу/кварталу/году, или выбирать этот параметр где-то рядом в выпадающем списке... Или сделать рядом другую такую таблицу, где будут собираться такие суммы - если вдруг будет нужна такая сводка. Например а как люди работают по пятницам? ))
Naira-Ast, Там не сумма произведений считается, а просто по факту сумма при совпадении условий. Формула
суммирует произведение значения столбца D на 0 или 1 и на 0 или 1. Если оба условия в строке выполняются то *1, иначе *0 Т.е. в базу копируется то что человек вводит в правую таблицу, а левая из базы суммирует всё что введено для этого названия и этого вида. Можно кстати ещё добавить в условие отбор/фильтр по например только для сегодня, или текущая неделя, или текущему месяцу/кварталу/году, или выбирать этот параметр где-то рядом в выпадающем списке... Или сделать рядом другую такую таблицу, где будут собираться такие суммы - если вдруг будет нужна такая сводка. Например а как люди работают по пятницам? ))Hugo