Excel: расчёт математического выражения в виде текста

Автор Наташа, 18 октября 2017, 11:00

Наташа

У меня есть столбец где вносятся данные и в конце подбивается итог.
Но в одной из ячеек должно писать к примеру 1+1 чтоб это было видно в ячейке.
А в итоге его считало как в суме 2.
Можно ли так? Мне подойдёт решение и с помощью формул, и с помощью макросов.

[вложение удалено администратором]

Администратор

Я сделал макрос в виде формулы. Макрос не рассчитывает выражение, а просто разбивает текст по плюсу и складывает полученные числа. Поэтому если напишите минус или другой математический знак, то макрос не поймёт выражение.

Ваши дальнейшие действия.
Макрос находится во вложенном файле, в других файлах этот макрос сам не появится.
Перейдите в ячейку "D24" - в строке формул поставьте знак равно и введите "MySum" - укажите фрагмент, с которым должна работать формула, - нажмите Enter - формула-макрос готова к работе.

Я сейчас уже вставил формулу-макрос в "D24".

Чтобы макрос заработал, нужно разрешить макросы: когда вы откроете файл, вверху будет жёлтая панель, связанная с макросами, вот на этой панели и нужно разрешить макросы.

Сам макрос:
Макрос
Function MySum(rng_data As Range) As Double

    Dim data(), spl, ub2 As Long
    Dim i As Long, ii As Long, j As Long
   
   
    '1. Копирование данных из экселя в массив. Это ускорит работу макроса.
    data() = rng_data.Value
   
    '2. Запись кол-ва столбцов выбранного фрагмента в переменную.
        ' Может это ускорит макрос - быстрее обращаться к переменной, чем вызывать функцию "UBound".
    ub2 = UBound(data, 2)
   
    '3. Функционал. Результат запишется в переменную-функцию "MySum".
    ' Цикл по ячейкам.
    For i = 1 To UBound(data, 1)
        For j = 1 To ub2
            '1) Если ячейка пустая.
            If data(i, j) = "" Then
                GoTo metka_NextCell
            End If
            '2) Разбивка текста в ячейке по знаку "+".
            spl = Split(data(i, j), "+")
            '3) Цикл по элементам массива "spl" и суммирование.
            For ii = 0 To UBound(spl)
                MySum = MySum + spl(ii)
            Next ii
metka_NextCell:
        Next j
    Next i
   
End Function
[свернуть]

[вложение удалено администратором]

Наташа