Использование диапазонов и наборов в Visual Basic - PullRequest
0 голосов
/ 01 марта 2020

у меня 2 одинаковые матрицы. У них есть ячейки: первая матрица имеет ячейки a11, a12, ..., aij, вторая ячейка b11, b12, ..., bij. Мне нужно написать формулу =A11*B11 + A12*B12 + A13*B13 ... + Aij*Bij и так далее до правого нижнего угла матрицы. Я хотел сделать макросы, чтобы не тратить время на матрицу 10 х 10, потому что написание такой формулы 100 раз занимает очень много времени. У меня есть код:

Sub myMacros()
  'where to
  Dim form As String
  form = "="

'Choose cell where to put formula
Dim whereToPutFormula As Range
Set whereToPutFormula = Application.InputBox("Choose cell where to put formula", Type:=8)

'Range of first and second matrix
Dim firstMatrix As Range

Set firstMatrix = Application.InputBox("Range of the first matrix", Type:=8)
Dim secondMatrix As Range
Set secondMatrix = Application.InputBox("Range of the second matrix", Type:=8)

col_number = InputBox("How many columns in matrix")
row_number = InputBox("How many rows in matrix")

'variables for loop
Dim Rows As Integer
Dim Columns As Integer

'loop for formula
For Rows = 1 To row_number
    For Columns = 1 To col_number
        'val_from_firstMatrix = Range(firstMatrix).Cells().Value2
        'val_from_secondMatrix = Range(secondMatrix).Cells().Value2
        If Rows = row_number And Columns = col_number Then
            form = form & Range(firstMatrix).Cells(Rows, Columns).Address(RowAbsolute:=False, ColumnAbsolute:=False) & "*"
            form = form & Range(secondMatrix).Cells(Rows, Columns).Address(RowAbsolute:=False, ColumnAbsolute:=False)
            Debug.Print form
        Else:
            form = form & Range(firstMatrix).Cells(Rows, Columns).Address(RowAbsolute:=False, ColumnAbsolute:=False) & "*"
            form = form & Range(secondMatrix).Cells(Rows, Columns).Address(RowAbsolute:=False, ColumnAbsolute:=False) & " + "
            Debug.Print form
        End If
    Next Columns
Next Rows

End Sub

Но он возвращает ошибку

Ошибка 1004, метод 'Range' поля '_Global' объекта.

если при условии. Что я должен изменить, чтобы он работал?

1 Ответ

1 голос
/ 01 марта 2020

Исходя из нашего обсуждения в комментариях, я выкладываю следующее:

Ваш вопрос меня смущает. Кажется, у вас есть наложенные матрицы (10x10, одна из которых начинается с A11, а вторая B11?).

Предположительно, ваша ошибка в строке, содержащей Range(firstMatrix). firstMatrix является Range объектом. Аргумент для объекта Range, используемый таким образом, должен быть NAME диапазона, не другого объекта Range.

Также обратите внимание, что Формула в вашем вопросе: =A11*B11 + A12*B12 + A13*B13 эквивалентна: =SUMPRODUCT(A11:A13,B11:B13)

Если бы ваши матрицы были просто одним столбцом, это было бы так же, как

`=SUMPRODUCT(A11:An,B11:Bn)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...