Верно, я об этом не подумал
Просто я обычно в подобных циклах пляшу от координат ячеек, чтоб проще было ориентироваться на листе
Верно, я об этом не подумал
Просто я обычно в подобных циклах пляшу от координат ячеек, чтоб проще было ориентироваться на листе
Что именно? В том сообщении речь не о том, как исправить конкретную проблему (для этого надо сначала понять причину), а об универсальном способе поиска причин неправильно работающего кода.
Sub fuctoind()
'Сначала объявляем переменные, используемые в программе.
'стоимость книги
Dim cena(10, 3) As Double
'количество (по месяцам)
Dim koll(10, 3) As Integer
’ количество книг за 3 месяцa
Dim kol_n(10) As Integer
'доход за каждый месяц и общий доход за весь период
Dim doh(4) As Double
’ книга с наибольшей прибылью.
Dim kniga As Integer
’ доход с книги, принесшей наибольший доход
Dim dohl As Double
'счетчики циклов
Dim i As Integer, j As Integer, p As Integer
’ Далее всем переменным присваивается нулевое значение
For i = 1 To 10
kol_n(i) = 0
Next
For j = 1 To 3
doh(j) = 0
Next
For p = 1 To 3
Next
doh1 = 0
kniga = 0
'В этом фрагменте кода происходит считывание начальных
'данных с листа <<Нач_д>>, и в каждую ячейку массива
'cena(10,3) записывается стоимость каждой книги, а в
'ячейках двумерного массива koll(10,3) теперь находится
'количество книг каждого вида, изготовленных в
'каждый из месяцев.
Sheets(“Нач_д”).Select
For i = 1 To 10
For p = 1 To 3
cena(i, p) = Cells(3 + i, 1 + p)
Next p
Next i
For i = 1 To 10
For j = 1 To 3
koll(i, j) = Cells(3 + i, 4 + j)
Next j
Next i
'Далее на листе <<Результат>> в ячейку с определенным
'номером вводится ее название.
Sheets(“Результат”).Select
Cells(1, 1) = “Количество проданных книг”
Cells(2, 1) = “Наименование”
Cells(2, 2) = “Стоимость”
Cells(2, 5) = “Количество”
Cells(3, 2) = “1 месяц”
Cells(3, 3) = “2 месяц”
Cells(3, 4) = “3 месяц”
Cells(3, 5) = “1 месяц”
Cells(3, 6) = “2 месяц”
Cells(3, 7) = “3 месяц”
Cells(4, 1) = “Молодая гвардия (A.Фадеев)”
Cells(5, 1) = “Война и мир (Л.Н.Толстой)”
Cells(6, 1) = “Детство Никиты (А.Н. Толстой)”
Cells(7, 1) = “Два капитана (В. Каверин)”
Cells(8, 1) = “Рассказы (Т.Драйзер)”
Cells(9, 1) = “Избранное (Э. Хемингуэй)”
Cells(10, 1) = “Молдавские народные сказки”
Cells(11, 1) = “Поэмы. Стихи (А. Твардовский)”
Cells(12, 1) = “Мастер и Маргарита (М. Булгаков)”
Cells(13, 1) = “Три мушкетера (А. Дюма)”
Cells(2, 8) = " Количество книг за 3 месяца"
'В этом фрагменте происходит вывод на рабочий лист
'доходов по книгам в каждый месяц и
’ количество проданных книг за месяц
For i = 1 To 10
For p = 1 To 3
Cells(3 + i, 1 + p) = cena(i, p)
Next p
For j = 1 To 3
Cells(3 + i, 4 + j) = koll(i, j)
kol_n(i) = kol_n(i) + koll(i, j)
Next j
Cells(3 + i, 8) = kol_n(i)
Next i
'Ниже происходит ввод названий соответствующих
'столбцов и строк.
Cells(17, 1) = “Результат в денежном эквиваленте”
Cells(18, 1) = “Наименование”
Cells(18, 2) = “Стоимость”
Cells(18, 5) = “Доход”
Cells(18, 8) = “Всего” 'Общий доход за 3 месяца
Cells(19, 2) = “1 месяц”
Cells(19, 3) = “2 месяц”
Cells(19, 4) = “3 месяц”
Cells(19, 5) = “1 месяц”
Cells(19, 6) = “2 месяц”
Cells(19, 7) = “3 месяц”
Cells(20, 1) = “Молодая гвардия (A.Фадеев)”
Cells(21, 1) = “Война и мир (Л.Н.Толстой)”
Cells(22, 1) = “Детство Никиты (А.Н. Толстой)”
Cells(23, 1) = “Два капитана (В. Каверин)”
Cells(24, 1) = “Рассказы (Т.Драйзер)”
Cells(25, 1) = “Избранное (Э. Хемингуэй)”
Cells(26, 1) = “Молдавские народные сказки”
Cells(27, 1) = “Поэмы. Стихи (А. Твардовский)”
Cells(28, 1) = “Мастер и Маргарита (М. Булгаков)”
Cells(29, 1) = “Три мушкетера (А. Дюма)”
Cells(30, 1) = “Итого”
'Во внутреннем цикле происходит вычисление суммы
'дохода по i-му изделию в j-й месяц с выводом
'результата, а во внешнем цикле (после получения
'результатов внутреннего цикла, происходит вывод
'стоимости одной книги и по всем книгам. Расчет
'дохода за каждый месяц организован в
'этом же внутреннем цикле.
For i = 1 To 10
For p = 1 To 3
Cells(19 + i, 1 + p) = cena(i, p)
For j = 1 To 3
Cells(19 + i, 4 + j) = koll(i, j) * cena(i, p)
doh(j) = doh(j) + koll(i, j) * cena(i, p)
doh(4) = doh(4) + koll(i, j) * cena(i, p)
Next j
Cells(19 + i, 2) = cena(i, p)
Cells(19 + i, 8) = cena(i, p) * kol_n(i)
Next p
Next i
'Здесь описан алгоритм сравнения некоторого
'дохода с доходом, полученным
'в один из трех месяцев. Если рассматриваемый
'больше другого, то сумме наибольшего дохода
'присваивается текущее значение, а днем с
'максимальным заработком становится день
'под номером j.
For j = 1 To 3
Cells(30, 4 + j) = doh(j)
If doh(j) > doh1 Then
doh1 = doh(j)
kniga = j
End If
Next j
'Ниже выводится на лист с результатом работы программы
'доход за 3 месяца, книга с максимальным
'доходом и сколько она принесла дохода.
Cells(30, 8) = doh(4)
Cells(31, 1) = “Доход за 3 месяца”
Cells(31, 5) = doh(4)
Cells(32, 1) = “Книга с наибольшим доходом”
Cells(32, 5) = kniga
Cells(32, 7) = “Доход c книги”
Cells(32, 8) = doh1
End Sub
Я все исправил, только теперь проблема в том, что книга с наибольшим доходом у меня обозначается числом. Как сделать так, Чтобы в ячейку (32, 6) вводилось название этой книги
спасибо, я разобрался. Можете теперь предложить, что нибудь, чтобы в ячейке (32, 6) вводилось название книги?
Cells(32, 6) = Cells(kniga, 1)
спасибо большое
Sub fuctoind()
'Сначала объявляем переменные, используемые в программе.
'стоимость книги
Dim cena(10, 3) As Double
'количество (по месяцам)
Dim koll(10, 3) As Integer
' количество книг за 3 месяцa
Dim kol_n(10) As Integer
'доход за каждый месяц и общий доход за весь период
Dim doh(4) As Double
' книга с наибольшей прибылью.
Dim kniga As Integer
' доход с книги, принесшей наибольший доход
Dim dohl As Double
'счетчики циклов
Dim i As Integer, j As Integer, p As Integer
' Далее всем переменным присваивается нулевое значение
For i = 1 To 10
kol_n(i) = 0
Next
For j = 1 To 3
doh(j) = 0
Next
For p = 1 To 3
Next
doh1 = 0
kniga = 0
'В этом фрагменте кода происходит считывание начальных
'данных с листа <<Нач_д>>, и в каждую ячейку массива
'cena(10,3) записывается стоимость каждой книги, а в
'ячейках двумерного массива koll(10,3) теперь находится
'количество книг каждого вида, изготовленных в
'каждый из месяцев.
Sheets("Нач_д").Select
For i = 1 To 10
For p = 1 To 3
cena(i, p) = Cells(3 + i, 1 + p)
Next p
Next i
For i = 1 To 10
For j = 1 To 3
koll(i, j) = Cells(3 + i, 4 + j)
Next j
Next i
'Далее на листе <<Результат>> в ячейку с определенным
'номером вводится ее название.
Sheets("Результат").Select
Cells(1, 1) = "Количество проданных книг"
Cells(2, 1) = "Наименование"
Cells(2, 2) = "Стоимость"
Cells(2, 5) = "Количество"
Cells(3, 2) = "1 месяц"
Cells(3, 3) = "2 месяц"
Cells(3, 4) = "3 месяц"
Cells(3, 5) = "1 месяц"
Cells(3, 6) = "2 месяц"
Cells(3, 7) = "3 месяц"
Cells(4, 1) = "Молодая гвардия (A.Фадеев)"
Cells(5, 1) = "Война и мир (Л.Н.Толстой)"
Cells(6, 1) = "Детство Никиты (А.Н. Толстой)"
Cells(7, 1) = "Два капитана (В. Каверин)"
Cells(8, 1) = "Рассказы (Т.Драйзер)"
Cells(9, 1) = "Избранное (Э. Хемингуэй)"
Cells(10, 1) = "Молдавские народные сказки"
Cells(11, 1) = "Поэмы. Стихи (А. Твардовский)"
Cells(12, 1) = "Мастер и Маргарита (М. Булгаков)"
Cells(13, 1) = "Три мушкетера (А. Дюма)"
'В этом фрагменте происходит вывод на рабочий лист
'доходов по книгам в каждый месяц и
' количество проданных книг за месяц
For i = 1 To 10
For p = 1 To 3
Cells(3 + i, 1 + p) = cena(i, p)
Next p
For j = 1 To 3
Cells(3 + i, 4 + j) = koll(i, j) * cena(i, p)
Next j
Next i
'Ниже происходит ввод названий соответствующих
'столбцов и строк.
Cells(17, 1) = "Результат в денежном эквиваленте"
Cells(18, 1) = "Наименование"
Cells(18, 2) = "Стоимость"
Cells(18, 5) = "Доход"
Cells(18, 8) = "Всего" 'Общий доход за 3 месяца
Cells(19, 2) = "1 месяц"
Cells(19, 3) = "2 месяц"
Cells(19, 4) = "3 месяц"
Cells(19, 5) = "1 месяц"
Cells(19, 6) = "2 месяц"
Cells(19, 7) = "3 месяц"
Cells(20, 1) = "Молодая гвардия (A.Фадеев)"
Cells(21, 1) = "Война и мир (Л.Н.Толстой)"
Cells(22, 1) = "Детство Никиты (А.Н. Толстой)"
Cells(23, 1) = "Два капитана (В. Каверин)"
Cells(24, 1) = "Рассказы (Т.Драйзер)"
Cells(25, 1) = "Избранное (Э. Хемингуэй)"
Cells(26, 1) = "Молдавские народные сказки"
Cells(27, 1) = "Поэмы. Стихи (А. Твардовский)"
Cells(28, 1) = "Мастер и Маргарита (М. Булгаков)"
Cells(29, 1) = "Три мушкетера (А. Дюма)"
Cells(30, 1) = "Итого"
'Во внутреннем цикле происходит вычисление суммы
'дохода по i-му изделию в j-й месяц с выводом
'результата, а во внешнем цикле (после получения
'результатов внутреннего цикла, происходит вывод
'стоимости одной книги и по всем книгам. Расчет
'дохода за каждый месяц организован в
'этом же внутреннем цикле.
For i = 1 To 10
For p = 1 To 3
Cells(19 + i, 1 + p) = cena(i, p)
For j = 1 To 3
Cells(19 + i, 4 + j) = koll(i, j) * cena(i, p)
doh(j) = doh(j) + koll(i, j) * cena(i, p)
doh(4) = doh(4) + koll(i, j) * cena(i, p)
Next j
Cells(19 + i, 8) = cena(i, p) * kol_n(i)
Next p
Next i
'Здесь описан алгоритм сравнения некоторого
'дохода с доходом, полученным
'в один из трех месяцев. Если рассматриваемый
'больше другого, то сумме наибольшего дохода
'присваивается текущее значение, а днем с
'максимальным заработком становится день
'под номером j.
For j = 1 To 3
If doh(j) > doh1 Then
doh1 = doh(j)
kniga = j
End If
Next j
'Ниже выводится на лист с результатом работы программы
'доход за 3 месяца, книга с максимальным
'доходом и сколько она принесла дохода.
Cells(30, 8) = doh(4)
Cells(31, 1) = "Книга с наибольшим доходом"
Cells(31, 2) = kniga
Cells(31, 3) = Cells(3 + kniga, 1)
Cells(31, 6) = "Доход c книги"
Cells(31, 8) = doh1
End Sub
я не могу понять, почему у меня доход за месяц неправильно вычисляется
Вот тут у Вас в цикле по j cena(i, p) используется вне цикла по p. То есть p в этой формуле всегда будет равен 3.
For p = 1 To 3
Cells(3 + i, 1 + p) = cena(i, p)
Next p
For j = 1 To 3
Cells(3 + i, 4 + j) = koll(i, j) * cena(i, p)
Next j
я не понял где исправлять этот цикл
Надо форматировать код нормально, выставлять отступы. Тогда всё будет понятно.
И используйте кнопку Код при вставке кода на форум, чтоб отступы оставались (если конечно они были во вставленном коде).
Например, так (закинул в https://www.automateexcel.com/vba-code-indenter/):
Sub fuctoind()
'Сначала объявляем переменные, используемые в программе.
'стоимость книги
Dim cena(10, 3) As Double
'количество (по месяцам)
Dim koll(10, 3) As Integer
' количество книг за 3 месяцa
Dim kol_n(10) As Integer
'доход за каждый месяц и общий доход за весь период
Dim doh(4) As Double
' книга с наибольшей прибылью.
Dim kniga As Integer
' доход с книги, принесшей наибольший доход
Dim dohl As Double
'счетчики циклов
Dim i As Integer, j As Integer, p As Integer
' Далее всем переменным присваивается нулевое значение
For i = 1 To 10
kol_n(i) = 0
Next
For j = 1 To 3
doh(j) = 0
Next
For p = 1 To 3
Next
doh1 = 0
kniga = 0
'В этом фрагменте кода происходит считывание начальных
'данных с листа <<Нач_д>>, и в каждую ячейку массива
'cena(10,3) записывается стоимость каждой книги, а в
'ячейках двумерного массива koll(10,3) теперь находится
'количество книг каждого вида, изготовленных в
'каждый из месяцев.
Sheets("Нач_д").Select
For i = 1 To 10
For p = 1 To 3
cena(i, p) = Cells(3 + i, 1 + p)
Next p
Next i
For i = 1 To 10
For j = 1 To 3
koll(i, j) = Cells(3 + i, 4 + j)
Next j
Next i
'Далее на листе <<Результат>> в ячейку с определенным
'номером вводится ее название.
Sheets("Результат").Select
Cells(1, 1) = "Количество проданных книг"
Cells(2, 1) = "Наименование"
Cells(2, 2) = "Стоимость"
Cells(2, 5) = "Количество"
Cells(3, 2) = "1 месяц"
Cells(3, 3) = "2 месяц"
Cells(3, 4) = "3 месяц"
Cells(3, 5) = "1 месяц"
Cells(3, 6) = "2 месяц"
Cells(3, 7) = "3 месяц"
Cells(4, 1) = "Молодая гвардия (A.Фадеев)"
Cells(5, 1) = "Война и мир (Л.Н.Толстой)"
Cells(6, 1) = "Детство Никиты (А.Н. Толстой)"
Cells(7, 1) = "Два капитана (В. Каверин)"
Cells(8, 1) = "Рассказы (Т.Драйзер)"
Cells(9, 1) = "Избранное (Э. Хемингуэй)"
Cells(10, 1) = "Молдавские народные сказки"
Cells(11, 1) = "Поэмы. Стихи (А. Твардовский)"
Cells(12, 1) = "Мастер и Маргарита (М. Булгаков)"
Cells(13, 1) = "Три мушкетера (А. Дюма)"
'В этом фрагменте происходит вывод на рабочий лист
'доходов по книгам в каждый месяц и
' количество проданных книг за месяц
For i = 1 To 10
For p = 1 To 3
Cells(3 + i, 1 + p) = cena(i, p)
Next p
For j = 1 To 3
Cells(3 + i, 4 + j) = koll(i, j) * cena(i, p)
Next j
Next i
'Ниже происходит ввод названий соответствующих
'столбцов и строк.
Cells(17, 1) = "Результат в денежном эквиваленте"
Cells(18, 1) = "Наименование"
Cells(18, 2) = "Стоимость"
Cells(18, 5) = "Доход"
Cells(18, 8) = "Всего" 'Общий доход за 3 месяца
Cells(19, 2) = "1 месяц"
Cells(19, 3) = "2 месяц"
Cells(19, 4) = "3 месяц"
Cells(19, 5) = "1 месяц"
Cells(19, 6) = "2 месяц"
Cells(19, 7) = "3 месяц"
Cells(20, 1) = "Молодая гвардия (A.Фадеев)"
Cells(21, 1) = "Война и мир (Л.Н.Толстой)"
Cells(22, 1) = "Детство Никиты (А.Н. Толстой)"
Cells(23, 1) = "Два капитана (В. Каверин)"
Cells(24, 1) = "Рассказы (Т.Драйзер)"
Cells(25, 1) = "Избранное (Э. Хемингуэй)"
Cells(26, 1) = "Молдавские народные сказки"
Cells(27, 1) = "Поэмы. Стихи (А. Твардовский)"
Cells(28, 1) = "Мастер и Маргарита (М. Булгаков)"
Cells(29, 1) = "Три мушкетера (А. Дюма)"
Cells(30, 1) = "Итого"
'Во внутреннем цикле происходит вычисление суммы
'дохода по i-му изделию в j-й месяц с выводом
'результата, а во внешнем цикле (после получения
'результатов внутреннего цикла, происходит вывод
'стоимости одной книги и по всем книгам. Расчет
'дохода за каждый месяц организован в
'этом же внутреннем цикле.
For i = 1 To 10
For p = 1 To 3
Cells(19 + i, 1 + p) = cena(i, p)
For j = 1 To 3
Cells(19 + i, 4 + j) = koll(i, j) * cena(i, p)
doh(j) = doh(j) + koll(i, j) * cena(i, p)
doh(4) = doh(4) + koll(i, j) * cena(i, p)
Next j
Cells(19 + i, 8) = cena(i, p) * kol_n(i)
Next p
Next i
'Здесь описан алгоритм сравнения некоторого
'дохода с доходом, полученным
'в один из трех месяцев. Если рассматриваемый
'больше другого, то сумме наибольшего дохода
'присваивается текущее значение, а днем с
'максимальным заработком становится день
'под номером j.
For j = 1 To 3
If doh(j) > doh1 Then
doh1 = doh(j)
kniga = j
End If
Next j
'Ниже выводится на лист с результатом работы программы
'доход за 3 месяца, книга с максимальным
'доходом и сколько она принесла дохода.
Cells(30, 8) = doh(4)
Cells(31, 1) = "Книга с наибольшим доходом"
Cells(31, 2) = kniga
Cells(31, 3) = Cells(3 + kniga, 1)
Cells(31, 6) = "Доход c книги"
Cells(31, 8) = doh1
End Sub
Тогда сразу видно, что тут во втором цикле используется переменная из предыдущего уже завершенного цикла:
For p = 1 To 3
Cells(3 + i, 1 + p) = cena(i, p)
Next p
For j = 1 To 3
Cells(3 + i, 4 + j) = koll(i, j) * cena(i, p)
Next j
Не знаю что там предполагалось по задумке автора, это он должен вспомнить, может второй цикл должен был быть вложен в первый, но точно вряд ли то, что сейчас.
это вообще другой кусок кода.
И @Sciv выше не говорил, что надо что-то куда-то вставлять. Только то, что в том куске вашего кода (показанном в его сообщении) вероятно ошибка.
то есть надо написать вот так?
Эксель мне пишет , что p здесь всегда равно 3. Почему так происходит?
Sheets(“Íà÷_ä”).Select
For i = 1 To 10
For p = 1 To 3
cena(i, p) = Cells(3 + i, 1 + p)
Next p
Next i
По-моему, там достаточно одного цикла
For j = 1 To 3
Cells(3 + i, 1 + j) = cena(i, j)
Cells(3 + i, 4 + j) = koll(i, j) * cena(i, j)
Next j
исправил, как теперь подсчитать сумму каждой строки в прибыли? и как исправить цикл, чтобы он смотрел прибыл с книги, а не с месяца? (это нужно для того, чтобы найти книгу с наибольшим доходом)
Option Explicit
' создать и работать на новом листе
Sub Task_1()
'- исходные данные в виде таблицы, где указаны наименования книг, цена книги в каждом месяце, кол-во проданных книг за каждый месяц;
With ActiveSheet
.Range("$A$1") = "Исходные данные"
.Range("$A$2") = "Наименование книги"
.Range("$B$2") = "стоимость"
.Range("$E$2") = "количество"
.Range("$B$3") = "1-й месяц"
.Range("$C$3") = "2-й месяц"
.Range("$D$3") = "3-й месяц"
.Range("$E$3") = "1-й месяц"
.Range("$F$3") = "2-й месяц"
.Range("$G$3") = "3-й месяц"
.Range("$A$4") = """Молодая гвардия"" А.Фадеев"
.Range("$B$4") = 270
.Range("$C$4") = 290
.Range("$D$4") = 280
.Range("$E$4") = 187
.Range("$F$4") = 231
.Range("$G$4") = 256
.Range("$A$5") = """Война и мир"" Л.Н.Толстой"
.Range("$B$5") = 450
.Range("$C$5") = 500
.Range("$D$5") = 440
.Range("$E$5") = 290
.Range("$F$5") = 356
.Range("$G$5") = 387
.Range("$A$6") = """Детство Никиты"" А.Н.Толстой"
.Range("$B$6") = 230
.Range("$C$6") = 200
.Range("$D$6") = 210
.Range("$E$6") = 157
.Range("$F$6") = 223
.Range("$G$6") = 265
.Range("$A$7") = """Два капитана"" В.Каверин"
.Range("$B$7") = 350
.Range("$C$7") = 370
.Range("$D$7") = 380
.Range("$E$7") = 215
.Range("$F$7") = 275
.Range("$G$7") = 253
.Range("$A$8") = """Рассказы"" Т.Драйзер"
.Range("$B$8") = 150
.Range("$C$8") = 130
.Range("$D$8") = 145
.Range("$E$8") = 297
.Range("$F$8") = 345
.Range("$G$8") = 313
.Range("$A$9") = """Избранное"" Э.Хемингуэй"
.Range("$B$9") = 280
.Range("$C$9") = 250
.Range("$D$9") = 265
.Range("$E$9") = 134
.Range("$F$9") = 234
.Range("$G$9") = 198
.Range("$A$10") = "Молдавские народные сказки"
.Range("$B$10") = 420
.Range("$C$10") = 450
.Range("$D$10") = 435
.Range("$E$10") = 298
.Range("$F$10") = 315
.Range("$G$10") = 398
.Range("$A$11") = """Поэмы.Стихи"" А.Твардовский"
.Range("$B$11") = 380
.Range("$C$11") = 400
.Range("$D$11") = 390
.Range("$E$11") = 321
.Range("$F$11") = 298
.Range("$G$11") = 387
.Range("$A$12") = """Мастер и Маргарита"" М.Булгаков"
.Range("$B$12") = 400
.Range("$C$12") = 380
.Range("$D$12") = 410
.Range("$E$12") = 265
.Range("$F$12") = 364
.Range("$G$12") = 324
.Range("$A$13") = """Три мушкетера"" А.Дюма"
.Range("$B$13") = 360
.Range("$C$13") = 350
.Range("$D$13") = 370
.Range("$E$13") = 143
.Range("$F$13") = 269
.Range("$G$13") = 249
.Columns.AutoFit
End With
End Sub
Sub Task_2()
' - доход по каждой книге за 3 месяца
Dim i As Integer, j As Integer
Dim arrAmount As Variant
Dim arrPrice As Variant
Dim profitByBook As Double
With ActiveSheet
.Range("H3") = "доход по каждой книге за 3 месяца vba"
.Range("I3") = "доход по каждой книге за 3 месяца формула"
For i = 4 To 13
profitByBook = 0
arrAmount = Application.Transpose(Application.Transpose(.Range(.Cells(i, "E"), .Cells(i, "G"))))
arrPrice = Application.Transpose(Application.Transpose(.Range(.Cells(i, "B"), .Cells(i, "D"))))
For j = LBound(arrAmount) To UBound(arrAmount)
profitByBook = profitByBook + CDbl(arrAmount(j)) * CDbl(arrPrice(j))
Next j
.Cells(i, "H") = profitByBook
.Cells(i, "I").FormulaR1C1 = "=RC2*RC5+RC3*RC6+RC4*RC7"
Next i
End With
End Sub
Sub Task_3()
'- доход за каждый месяц по всем книгам;
Dim i As Integer, j As Integer
Dim arrAmount As Variant
Dim arrPrice As Variant
Dim profitByMonth As Double
With ActiveSheet
.Range("B15") = "доход за каждый месяц по всем книгам vba"
.Range("C15") = "доход за каждый месяц по всем книгам формула"
.Range("A16") = .Range("B3")
.Range("A17") = .Range("C3")
.Range("A18") = .Range("D3")
.Range("C16").FormulaR1C1 = "=SUMPRODUCT(R4C2:R14C2,R4C5:R14C5)"
.Range("C17").FormulaR1C1 = "=SUMPRODUCT(R4C3:R14C3,R4C6:R14C6)"
.Range("C18").FormulaR1C1 = "=SUMPRODUCT(R4C4:R14C4,R4C7:R14c7)"
For i = 2 To 4
profitByMonth = 0
arrAmount = Application.Transpose(.Range(.Cells(4, i), .Cells(13, i)))
arrPrice = Application.Transpose(.Range(.Cells(4, i + 3), .Cells(13, i + 3)))
For j = LBound(arrAmount) To UBound(arrAmount)
profitByMonth = profitByMonth + CDbl(arrAmount(j)) * CDbl(arrPrice(j))
Next j
.Range("B15").Offset(i - 1) = profitByMonth
Next i
End With
End Sub
Sub Task_4()
'- общий доход по всем книгам за 3 месяца;
Dim i As Integer, j As Integer
Dim arrAmount As Variant
Dim arrPrice As Variant
Dim profitTotal As Double
With ActiveSheet
.Range("A20") = "общий доход по всем книгам за 3 месяца vba"
.Range("A21") = "общий доход по всем книгам за 3 месяца формула"
.Range("B21").FormulaR1C1 = "=R[-5]C3+R[-4]C3+R[-3]C3"
profitTotal = 0
For i = 2 To 4
arrAmount = Application.Transpose(.Range(.Cells(4, i), .Cells(13, i)))
arrPrice = Application.Transpose(.Range(.Cells(4, i + 3), .Cells(13, i + 3)))
For j = LBound(arrAmount) To UBound(arrAmount)
profitTotal = profitTotal + CDbl(arrAmount(j)) * CDbl(arrPrice(j))
Next j
Next i
.Range("B20") = profitTotal
End With
End Sub
Sub Task_5()
'- наименование книги, принёсший наибольший доход
Dim i As Integer, j As Integer
Dim arrAmount As Variant
Dim arrPrice As Variant
Dim mostProfitable As Double
Dim mostProfitableIndex As Integer
Dim currentProfitByBook As Double
With ActiveSheet
.Range("A24") = "наименование книги, принёсший наибольший доход vba"
.Range("A25") = "наименование книги, принёсший наибольший доход формула"
arrAmount = .Range("E4:G13")
arrPrice = .Range("B4:D13")
mostProfitable = 0
For i = LBound(arrAmount, 1) To UBound(arrAmount, 1) ' 1 - 10
currentProfitByBook = 0
For j = LBound(arrAmount, 2) To UBound(arrAmount, 2)
currentProfitByBook = currentProfitByBook + arrAmount(i, j) * arrPrice(i, j)
Next j
If currentProfitByBook > mostProfitable Then
mostProfitable = currentProfitByBook
mostProfitableIndex = i
End If
Next i
.Range("B24") = .Range("A3").Offset(mostProfitableIndex)
.Range("C24") = mostProfitable
.Range("B25").Formula = "=OFFSET(A3,MATCH(C25,I4:I13,0),0)"
.Range("C25").Formula = "=LARGE(I4:I13,1)"
End With
End Sub