Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сложение ячеек с пустыми значениями - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сложение ячеек с пустыми значениями (Макросы/Sub)
Сложение ячеек с пустыми значениями
skais675 Дата: Среда, 15.03.2017, 15:25 | Сообщение № 1
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 138
Репутация: 3 ±
Замечаний: 100% ±

Excel 2010
Мне нужно сложить определенные ячейки в диапазоне.
Однако, если в ячейках (хоть одной) будет пусто - выдаст ошибку. Как решить этот вопрос?

[vba]
Код
arrNew = Worksheets("Поставщик_БД").Range("A1:AO" & Worksheets("Поставщик_БД").Cells(Worksheets("Поставщик_БД").Rows.Count, "A").End(xlUp).Row).Value

xx = arrNew(J, 7) + arrNew(J, 9) + arrNew(J, 10)
[/vba]


Vlad
skype: skais675
email: skais675@mail.ru


Сообщение отредактировал skais675 - Среда, 15.03.2017, 15:27
 
Ответить
СообщениеМне нужно сложить определенные ячейки в диапазоне.
Однако, если в ячейках (хоть одной) будет пусто - выдаст ошибку. Как решить этот вопрос?

[vba]
Код
arrNew = Worksheets("Поставщик_БД").Range("A1:AO" & Worksheets("Поставщик_БД").Cells(Worksheets("Поставщик_БД").Rows.Count, "A").End(xlUp).Row).Value

xx = arrNew(J, 7) + arrNew(J, 9) + arrNew(J, 10)
[/vba]

Автор - skais675
Дата добавления - 15.03.2017 в 15:25
Perfect2You Дата: Среда, 15.03.2017, 15:48 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
Я так понял, в исходных ячейках проверять надо?

[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 - Среда, 15.03.2017, 15:48
 
Ответить
СообщениеЯ так понял, в исходных ячейках проверять надо?

[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
Дата добавления - 15.03.2017 в 15:48
skais675 Дата: Среда, 15.03.2017, 15:57 | Сообщение № 3
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 138
Репутация: 3 ±
Замечаний: 100% ±

Excel 2010
Мне нужно сложить а пустые приравнять к нулю.
Типа 5+пусто+7 = 12
Ну и желательно с массивом работать


Vlad
skype: skais675
email: skais675@mail.ru


Сообщение отредактировал skais675 - Среда, 15.03.2017, 16:05
 
Ответить
СообщениеМне нужно сложить а пустые приравнять к нулю.
Типа 5+пусто+7 = 12
Ну и желательно с массивом работать

Автор - skais675
Дата добавления - 15.03.2017 в 15:57
Perfect2You Дата: Среда, 15.03.2017, 16:05 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
Если выдает ошибку то, значит, непустое что-то есть...
Функция суммы текст игнорирует. Попробуйте:
[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]


Сообщение отредактировал Perfect2You - Среда, 15.03.2017, 16:06
 
Ответить
СообщениеЕсли выдает ошибку то, значит, непустое что-то есть...
Функция суммы текст игнорирует. Попробуйте:
[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]

Автор - Perfect2You
Дата добавления - 15.03.2017 в 16:05
skais675 Дата: Среда, 15.03.2017, 16:14 | Сообщение № 5
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 138
Репутация: 3 ±
Замечаний: 100% ±

Excel 2010
Ваш вариант работает, однако в массиве что нельзя это сделать?


Vlad
skype: skais675
email: skais675@mail.ru


Сообщение отредактировал skais675 - Среда, 15.03.2017, 16:18
 
Ответить
СообщениеВаш вариант работает, однако в массиве что нельзя это сделать?

Автор - skais675
Дата добавления - 15.03.2017 в 16:14
skais675 Дата: Среда, 15.03.2017, 16:22 | Сообщение № 6
Группа: Заблокированные
Ранг: Форумчанин
Сообщений: 138
Репутация: 3 ±
Замечаний: 100% ±

Excel 2010
[vba]
Код
xx =Val(arrNew(J, 7))+Val(arrNew(J, 9)) + Val(arrNew(J, 10))
[/vba]
На другом форуме помогли!


Vlad
skype: skais675
email: skais675@mail.ru


Сообщение отредактировал skais675 - Среда, 15.03.2017, 16:23
 
Ответить
Сообщение[vba]
Код
xx =Val(arrNew(J, 7))+Val(arrNew(J, 9)) + Val(arrNew(J, 10))
[/vba]
На другом форуме помогли!

Автор - skais675
Дата добавления - 15.03.2017 в 16:22
Perfect2You Дата: Среда, 15.03.2017, 16:24 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 237
Репутация: 59 ±
Замечаний: 0% ±

Excel 2010
Вот так работает. Игнорирует текст:
[vba]
Код
xx = Application.WorksheetFunction.Sum(Val(Cells(J, 7).Value), Val(.Cells(J, 9).Value), Val(.Cells(J, 10).Value))
[/vba]
и вот так работает:
[vba]
Код
xx = Application.Sum(Val(arrNew(J, 7)), Val(arrNew(J, 9)), Val(arrNew(J, 10)))
[/vba]


Сообщение отредактировал Perfect2You - Среда, 15.03.2017, 16:25
 
Ответить
СообщениеВот так работает. Игнорирует текст:
[vba]
Код
xx = Application.WorksheetFunction.Sum(Val(Cells(J, 7).Value), Val(.Cells(J, 9).Value), Val(.Cells(J, 10).Value))
[/vba]
и вот так работает:
[vba]
Код
xx = Application.Sum(Val(arrNew(J, 7)), Val(arrNew(J, 9)), Val(arrNew(J, 10)))
[/vba]

Автор - Perfect2You
Дата добавления - 15.03.2017 в 16:24
Gustav Дата: Среда, 15.03.2017, 16:28 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2757
Репутация: 1139 ±
Замечаний: 0% ±

начинал с Excel 4.0, видел 2.1
Я бы просто явно обнулил пустые до начала операций сложения (если так уж хочется):
[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" не уготована в алгоритме какая-то особая роль.

P.S.
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]
Поэтому осторожней с ней в этом плане!


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Среда, 15.03.2017, 16:50
 
Ответить
СообщениеЯ бы просто явно обнулил пустые до начала операций сложения (если так уж хочется):
[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" не уготована в алгоритме какая-то особая роль.

P.S.
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
Дата добавления - 15.03.2017 в 16:28
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сложение ячеек с пустыми значениями (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!