Добрый день, необходимо на листе расход сырья ввести формулу, суть задачи взять ингридиенты из листа рецептура 2 и на основании плана по позициям посчитать итоговый расход по дням.
Добрый день, необходимо на листе расход сырья ввести формулу, суть задачи взять ингридиенты из листа рецептура 2 и на основании плана по позициям посчитать итоговый расход по дням.alor1404
А как оно привязано к сырью? По позиции? )) Вообще есть рабочий вариант сделать функцией пользователя, но не по профилю (( Если нужна UDF - открывайте тему в VBA
А как оно привязано к сырью? По позиции? )) Вообще есть рабочий вариант сделать функцией пользователя, но не по профилю (( Если нужна UDF - открывайте тему в VBAHugo
двойной клик левой кнопкой мыши по ячейке с датой [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Application.ScreenUpdating = False 'отключаем обновление экрана a = Target.Row 'строка ячейки b = Target.Column 'столбец ячейки c = Target.Value 'значение ячейки 'если строка = 1 и столбец > 1 и значение не пустое If a = 1 And b > 1 And c <> "" Then Cancel = True 'отмена даблклика d = Cells(Rows.Count, "a").End(xlUp).Row 'нижняя строка столбца A (Расход сырья) e = Sheets("Рецептура").Cells(Rows.Count, "a").End(xlUp).Row '*(Рецептура) For g = 2 To d 'цикл от 2й до нижней строки 'цикл по столбцу (Рецептура) m = 0 'сумма For Each j In Sheets("Рецептура").Range(Sheets("Рецептура").Cells(2, g + 1), Sheets("Рецептура").Cells(e, g + 1)).SpecialCells(xlCellTypeConstants, 23) k = j.Row 'строка ячеки l = j.Value 'значение ячейки n = Sheets("План производства").Cells(k, b).Value 'значение ячейки (План производства) m = l * n + m 'сумма Next Cells(g, b) = m 'запишем сумму в ячейку Next End If Application.ScreenUpdating = True 'включаем End Sub
[/vba] апдэйт - выбросил лишнее
проверяйте, вдруг правильно
двойной клик левой кнопкой мыши по ячейке с датой [vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Application.ScreenUpdating = False 'отключаем обновление экрана a = Target.Row 'строка ячейки b = Target.Column 'столбец ячейки c = Target.Value 'значение ячейки 'если строка = 1 и столбец > 1 и значение не пустое If a = 1 And b > 1 And c <> "" Then Cancel = True 'отмена даблклика d = Cells(Rows.Count, "a").End(xlUp).Row 'нижняя строка столбца A (Расход сырья) e = Sheets("Рецептура").Cells(Rows.Count, "a").End(xlUp).Row '*(Рецептура) For g = 2 To d 'цикл от 2й до нижней строки 'цикл по столбцу (Рецептура) m = 0 'сумма For Each j In Sheets("Рецептура").Range(Sheets("Рецептура").Cells(2, g + 1), Sheets("Рецептура").Cells(e, g + 1)).SpecialCells(xlCellTypeConstants, 23) k = j.Row 'строка ячеки l = j.Value 'значение ячейки n = Sheets("План производства").Cells(k, b).Value 'значение ячейки (План производства) m = l * n + m 'сумма Next Cells(g, b) = m 'запишем сумму в ячейку Next End If Application.ScreenUpdating = True 'включаем End Sub
Раз уж тут появилось VBA - мой первый вариант. Ничего кликать не нужно - просто вводите формулу в первую ячейку и протягиваете вправо и вниз. Но код проверяет только рецептуру и компоненты, даты не сверяются, следите за аргументом. Хотя можно конечно дописать проверку, да вообще можно доработать для больших диапазонов чтоб работала одна функция, а не миллион... P.S. для отличия от всех других сделал чтоб 0 не показывало )) Смотрю в файле на 365-м Экселе показывает как будто это формула массива ({}), но эту функцию не нужно вводить как формулу массива, она обрабатывает и работает с одной ячейкой. Вот если написать массивную сразу на весь диапазон - тогда это будет формула массива.
Раз уж тут появилось VBA - мой первый вариант. Ничего кликать не нужно - просто вводите формулу в первую ячейку и протягиваете вправо и вниз. Но код проверяет только рецептуру и компоненты, даты не сверяются, следите за аргументом. Хотя можно конечно дописать проверку, да вообще можно доработать для больших диапазонов чтоб работала одна функция, а не миллион... P.S. для отличия от всех других сделал чтоб 0 не показывало )) Смотрю в файле на 365-м Экселе показывает как будто это формула массива ({}), но эту функцию не нужно вводить как формулу массива, она обрабатывает и работает с одной ячейкой. Вот если написать массивную сразу на весь диапазон - тогда это будет формула массива.Hugo