Доброго всем времечка!!!! в продолжении темы. Все работает прекрасно, внедрено и размножено. Дополнительно возник один вопросик. а что добавить в код, что бы при добавлении данных в лист план в листе Состав считалось только это добавление? а все ранее посчитанные данные оставались неизменными? То есть добавляем цифирку в лист план , к примеру на 20е число. нажимаем кнопку. и к имеющимся уже данным в диапазоне C1:AG30 листа Состав добавляется только расчет вновь добавленной цифры на листе План.
Доброго всем времечка!!!! в продолжении темы. Все работает прекрасно, внедрено и размножено. Дополнительно возник один вопросик. а что добавить в код, что бы при добавлении данных в лист план в листе Состав считалось только это добавление? а все ранее посчитанные данные оставались неизменными? То есть добавляем цифирку в лист план , к примеру на 20е число. нажимаем кнопку. и к имеющимся уже данным в диапазоне C1:AG30 листа Состав добавляется только расчет вновь добавленной цифры на листе План.китин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
при добавлении данных в лист план в листе Состав считалось только это добавление
Если ты одно значение в Плане поменял, то его запомнить несложно, а вот если ты их много поменял, да еще не сразу, а в течение дня, а только потом кнопку нажал ... Ведь эти поменяшки нужно где-то (например, на суперскрытом листе) запоминать. Может просто облегчить твой код? Например, вот так (основное изменение в том, что мы не пишем формулу на 1000 строк, а сначала вычисляем r1_ - кол-во заполненных строк в Плане). Еще поубирал у тебя ненужные селекты и дистинейшены и CutCopyMode в нужные места поставил.
[vba]
Код
Sub СУММПР_1() Dim lLastRow As Long Dim lLastCol As Long Application.ScreenUpdating = 0 lLastCol = Cells(31, Columns.Count).End(xlToLeft).Column r1_ = Sheets("План").Range("B" & Rows.Count).End(xlUp).Row With Range(Cells(1, 2), Cells(1, lLastCol)) .FormulaLocal = "=СУММПРОИЗВ(План!$G$18:$I$" & r1_ & "*(План!$C$18:$C$" & r1_ & "=состав!B$31))" 'вставляем формулу в 1 строку .Copy .PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End With With Range(Cells(1, 2), Cells(29, lLastCol)) .FormulaLocal = "=СУММПРОИЗВ(План!$P$18:$GA$" & r1_ & "*(План!$P$16:$GA$16=""СБ"")*(План!$P$15:$GA$15=состав!$A2)*(состав!B$31=План!$C$18:$C$" & r1_ & "))" .Copy .PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End With With Range(Cells(30, 2), Cells(30, lLastCol)) .FormulaLocal = "=СУММПРОИЗВ(План!$GB$19:$GB$" & r1_ & "*(План!$C$19:$C$" & r1_ & "=состав!B$31))" .Copy .PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End With
Dim sh As Worksheet, r As Range 'убираем нули после спецвставка( код от Ярослава) '=====
'===== Application.ScreenUpdating = 1 End Sub
[/vba]
Сознательно не стал убирать СУММПРОИЗВ (хотя без них и лучше было бы), чтобы тебе пока, на первых порах, попонятнее было бы.
при добавлении данных в лист план в листе Состав считалось только это добавление
Если ты одно значение в Плане поменял, то его запомнить несложно, а вот если ты их много поменял, да еще не сразу, а в течение дня, а только потом кнопку нажал ... Ведь эти поменяшки нужно где-то (например, на суперскрытом листе) запоминать. Может просто облегчить твой код? Например, вот так (основное изменение в том, что мы не пишем формулу на 1000 строк, а сначала вычисляем r1_ - кол-во заполненных строк в Плане). Еще поубирал у тебя ненужные селекты и дистинейшены и CutCopyMode в нужные места поставил.
[vba]
Код
Sub СУММПР_1() Dim lLastRow As Long Dim lLastCol As Long Application.ScreenUpdating = 0 lLastCol = Cells(31, Columns.Count).End(xlToLeft).Column r1_ = Sheets("План").Range("B" & Rows.Count).End(xlUp).Row With Range(Cells(1, 2), Cells(1, lLastCol)) .FormulaLocal = "=СУММПРОИЗВ(План!$G$18:$I$" & r1_ & "*(План!$C$18:$C$" & r1_ & "=состав!B$31))" 'вставляем формулу в 1 строку .Copy .PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End With With Range(Cells(1, 2), Cells(29, lLastCol)) .FormulaLocal = "=СУММПРОИЗВ(План!$P$18:$GA$" & r1_ & "*(План!$P$16:$GA$16=""СБ"")*(План!$P$15:$GA$15=состав!$A2)*(состав!B$31=План!$C$18:$C$" & r1_ & "))" .Copy .PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End With With Range(Cells(30, 2), Cells(30, lLastCol)) .FormulaLocal = "=СУММПРОИЗВ(План!$GB$19:$GB$" & r1_ & "*(План!$C$19:$C$" & r1_ & "=состав!B$31))" .Copy .PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End With
Dim sh As Worksheet, r As Range 'убираем нули после спецвставка( код от Ярослава) '=====
'===== Application.ScreenUpdating = 1 End Sub
[/vba]
Сознательно не стал убирать СУММПРОИЗВ (хотя без них и лучше было бы), чтобы тебе пока, на первых порах, попонятнее было бы._Boroda_
и к имеющимся уже данным в диапазоне C1:AG30 листа Состав добавляется только расчет вновь добавленной цифры на листе План.
хотелось бы, что бы все старые цифры на листе Состав оставались неизменными.старые данные на листе состав могут изменять вручную. хотелось бы что бы эти цифры не менялись, а добавлялся бы только пересчет вноыь добавленных цифр на лист План
Саша спасибо. Работает моментально, но малость не то.
и к имеющимся уже данным в диапазоне C1:AG30 листа Состав добавляется только расчет вновь добавленной цифры на листе План.
хотелось бы, что бы все старые цифры на листе Состав оставались неизменными.старые данные на листе состав могут изменять вручную. хотелось бы что бы эти цифры не менялись, а добавлялся бы только пересчет вноыь добавленных цифр на лист Планкитин
Не судите очень строго:я пытаюсь научиться ЯД 41001877306852
Доброго всем времени. Приложил новый файлик. Что надо добавить в код, что бы при добавлении данных на лист ноябрь_компл формула бы пересчитывала только добавленные данные ,оставив все предидущие данные на листе Расход неизменными
Доброго всем времени. Приложил новый файлик. Что надо добавить в код, что бы при добавлении данных на лист ноябрь_компл формула бы пересчитывала только добавленные данные ,оставив все предидущие данные на листе Расход неизменнымикитин
две штуки Private Sub Worksheet_Change(ByVal Target As Range)
Придется в "одной штуке" указывать разные диапазоны обработки или разные условия или что там еще. Типа [vba]
Код
If Not Application.Intersect(Range("A1:B20"), Target) Is Nothing Then КОД End If If Not Application.Intersect(Range("C1:E20"), Target) Is Nothing Then КОД End If
две штуки Private Sub Worksheet_Change(ByVal Target As Range)
Придется в "одной штуке" указывать разные диапазоны обработки или разные условия или что там еще. Типа [vba]
Код
If Not Application.Intersect(Range("A1:B20"), Target) Is Nothing Then КОД End If If Not Application.Intersect(Range("C1:E20"), Target) Is Nothing Then КОД End If
Игорь, ты ж не в мусульманской стране живешь? Пока, по крайней мере. Жена должна быть одна. Но (если по этическим, физиологическим, экономическим и другим соображениям ты допускаешь такой расклад) любовниц, которым ты говоришь, что "Да ты ж почти жена, вот видишь, сейчас же я с тобой" - их может быть много. Теоретически. В понедельник у одной, во вторник у другой ... Вот и пиши Worksheet_Change с условиями, как Василич написал - если пересечение (Intersect) изменяемого диапазона (Target) и диапазона A1:B20 не (Not) пусто (Is Nothing), то сейчас понедельник и ты у Наташи (условно) - КОД_1. А если первое условие не выполняется (не понедельник сегодня), то проверяем вторник (диапазон C1:E20) и, если таки вторник, то идешь к Юле (КОД_2). Если и не вторник, то никуда не идешь, сидишь дома и пиво пьёшь. Условия могут быть не обязательно с Intersect, могут быть любые другие, типа If Range("D4")=7 Then - это если независимо от дня недели тебе позвонила Виолетта и сказала, что внезапно очень-очень соскучилась. Но заметь - в любом случае у тебя или одна "жена", или ни одной. Так и события листа и книги - оно в коде может быть только одно, а в нем уже несколько условий (если нужно).
Игорь, ты ж не в мусульманской стране живешь? Пока, по крайней мере. Жена должна быть одна. Но (если по этическим, физиологическим, экономическим и другим соображениям ты допускаешь такой расклад) любовниц, которым ты говоришь, что "Да ты ж почти жена, вот видишь, сейчас же я с тобой" - их может быть много. Теоретически. В понедельник у одной, во вторник у другой ... Вот и пиши Worksheet_Change с условиями, как Василич написал - если пересечение (Intersect) изменяемого диапазона (Target) и диапазона A1:B20 не (Not) пусто (Is Nothing), то сейчас понедельник и ты у Наташи (условно) - КОД_1. А если первое условие не выполняется (не понедельник сегодня), то проверяем вторник (диапазон C1:E20) и, если таки вторник, то идешь к Юле (КОД_2). Если и не вторник, то никуда не идешь, сидишь дома и пиво пьёшь. Условия могут быть не обязательно с Intersect, могут быть любые другие, типа If Range("D4")=7 Then - это если независимо от дня недели тебе позвонила Виолетта и сказала, что внезапно очень-очень соскучилась. Но заметь - в любом случае у тебя или одна "жена", или ни одной. Так и события листа и книги - оно в коде может быть только одно, а в нем уже несколько условий (если нужно). _Boroda_
Всем доброго !!! Код от _Boroda_, работает просто блестяще. Но возникла проблемка. Решил автоматизировать работу файла. И добавил в лист ноябрь_компл формулу, переносящую данные с листа комплектация на лист ноябрь_компл. и считать перестало. Походу код не воспринимает результат паботы формулы как изменине ячейки. бяда !!! как это исправить?
Всем доброго !!! Код от _Boroda_, работает просто блестяще. Но возникла проблемка. Решил автоматизировать работу файла. И добавил в лист ноябрь_компл формулу, переносящую данные с листа комплектация на лист ноябрь_компл. и считать перестало. Походу код не воспринимает результат паботы формулы как изменине ячейки. бяда !!! как это исправить?китин