With Worksheets("Поставщик_БД").Range("A1:AO" & Worksheets("Поставщик_БД").Cells(Worksheets("Поставщик_БД").Rows.Count, "A").End(xlUp).Row) If (.Cells(J, 7).Value = Empty) Or (.Cells(J, 9).Value = Empty) Or (.Cells(J, 10).Value = Empty) Then MsgBox "Есть пустые" else xx = arrNew(J, 7) + arrNew(J, 9) + arrNew(J, 10) end if End with
[/vba]
Ну или любую другую реакцию на пустоты предусмотреть
Я так понял, в исходных ячейках проверять надо?
[vba]
Код
With Worksheets("Поставщик_БД").Range("A1:AO" & Worksheets("Поставщик_БД").Cells(Worksheets("Поставщик_БД").Rows.Count, "A").End(xlUp).Row) If (.Cells(J, 7).Value = Empty) Or (.Cells(J, 9).Value = Empty) Or (.Cells(J, 10).Value = Empty) Then MsgBox "Есть пустые" else xx = arrNew(J, 7) + arrNew(J, 9) + arrNew(J, 10) end if End with
[/vba]
Ну или любую другую реакцию на пустоты предусмотретьPerfect2You
Сообщение отредактировал Perfect2You - Среда, 15.03.2017, 15:48
Если выдает ошибку то, значит, непустое что-то есть... Функция суммы текст игнорирует. Попробуйте: [vba]
Код
With Worksheets("Поставщик_БД").Range("A1:AO" & Worksheets("Поставщик_БД").Cells(Worksheets("Поставщик_БД").Rows.Count, "A").End(xlUp).Row) xx = Application.WorksheetFunction.Sum(.Cells(J, 7).Value, .Cells(J, 9).Value, .Cells(J, 10).Value) End With
[/vba]
Если выдает ошибку то, значит, непустое что-то есть... Функция суммы текст игнорирует. Попробуйте: [vba]
Код
With Worksheets("Поставщик_БД").Range("A1:AO" & Worksheets("Поставщик_БД").Cells(Worksheets("Поставщик_БД").Rows.Count, "A").End(xlUp).Row) xx = Application.WorksheetFunction.Sum(.Cells(J, 7).Value, .Cells(J, 9).Value, .Cells(J, 10).Value) End With
xx =Val(arrNew(J, 7))+Val(arrNew(J, 9)) + Val(arrNew(J, 10))
И, кстати, если так работает, а вот так - нет: [vba]
Код
xx =arrNew(J, 7)+arrNew(J, 9) + arrNew(J, 10)
[/vba] То это означает, что под словом "пусто" у Вас, видимо, понимается "пустая строка" (типа "" или =""), что надо было бы уточнить при постановке вопроса. Потому что другие (и я) под словом "пусто" могут понимать ячейку после нажатия на ней клавиши Delete (т.е. именно Empty).
А так-то функция Val из любой текстовой строки 0 сделает. А если там еще и ведущие цифры будут, то возьмет их в качестве числа, т.е.: [vba]
Код
10 + Val("10 негритят") = 20
[/vba] Поэтому осторожней с ней в этом плане!
Я бы просто явно обнулил пустые до начала операций сложения (если так уж хочется): [vba]
Код
Sub aaa() Dim a, i, j a = Range("A1:C4") For i = 1 To UBound(a, 1): For j = 1 To UBound(a, 2) If IsEmpty(a(i, j)) Then a(i, j) = 0 Next j, i End Sub
[/vba] Хотя, вроде, и без этого прекрасно всё складывает, если только значению "0" не уготована в алгоритме какая-то особая роль.
xx =Val(arrNew(J, 7))+Val(arrNew(J, 9)) + Val(arrNew(J, 10))
И, кстати, если так работает, а вот так - нет: [vba]
Код
xx =arrNew(J, 7)+arrNew(J, 9) + arrNew(J, 10)
[/vba] То это означает, что под словом "пусто" у Вас, видимо, понимается "пустая строка" (типа "" или =""), что надо было бы уточнить при постановке вопроса. Потому что другие (и я) под словом "пусто" могут понимать ячейку после нажатия на ней клавиши Delete (т.е. именно Empty).
А так-то функция Val из любой текстовой строки 0 сделает. А если там еще и ведущие цифры будут, то возьмет их в качестве числа, т.е.: [vba]
Код
10 + Val("10 негритят") = 20
[/vba] Поэтому осторожней с ней в этом плане!Gustav