Новости:

К первому сообщению темы должен быть прикреплен файл примера в формате xls*.
Приложив пример, Вы избавите себя и других от вопросов типа "А какой критерий?", "А куда выводить результат?", "А сколько строк?" и все тех же просьб выложить файл. Рисовать за Вас Ваши же таблички с заданиями, а затем и решение к ним, никто желанием не горит. Да и, как показывает практика, в большинстве случаев без файла решения не найти.

Главное меню

Суммирование ячеек в которых находятся числа и текст

Автор arti81, 09.03.2012, 16:00

« назад - далее »

arti81

   в одной ячейке написано 3сварщика. во второй ячейке написано 2сварщика.как получить в третьей ячейке сумму двух ячеек?возможно ли такое?

Serge 007

=СУММПРОИЗВ(--ПОДСТАВИТЬ(A1:B1;"сварщика";""))
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

arti81

Спасибо большое помогло,но не совсем.Это помогает если все ячейки заполнены.а если одна из суммируемых ячеек пуста.тогда какую формулу нужно?( например в первой 3сварщика,во второй 2сварщика,в третьей-пусто, а  в четвертой 2сварщика)

MCH


Alex_ST

Ну, а если не "сварщики", а вообще произвольный текст вперемежку с цифрами в ячейках, то лучше применить UDF, которая вернёт массив целых чисел, имеющихся в ячейках-аргументах.
А уж с массивом чисел делать можно что угодно (хоть сумму, хоть максимум, хоть минимум, хоть ...)
Function ИЗВЛЕЧЬ_ЦЕЛЫЕ(ParamArray ДИАПАЗОН())
    '---------------------------------------------------------------------------------------
    ' Purpose      : создать массив из целых чисел, извлечённых из текста произвольно расположенных ячеек
    ' Notes        : К полученному массиву можно применять любые стандартные формулы листа
    ' Notes        : Если цифр в ячейках-аргументах функции нет, то возвращается КОРРЕКТНОЕ #Н/Д
    '---------------------------------------------------------------------------------------
    Dim rArea, rCell, sStr$, oMatches, i&, Arr()
    On Error GoTo xlErrEXIT
    For Each rArea In ДИАПАЗОН
       For Each rCell In IIf(rArea.Count = 1, Array(rArea.Value), rArea.Value)
          sStr = sStr & " " & rCell
       Next rCell
    Next rArea
    With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "\d+": Set oMatches = .Execute(sStr): End With
    ReDim Arr(1 To oMatches.Count)
    For i = 0 To oMatches.Count - 1: Arr(i + 1) = CLng(oMatches(i).Value): Next i
    ИЗВЛЕЧЬ_ЦЕЛЫЕ = Arr
xlErrEXIT:    If Err Then ИЗВЛЕЧЬ_ЦЕЛЫЕ = CVErr(xlErrValue)  ' вернуть ошибку #ЗНАЧЕНИЕ если была ошибка
End Function

UDF разрабатывалась и допиливалась на дружеском форуме в топике Функция (UDF) "ИЗВЛЕЧЬЦЕЛЫЕ". Окончательный её вариант - в ЭТОМ топике.
С уважением, Алексей

sergo44441

и еще вариант с формулой массива =СУММ(ЛЕВСИМВ(A1:A2;1)*1) ввод завершается нажатием ктрл-шифт-энтер
Не торопись, и все успеешь намного быстрее

ShAM

Цитата: sergo44441 от 10.03.2012, 22:33
и еще вариант с формулой массива =СУММ(ЛЕВСИМВ(A1:A2;1)*1) ввод завершается нажатием ктрл-шифт-энтер
А что если не 2сварщика, а 22? :)

Serge 007

Цитата: ShAM от 11.03.2012, 09:35
А что если не 2сварщика, а 22? :)
А если 5 сварщиков? :)
Тут все ответы такие, кроме ответа Алекса
Бесплатная помощь: www.excelworld.ru
Платная помощь: sergeyizotov@excelworld.ru
Ю-money: 41001419691823 | WMR:126292472390

Alex_ST

Ну, в принципе, если там могут быть только однотипные объекты учёта (сварщики, бананы, барабаны, ящики... )
то, конечно, можно, наверное, удаляемое слово не вводить непосредственно в формулу, а задать где-то в ячейке листа или в именах...
Но с UDF, конечно, удобнее. Ей пофигу кого считать баранов или барабаны :)
С уважением, Алексей

nilem

Еще про сварщиков  :)
Function SumVal(rng As Range)
Dim s#, r As Range
For Each r In rng.Cells
   s = s + Val(r)
Next
SumVal = s
End Function

Например, в А1 "5сварщиков", в А2 "8резчиков"
в В1 пишем: =SumVal(A1:A2)