Это моя первая сложная работа с макросами. Части поставленной задачи не могу разобрать. Помогите, пожалуйста, записать код макроса на следующую таблицу. На листах 1 и 2 есть данные, которые постоянно пополняются. На листе 3 должна формироваться таблица с объединенными данными с этих двух листов по номеру заказа. ФИО могут отличаться на этих двух листах, тогда по ячейкам в обобщенной таблице факта и плана может быть "пусто".
Еще на листе 4 есть таблица данных, из которой также по данным номера заказа будет формироваться таблица на листе 5. Из всплывающего списка в ячейке А2 будет выбираться номер заказа, и по этому номеру будет заполняться таблица. К датам легко применима формула СУММАЕСЛИ, но! К заказчику и № договора ее применить нельзя. Может быть есть другая формула, которую можно применить, или же макросом записать такое действие?
Буду благодарна Вашей помощи!!!
Доброго времени суток!
Это моя первая сложная работа с макросами. Части поставленной задачи не могу разобрать. Помогите, пожалуйста, записать код макроса на следующую таблицу. На листах 1 и 2 есть данные, которые постоянно пополняются. На листе 3 должна формироваться таблица с объединенными данными с этих двух листов по номеру заказа. ФИО могут отличаться на этих двух листах, тогда по ячейкам в обобщенной таблице факта и плана может быть "пусто".
Еще на листе 4 есть таблица данных, из которой также по данным номера заказа будет формироваться таблица на листе 5. Из всплывающего списка в ячейке А2 будет выбираться номер заказа, и по этому номеру будет заполняться таблица. К датам легко применима формула СУММАЕСЛИ, но! К заказчику и № договора ее применить нельзя. Может быть есть другая формула, которую можно применить, или же макросом записать такое действие?
Привет с листами 4 и 5 - непонятно. А с 1-3 попробуйте так [vba]
Код
Sub ertert() Dim x, y, i&, j& With Sheets("Sheet1") x = .Range("A1:D" & .Cells(Rows.Count, 1).End(xlUp).Row).Value End With: x(1, 4) = "Факт" With CreateObject("Scripting.Dictionary") .CompareMode = 1 For i = 1 To UBound(x) .Item(x(i, 1) & "~" & x(i, 2)) = i Next i With Sheets("Sheet2") y = .Range("A2:D" & .Cells(Rows.Count, 1).End(xlUp).Row).Value End With For i = 1 To UBound(y) If .Exists(y(i, 1) & "~" & y(i, 2)) Then x(.Item(y(i, 1) & "~" & y(i, 2)), 4) = y(i, 3) Else j = j + 1 y(j, 1) = y(i, 1): y(j, 2) = y(i, 2) y(j, 3) = "": y(j, 4) = y(i, 3) End If Next i End With With Sheets("Sheet3").Range("A1") .CurrentRegion.ClearContents .Resize(UBound(x), 4).Value = x .Item(UBound(x) + 1, 1).Resize(j, 4).Value = y With .CurrentRegion .Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlYes End With End With End Sub
[/vba] зеленая кнопка в файле
Привет с листами 4 и 5 - непонятно. А с 1-3 попробуйте так [vba]
Код
Sub ertert() Dim x, y, i&, j& With Sheets("Sheet1") x = .Range("A1:D" & .Cells(Rows.Count, 1).End(xlUp).Row).Value End With: x(1, 4) = "Факт" With CreateObject("Scripting.Dictionary") .CompareMode = 1 For i = 1 To UBound(x) .Item(x(i, 1) & "~" & x(i, 2)) = i Next i With Sheets("Sheet2") y = .Range("A2:D" & .Cells(Rows.Count, 1).End(xlUp).Row).Value End With For i = 1 To UBound(y) If .Exists(y(i, 1) & "~" & y(i, 2)) Then x(.Item(y(i, 1) & "~" & y(i, 2)), 4) = y(i, 3) Else j = j + 1 y(j, 1) = y(i, 1): y(j, 2) = y(i, 2) y(j, 3) = "": y(j, 4) = y(i, 3) End If Next i End With With Sheets("Sheet3").Range("A1") .CurrentRegion.ClearContents .Resize(UBound(x), 4).Value = x .Item(UBound(x) + 1, 1).Resize(j, 4).Value = y With .CurrentRegion .Sort Key1:=.Cells(1, 1), Order1:=xlAscending, Header:=xlYes End With End With End Sub
nilem, благодарю! Наконец-то я вернулась к этому макросу... Есть такой момент, что макрос заполняет таблицу просто всеми данными, а не по фильтру номера заказа ((((((((( Сейчас немного изменила таблицу конечную, чтобы примерно понимать, как фильтр должен быть... Прошу помощи, если есть возможность!!!
nilem, благодарю! Наконец-то я вернулась к этому макросу... Есть такой момент, что макрос заполняет таблицу просто всеми данными, а не по фильтру номера заказа ((((((((( Сейчас немного изменила таблицу конечную, чтобы примерно понимать, как фильтр должен быть... Прошу помощи, если есть возможность!!!Искра
Доброго времени суток, уважаемые участники данного форума и в частности автор nilem!! С моим файлом немного усложнилась задача. Макрос прекрасно работает, когда в ячейке А2 на листе 3 вписываем число. Но сейчас в данной ячейке будут данные из списка заказов, сформированного с помощью "проверки данных". Также в листах 1 и 2 по столбцам А данные внесены формулами. И макрос логично "ругается" на ячейку А2 листа 3 с range.value. Не могу понять, как это исправить, чтобы макрос работал в этом случае.Прикрепляю файл примером, как это выглядит. Надеюсь на Вашу помощь.
Доброго времени суток, уважаемые участники данного форума и в частности автор nilem!! С моим файлом немного усложнилась задача. Макрос прекрасно работает, когда в ячейке А2 на листе 3 вписываем число. Но сейчас в данной ячейке будут данные из списка заказов, сформированного с помощью "проверки данных". Также в листах 1 и 2 по столбцам А данные внесены формулами. И макрос логично "ругается" на ячейку А2 листа 3 с range.value. Не могу понять, как это исправить, чтобы макрос работал в этом случае.Прикрепляю файл примером, как это выглядит. Надеюсь на Вашу помощь.Искра
подсобите аналогичная табличка но добавлен отбор. по группам и периодам. спасиб. [moder]Читаем Правила форума, создаём свою тему. Эта тема закрыта[/moder]
подсобите аналогичная табличка но добавлен отбор. по группам и периодам. спасиб. [moder]Читаем Правила форума, создаём свою тему. Эта тема закрыта[/moder]severyanin