Помогите пожалуйста с программой, два задания сделал, а с этим сижу уже вторую неделю. индивидуальное задание:
Фабрика "GRM pic" выпускает два вида каш для завтрака -"Crunchy" и "Chewy". Используемые в производстве обоих продук¬тов ингредиенты в основном одинаковы и, как правило, не являются дефицитными. На настоящий момент нет никаких ограничений на возможные объемы продаж. Имеется возможность продать всю произведенную продукцию. В табл. К 13.1 указано число человеко-часов, требуемое для производства 1 т продукта, доход ($) от производства 1 т продукта каждого вида и объем выпуска (т) за месяц.
Требуется составить макрос для подсчета фонда рабочего времени, необходимого на изготовление всей продукции в каждом цехе, и дохода от реализации продукции каждого вида. Макрос должен выполнять вычисления для произвольного числа видов работ и продукции и записывать вычисленные значения затрат времени в колонку, следующую за последней колонкой таблицы, а вычисленные значения дохода - в строку, следующую за последней строкой. Результаты вычислений приведены в табл.
Для подготовки контрольного примера №2 необходимо добавить несколько строк дополнительных видов работ и несколько колонок дополнительной продукции, ввести данные норм расхода рабочего времени на 1 т продукта каждого вида, дохода от производства 1 т продукта и объема выпуска.
Прикрепляю файл 33.xls, подскажите в чем ошибка, не хочет считать нижнюю строку по доходу.. правый столбец где "затраты.." еще не пробовал. Код программы:
[vba]
Код
Public Sub GRM_pic() 'В макросе используются следующие переменные: 'М- номер последней заполненной строки ' N - номер последней заполненной колонки 'i- номер текущей строки 'j - номер текущей колонки 'Sum - суммарное количество сырья каждого вида (кг) Dim M As Long, N As Long, i As Long, j As Long, Money As Single ' Найдем номер последней заполненной строки i = 1 Do ' Цикл до тех пор, пока не встретится пустая строка ' Cells(i, 3) - обращение к ячейке в текущей строке i и в 3 колонке If CStr(Cells(i, 3)) = "" Then M = i - 1 Exit Do ' Выход из цикла Else i = i + 1 ' Увеличение номера строки на 1 End If Loop ' Найдем номер последней заполненной колонки j = 1 Do ' Цикл до тех пор, пока не встретится пустая колонка ' Cells(3, j) - обращение к ячейке в 3 строке и в текущей колонке j If CStr(Cells(3, j)) = "" Then N = j - 1 Exit Do ' Выход из цикла Else j = j + 1 ' Увеличение номера колонки на 1 End If Loop ' Функция Chr (10) переводит курсор в начало новой строки ' данной ячейки Cells(M + 1, 1) = "Доход ($) от производства " & Chr(10) & "продукта за месяц" For j = 2 To N ' Цикл по колонкам For i = M - 1 To M ' Цикл по строкам ' Cells(i, 2) - обращение к ячейке в текущей строке i и во 2 колонке ' Cells(i, j) - обращение к ячейке в текущей строке i и в текущей ' колонке j Money = Cells(i, 2) * Cells(i, j) Next i ' Задание полужирного начертания шрифта Cells(M + 1, j).Font.Bold = True ' Задание горизонтального выравнивания в ячейке Cells(M + 1, j).HorizontalAlignment = xlHAlignCenter ' Запись вычисленного планового расхода Cells(M + 1, j) = Money Next j End Sub
[/vba]
Помогите пожалуйста с программой, два задания сделал, а с этим сижу уже вторую неделю. индивидуальное задание:
Фабрика "GRM pic" выпускает два вида каш для завтрака -"Crunchy" и "Chewy". Используемые в производстве обоих продук¬тов ингредиенты в основном одинаковы и, как правило, не являются дефицитными. На настоящий момент нет никаких ограничений на возможные объемы продаж. Имеется возможность продать всю произведенную продукцию. В табл. К 13.1 указано число человеко-часов, требуемое для производства 1 т продукта, доход ($) от производства 1 т продукта каждого вида и объем выпуска (т) за месяц.
Требуется составить макрос для подсчета фонда рабочего времени, необходимого на изготовление всей продукции в каждом цехе, и дохода от реализации продукции каждого вида. Макрос должен выполнять вычисления для произвольного числа видов работ и продукции и записывать вычисленные значения затрат времени в колонку, следующую за последней колонкой таблицы, а вычисленные значения дохода - в строку, следующую за последней строкой. Результаты вычислений приведены в табл.
Для подготовки контрольного примера №2 необходимо добавить несколько строк дополнительных видов работ и несколько колонок дополнительной продукции, ввести данные норм расхода рабочего времени на 1 т продукта каждого вида, дохода от производства 1 т продукта и объема выпуска.
Прикрепляю файл 33.xls, подскажите в чем ошибка, не хочет считать нижнюю строку по доходу.. правый столбец где "затраты.." еще не пробовал. Код программы:
[vba]
Код
Public Sub GRM_pic() 'В макросе используются следующие переменные: 'М- номер последней заполненной строки ' N - номер последней заполненной колонки 'i- номер текущей строки 'j - номер текущей колонки 'Sum - суммарное количество сырья каждого вида (кг) Dim M As Long, N As Long, i As Long, j As Long, Money As Single ' Найдем номер последней заполненной строки i = 1 Do ' Цикл до тех пор, пока не встретится пустая строка ' Cells(i, 3) - обращение к ячейке в текущей строке i и в 3 колонке If CStr(Cells(i, 3)) = "" Then M = i - 1 Exit Do ' Выход из цикла Else i = i + 1 ' Увеличение номера строки на 1 End If Loop ' Найдем номер последней заполненной колонки j = 1 Do ' Цикл до тех пор, пока не встретится пустая колонка ' Cells(3, j) - обращение к ячейке в 3 строке и в текущей колонке j If CStr(Cells(3, j)) = "" Then N = j - 1 Exit Do ' Выход из цикла Else j = j + 1 ' Увеличение номера колонки на 1 End If Loop ' Функция Chr (10) переводит курсор в начало новой строки ' данной ячейки Cells(M + 1, 1) = "Доход ($) от производства " & Chr(10) & "продукта за месяц" For j = 2 To N ' Цикл по колонкам For i = M - 1 To M ' Цикл по строкам ' Cells(i, 2) - обращение к ячейке в текущей строке i и во 2 колонке ' Cells(i, j) - обращение к ячейке в текущей строке i и в текущей ' колонке j Money = Cells(i, 2) * Cells(i, j) Next i ' Задание полужирного начертания шрифта Cells(M + 1, j).Font.Bold = True ' Задание горизонтального выравнивания в ячейке Cells(M + 1, j).HorizontalAlignment = xlHAlignCenter ' Запись вычисленного планового расхода Cells(M + 1, j) = Money Next j End Sub
Так нужно? Дополнительные данные, как они там хотят, сами вставьте С комментариями написал подробными понятно было чтобы [vba]
Код
Sub tt() Application.ScreenUpdating = False 'откл обновление экрана r1_ = Range("A" & Rows.Count).End(xlUp).Row 'ищем последнюю строку (встали в самый низ столбца А и нажали Контрл СтрелкаВверх c1_ = Cells(2, Columns.Count).End(xlToLeft).Column 'ищем последний столбец (встали в правый столбец строки 2 и нажали Контрл СтрелкаВлево Cells(r1_, 1).Resize(1, c1_).Copy Cells(r1_ + 1, 1) 'скопировали последнюю строку вниз (так мы взяли оттуда форматы) Cells(3, 2).Resize(r1_ - 1, 1).Copy 'скопировали 2-й столбец с числами Cells(3, c1_ + 1).Resize(r1_ - 1, 1).PasteSpecial (xlPasteFormats) 'вставили форматы в столбец с1_+1 Cells(r1_ + 1, 1) = "Доход ($) от производства продуктов за месяц" 'ввели название новой строки For i = 2 To c1_ 'цикл пл столбцам Cells(r1_ + 1, i) = Cells(r1_, i) * Cells(r1_ - 1, i) 'в каждом столбце в строке с1_+1 пишем знfчение из строк r1_*(r1_-1) Next i 'конец цикла Cells(1, 1).Resize(r1_ + 1).WrapText = True 'в столбце С делаем перенос текста по словам Columns(c1_ + 1).ColumnWidth = 22 'ширина нового столбца слева = 22 Cells(1, 1).Resize(2, 1).Copy Cells(1, c1_ + 1) 'копируем А1:А1 в шапку нового столбца Cells(1, c1_ + 1) = "Затраты времени (чел-ч) за месяц" 'вводим название нового столбца For j = 3 To 5 'цикл по строкам 1-5 z_ = 0 'переменная для суммы сейчас =0 For ii = 2 To c1_ 'цикл по столбцам z_ = z_ + Cells(j, ii) * Cells(7, ii) 'переменная для суммы равна самой себе предыдущей плюс значение в строке 7 * значение в строке j Next ii 'конец цикла Cells(j, c1_ + 1) = z_ 'в новый верт. столбец пишем посчитанную сумму Next j 'конец цикла Cells(r1_ + 1, 2).Resize(1, c1_ - 1).Font.Bold = True 'жирные числа в последней строке Cells(3, c1_ + 1).Resize(r1_ - 1).Font.Bold = True 'жирные числа в последнем столбце Range("A1").Resize(r1_ + 1, c1_ + 1).VerticalAlignment = xlCenter 'выравнивание всей таблицы по вертикали по центру Range("A1").Resize(1, c1_ + 1).HorizontalAlignment = xlCenter 'выравнивание шапки по горизонтали по центру Range("A1").Select 'выделяем ячейку А2 Application.ScreenUpdating = True 'включить обновление экрана End Sub
[/vba]
Так нужно? Дополнительные данные, как они там хотят, сами вставьте С комментариями написал подробными понятно было чтобы [vba]
Код
Sub tt() Application.ScreenUpdating = False 'откл обновление экрана r1_ = Range("A" & Rows.Count).End(xlUp).Row 'ищем последнюю строку (встали в самый низ столбца А и нажали Контрл СтрелкаВверх c1_ = Cells(2, Columns.Count).End(xlToLeft).Column 'ищем последний столбец (встали в правый столбец строки 2 и нажали Контрл СтрелкаВлево Cells(r1_, 1).Resize(1, c1_).Copy Cells(r1_ + 1, 1) 'скопировали последнюю строку вниз (так мы взяли оттуда форматы) Cells(3, 2).Resize(r1_ - 1, 1).Copy 'скопировали 2-й столбец с числами Cells(3, c1_ + 1).Resize(r1_ - 1, 1).PasteSpecial (xlPasteFormats) 'вставили форматы в столбец с1_+1 Cells(r1_ + 1, 1) = "Доход ($) от производства продуктов за месяц" 'ввели название новой строки For i = 2 To c1_ 'цикл пл столбцам Cells(r1_ + 1, i) = Cells(r1_, i) * Cells(r1_ - 1, i) 'в каждом столбце в строке с1_+1 пишем знfчение из строк r1_*(r1_-1) Next i 'конец цикла Cells(1, 1).Resize(r1_ + 1).WrapText = True 'в столбце С делаем перенос текста по словам Columns(c1_ + 1).ColumnWidth = 22 'ширина нового столбца слева = 22 Cells(1, 1).Resize(2, 1).Copy Cells(1, c1_ + 1) 'копируем А1:А1 в шапку нового столбца Cells(1, c1_ + 1) = "Затраты времени (чел-ч) за месяц" 'вводим название нового столбца For j = 3 To 5 'цикл по строкам 1-5 z_ = 0 'переменная для суммы сейчас =0 For ii = 2 To c1_ 'цикл по столбцам z_ = z_ + Cells(j, ii) * Cells(7, ii) 'переменная для суммы равна самой себе предыдущей плюс значение в строке 7 * значение в строке j Next ii 'конец цикла Cells(j, c1_ + 1) = z_ 'в новый верт. столбец пишем посчитанную сумму Next j 'конец цикла Cells(r1_ + 1, 2).Resize(1, c1_ - 1).Font.Bold = True 'жирные числа в последней строке Cells(3, c1_ + 1).Resize(r1_ - 1).Font.Bold = True 'жирные числа в последнем столбце Range("A1").Resize(r1_ + 1, c1_ + 1).VerticalAlignment = xlCenter 'выравнивание всей таблицы по вертикали по центру Range("A1").Resize(1, c1_ + 1).HorizontalAlignment = xlCenter 'выравнивание шапки по горизонтали по центру Range("A1").Select 'выделяем ячейку А2 Application.ScreenUpdating = True 'включить обновление экрана End Sub