Помогите, пожалуйста. Есть такая задача: Имеем массив данных (допустим 10х10 ячеек). В этой таблице нечетный столбец может быть либо пустым, либо с числовым значением). Четный столбец - числовые значения
Необходимо проссумировать все значения четных стобцов строки, перед которыми (нечетный столбец) не пустая клетка.
Как то, думается, можно сделать через циклы и условия с переменной, но это очень и очень и очень громоздко.... Я так понимаю, есть для этого функция Find, но поиск в инетнете для меня не прояснил, как ею пользоваться....
Спасибо заранее за ответ...
Помогите, пожалуйста. Есть такая задача: Имеем массив данных (допустим 10х10 ячеек). В этой таблице нечетный столбец может быть либо пустым, либо с числовым значением). Четный столбец - числовые значения
Необходимо проссумировать все значения четных стобцов строки, перед которыми (нечетный столбец) не пустая клетка.
Как то, думается, можно сделать через циклы и условия с переменной, но это очень и очень и очень громоздко.... Я так понимаю, есть для этого функция Find, но поиск в инетнете для меня не прояснил, как ею пользоваться....
Gustav, Очень бы хотелось это через VBA сделать... Я так понимаю, что с помощью VBA можно извратиться и ставить в ячейку результата формулу, по которой будет идти подсчет, но уж очень хочется через макрос все сделать... Вот пример:
Gustav, Очень бы хотелось это через VBA сделать... Я так понимаю, что с помощью VBA можно извратиться и ставить в ячейку результата формулу, по которой будет идти подсчет, но уж очень хочется через макрос все сделать... Вот пример:Raid
Sub rrr() Dim rng As Range Dim rngOut As Range Dim arr() As Double Dim r As Long Dim c As Long
Set rng = Range("A2:N14") 'задать свой исходный диапазон Set rngOut = Range("Q2:Q14") 'задать свой диапазон вывода результата
ReDim arr(1 To rng.Rows.Count, 1 To 1) For r = 1 To rng.Rows.Count arr(r, 1) = 0 For c = 2 To rng.Columns.Count Step 2 If Not IsEmpty(rng.Cells(r, c).Offset(, -1)) Then arr(r, 1) = arr(r, 1) + rng.Cells(r, c).Value End If Next c Next r
rngOut.Value = arr End Sub
[/vba] Исходный диапазон и диапазон результата вводятся прямо в коде (поскольку иного не оговорено заданием). На контроль чётного кол-ва столбцов в исходном диапазоне не заморачивался, контролируйте сами визуально. Да, и в примере у Вас дана только одна правильная сумма, как раз проверите с помощью этого макроса
Ну тогда как-то так: [vba]
Код
Sub rrr() Dim rng As Range Dim rngOut As Range Dim arr() As Double Dim r As Long Dim c As Long
Set rng = Range("A2:N14") 'задать свой исходный диапазон Set rngOut = Range("Q2:Q14") 'задать свой диапазон вывода результата
ReDim arr(1 To rng.Rows.Count, 1 To 1) For r = 1 To rng.Rows.Count arr(r, 1) = 0 For c = 2 To rng.Columns.Count Step 2 If Not IsEmpty(rng.Cells(r, c).Offset(, -1)) Then arr(r, 1) = arr(r, 1) + rng.Cells(r, c).Value End If Next c Next r
rngOut.Value = arr End Sub
[/vba] Исходный диапазон и диапазон результата вводятся прямо в коде (поскольку иного не оговорено заданием). На контроль чётного кол-ва столбцов в исходном диапазоне не заморачивался, контролируйте сами визуально. Да, и в примере у Вас дана только одна правильная сумма, как раз проверите с помощью этого макроса Gustav
ReDim - определение размерности массива arr: по вертикали от 1 до rng.Rows.Count, по горизонтали - 1
arr(r, 1) = 0 - в массив записывается ноль. В цикле For c... элемент массива может быть перезаписан. Можно было сделать по-другому - после отработки внутреннего цикла (после строки Next c): [vba]
Код
If arr(r, 1) = Empty Then arr(r, 1) = 0
[/vba] Это если нулевые значения нужны в выгрузке на лист. Если нет, ноль можно не записывать.
rngOut - переменная, которая представляет диапазон (в начале процедуры присвоение Set). На лист в диапазон Range("Q2:Q14") выгружаются данные из массива arr
ReDim - определение размерности массива arr: по вертикали от 1 до rng.Rows.Count, по горизонтали - 1
arr(r, 1) = 0 - в массив записывается ноль. В цикле For c... элемент массива может быть перезаписан. Можно было сделать по-другому - после отработки внутреннего цикла (после строки Next c): [vba]
Код
If arr(r, 1) = Empty Then arr(r, 1) = 0
[/vba] Это если нулевые значения нужны в выгрузке на лист. Если нет, ноль можно не записывать.
rngOut - переменная, которая представляет диапазон (в начале процедуры присвоение Set). На лист в диапазон Range("Q2:Q14") выгружаются данные из массива arrvikttur
Сообщение отредактировал vikttur - Вторник, 08.01.2019, 20:03