2016-12-12 3 views
0

Я пытаюсь запустить это, чтобы разработать функцию для умножения матрицы, которая похожа на SUMPRODUCT. Но я продолжаю получать определенную ошибку объекта через If Cells(a, b).Value = Null ThenОшибка времени выполнения 1004. Определенная заявленная или объектная ошибка VBA

Sub Button1() 
    Cells(2, 1).Value = MSumProd(1, 1, 1, 5) 
End Sub 

Function MSumProd(a As Integer, b As Integer, c As Integer, d As Integer) 

Dim n As Integer 
n = 0 
Do While a >= 0 
    n = n + Cells(a, b).Value * Cells(c, d).Value 
    b = b + 1 
    c = c + 1 

    If Cells(a, b).Value = Null Then 
     Exit Do 
    End If 
Loop 

MSumProd = n 

End Function 
+0

Попробуйте сначала сосредоточиться на соответствующем листе (например, 'Sheets ('Лист1'). Select'). – FDavidov

+1

И, кстати, вам нужно проверить, есть ли 'Cell (x, y) .Value =" "', а не "Null". – FDavidov

+1

Значение 'a' не изменяется, предоставляя вам бесконечный цикл, и ячейки могут быть пустыми, но не' Null' –

ответ

0

В MSumProd Function я ищущей lastrow с данными в столбце b (передается от вашего Sub Button1). Затем, вместо использования и Exit Do, я использую цикл For от первой ячейки (Cells(a, b)) до последней строки с данными.

Предупреждение: В своем коде вы отправляете Cells(2, 1).Value = MSumProd(1, 1, 1, 5), что означает вторую строку в колонке А будут переписаны в результате значения MSumProd функции. Поскольку вы отправляете ячейки (1, 1) в качестве стартовой ячейки функции MSumProd, и в случае, если у вас есть несколько строк данных (начиная с Cell A1, до Cell A4, например), исходное значение Cell A2 будет перезаписано значение MSumProd.

Sub Button1 Код

Sub Button1() 

Cells(2, 1).Value = MSumProd(1, 1, 1, 5) 

End Sub 

Функция MSumProd Код

Function MSumProd(a As Integer, b As Integer, c As Integer, d As Integer) 

Dim n As Long 
Dim Lastrow As Long, lRow As Long 

' find last row with data in Column with passed integer 'b' 
Lastrow = Range(Cells(a, b), Cells(a, b)).CurrentRegion.Rows.Count 

' reset SUMPRODUCT value 
n = 0 

' loop through all rows with data in column 'b' 
For lRow = a To Lastrow 
    n = n + Cells(lRow, b).Value * Cells(c, d).Value 
    ' I think you are trying to advance the row (and not column) 
    ' Therefore, you need to advance a and not b 
    ' In this code I advance the row with lROw in the "For" loop 
    c = c + 1 ' can be removed, since is advanced as with lRow 
Next lRow 

MSumProd = n 

End Function 
+0

@Shashank Nathani Вы уже проверили этот код? любые отзывы были бы хороши –

Смежные вопросы