VBA, Обработка массивов

В какой строке?
Если в той, что выделена, то речь видимо о Cells.
Может быть там почему-то нет активного листа. :man_shrugging:

Может быть выше надо Activate, а не Select.
https://www.automateexcel.com/vba/activate-select-sheet/

Или можно попробовать просто указать Worksheet и т.п.
https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet.cells

А, и там не те кавычки

:-1:

:+1:

спасибо. Теперь следующий вопрос
вот мой код

Sub fuctoind()
'Сначала объявляем переменные, используемые в программе.
'стоимость детали
Dim cena(10, 3) As Double
'количество (по месяцам)
Dim koll(10, 3) As Integer
'доход в месяц
Dim doh(3) As Double
' количество книг за 3 месяцa
Dim kol_n(10) As Integer
' книга с наибольшей прибылью.
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(7) записывается стоимость каждой книги, а в
'ячейках двумерного массива 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
 
'Далее на листе <<Результат>> в ячейку с определенным
'номером вводится ее название.
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, 2 + j) = koll(i, j)
kol_n(i) = koll_n + koll(i, j)
Next j
Cells(3 + i, 1 + p) = kol_n(i)
Next i
'Ниже происходит ввод названий соответствующих
'столбцов и строк.
Cells(17, 1) = "Результат в денежном эквиваленте"
Cells(18, 1) = "Наименование"
Cells(18, 2) = "Стоимость"
Cells(18, 5) = "Доход"
Cells(18, 8) = "Всего"  'Общий доход за 3 месяца
Cells(18, 9) = "Книга"
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, 2 + 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) * koll_n(i)
Next p
Next i
'Здесь описан алгоритм сравнения некоторого
'дохода с доходом, полученным
'в один из трех месяцев. Если рассматриваемый
'больше другого, то сумме наибольшего дохода
'присваивается текущее значение, а днем с
'максимальным заработком становится день
'под номером j.
For j = 1 To 3
Cells(30, 2 + j) = doh(j)
If doh(j) > dohl Then
dohl = doh(j)
kniga = j
End If
Next j
'Ниже выводится на лист с результатом работы программы
'доход за 3 месяца, книга с максимальным
'доходом и сколько она принесла дохода.
Cells(30, 8) = doh(6)
Cells(31, 1) = "Доход за 3 месяца"
Cells(31, 5) = doh(6)
Cells(32, 1) = "Книга с наибольшим доходом"
Cells(32, 5) = kniga
Cells(32, 6) = "Доход"
Cells(32, 8) = dohl
End Sub

Я так понимаю у меня ошибка в выводе данных с листа с исходными данными, так как вместо полной таблицы, у меня получилась таблица без 2 х других столбиков со стоимостью

For i = 1 To 10
For j = 1 To 3
koll(i, j) = Cells(3 + i, 4 + j)
Next j
Next

это все теоретически вроде как правильно, а вроде программа считывает как то не понятно

Я уже 1000 раз испробовал этот цикл, но ни в какую не получается сделать нормальную таблицу с исходными данными

Зачем теоретически?
Посмотрите в отладчике или добавьте отладочную печать.

http://blog.algoprog.ru/how-to-debug-small-programs/

можно же сразу цикл задать от 4 до 13

То же самое, думаю, и со вторым циклом. Тогда не будет необходимости суммирования в параметрах Cells

А ещё мне кажется, вот в этом блоке кода Вы цикл по p забыли

For i = 1 To 10
Cells(3 + i, 1 + p) = cena(i, p)
For j = 1 To 5
Сеlls(3 + i, 2 + j) = koll(i, j)
koll_n(i) = koll_n(i) + koll(i, j)
Next j
Сеlls(3 + i, 8) = koll_n(i)
Next i
Cells(3 + i, 1 + p) = cena(i, p)
Next p

Вот это тоже можно было из исходных данных циклом перетащить

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) = "Три мушкетера (А. Дюма)"
For i = 20 to 29
  Cells(i, 1) = Cells(i - 16, 1)
Next i

Ещё момент: у Вас doh объявлена как массив из трёх элементов

Dim doh(3) As Double

Но при этом в коде попадаются обращения к элементам за пределами массива

doh(4) = doh(4) + koll(i, j) * cena(i, p)
Cells(30, 8) = doh(6)
Cells(31, 1) = "Äîõîä çà 3 ìåñÿöà"
Cells(31, 5) = doh(6)

В двух местах используется нигде не обьявленная переменная koll_n

kol_n(i) = koll_n + koll(i, j)
Cells(19 + i, 8) = cena(i, p) * koll_n(i)

Потому что prib объявлен как массив

тогда будет выход за пределы массива, разве не так?

не получается

пробовал и вот так, результат не изменился

Sheets(“Íà÷_ä”).Select

For i = 1 To 10
For j = 1 To 3
cena(i, j) = Cells(3 + i, 1 + j)
koll(i, j) = Cells(3 + i, 4 + j)
Next j
Next i

Верно, я об этом не подумал :frowning:

Просто я обычно в подобных циклах пляшу от координат ячеек, чтоб проще было ориентироваться на листе

Что именно? В том сообщении речь не о том, как исправить конкретную проблему (для этого надо сначала понять причину), а об универсальном способе поиска причин неправильно работающего кода.

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)