Код VBA, суммирование значений в одной ячейке строки и добавление с другой ячейкой с диапазоном чисел в нем - PullRequest
0 голосов
/ 19 декабря 2018
Cell: S1 = 0.50   Cell T1 = 1.00   Cell U1 = 0.02
           0.50             0.05             0.63
           0.50             0.25             0.89

Запустил формулу справа, чтобы найти "."и извлеките данные, используя формулу Mid.Но в некоторых ячейках может быть 12 пустот, а в некоторых только 1. Я хотел бы, чтобы по формуле было найдено общее количество значений в ячейке и общее количество.

У меня нет кода

Результаты должны суммировать общую сумму в ячейке, суммировать суммы с другим столбцом и создавать 4-й столбец с итогом.

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Рассмотрите возможность использования решения не VBA с использованием функции EVALUATE:

enter image description here enter image description here

0 голосов
/ 20 декабря 2018

Нет необходимости в VBA, эта формула сделает это:

=SUMPRODUCT(--TRIM(MID(SUBSTITUTE(A1,CHAR(10),REPT(" ",99)),(ROW($A$1:INDEX($A:$A,LEN(A1)-LEN(SUBSTITUTE(A1,CHAR(10),""))+1))-1)*99+1,99)))

enter image description here

0 голосов
/ 19 декабря 2018

непроверенная.Если я правильно понял, ячейки разделяются символом новой строки.

Так что может быть что-то вроде:

Option explicit

Private Sub SplitAndTotal()

' Change name of sheet as necessary
With thisworkbook.worksheets("Sheet1")
.range("V1").value2 = SplitIntoNumbersAndSum(.range("S1").value2) + _
SplitIntoNumbersAndSum(.range("T1").value2) + _
SplitIntoNumbersAndSum(.range("U1").value2)
End with

End sub

Private Function SplitIntoNumbersAndSum(byval valueToSplit as variant, optional byval delimiter as string = vbnewline) as double

Dim Total as double

Dim arrayOfValues as variant
arrayOfValues = split(valueToSplit, delimiter, -1, vbbinarycompare)

Dim index as long
For index = lbound(arrayOfValues) to ubound (arrayOfValues)
If isnumeric(arrayOfValues(index)) then
Total = total + cdbl(arrayOfValues(index))
End if

Next index

SplitIntoNumbersAndSum = Total

End function

Извините за плохое форматирование и отступы, а не на рабочем столе.

Если функция постоянно возвращает ноль, попробуйте проверить / изменить delimiter.

Вы также можете попробовать вызвать функцию как UDF непосредственно из самой таблицы (хотя вам может потребоватьсякод функции в отдельном модуле), в отличие от вызова его через специальный макрос / процедуру.

...