2015-04-02 4 views
-2

У меня есть лист Excel с большим количеством значений в пределах одной ячейки следующим образом:найти сумму значений в ячейках, которые содержат также другой текст

a=5 
b=10 
c=44 
d=33 
... 

Я хотел бы извлечь в общую сумму значений после каждого = знак.

Как мы можем это сделать?

+2

Бит больше необходимой информации. Все ваши строки точной формы: «text1 = # 1, text2 = # 2, text3 = # 3, ...» где #n - целые числа? –

ответ

2

Попробуйте этот небольшой опред.польз.имя Функция UDF:

Public Function SumInCell(s As String) As Double 
    Dim s2 As String, d As Variant 
    s2 = s & "," 
    ary = Split(s2, "=") 

    SumInCell = 0 
    For i = LBound(ary) + 1 To UBound(ary) 
     s2 = ary(i) 
     d = CDbl(Mid(s2, 1, InStr(1, s2, ",") - 1)) 
     SumInCell = SumInCell + d 
    Next i 
End Function 

Например:

enter image description here

определяемые пользователем функции (UDF) очень проста в установке и использовании:

  1. ALT-F11 открывает окно VBE
  2. ALT-I ALT-M открывает свежий модуль
  3. вставить материал в и закройте окно VBE

Если вы сохраните рабочая книга, UDF будет сохранена вместе с ней. Если вы используете версию Excel позднее 2003 года, вы должны сохранить файл как .xlsm, а не формата XLSX

Чтобы удалить UDF:

  1. вызвать окно VBE, как указано выше
  2. ясно код из
  3. закрыть окно VBE

Чтобы использовать UDF из Excel:

= SumInCell (A1)

Чтобы узнать больше о макросах в целом, см:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

и

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

и конкретики по UDF, см:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

Макросы должны быть включены, чтобы это работало!

2

Предполагая, что макет, как показано в Columna, скопируйте Columna в ColumnB, применить текст к столбцам по ColumnB с = в качестве разделителя, а затем в С5:

=SUM(C1:C4) 

SO29419251 example

+0

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

+0

Если макет, который я предположил и показал, НЕ является тем, что у вас есть, возможно, стоит более подробно рассказать о том, что у вас есть, и отвечать независимо на запрос @XOR LX. – pnuts

1

для формулы ответа вы должны будете сделать это в 2-х ячеек, так что вы не попали в вложенном пределе первенствует

если ваше значение в A1,

В B1 поместить

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(UPPER(SUBSTITUTE(A1,"=","'")),"A",""),"B",""),"C",""),"D",""),"E",""),"F",""),"G",""),"H",""),"I",""),"J",""),"K",""),"L",""),"M",""),"N",""),"O",""),"P",""),"Q",""),"R",""),"S",""),"T",""),"U",""),"V",""),"W",""),"X",""),"Y",""),"Z","")," ","")&"," 

В C1 поместить

=SUMPRODUCT(MID(B1,FIND("@",SUBSTITUTE(B1,"'","@",ROW(INDIRECT("1:"&LEN(B1)-LEN(SUBSTITUTE(B1,"'",""))))))+1,FIND("*",SUBSTITUTE(B1,",","*",ROW(INDIRECT("1:"&LEN(B1)-LEN(SUBSTITUTE(B1,",",""))))))-(FIND("@",SUBSTITUTE(B1,"'","@",ROW(INDIRECT("1:"&LEN(B1)-LEN(SUBSTITUTE(B1,"'",""))))))+1))+0) 

это заняло некоторое время, чтобы поработать :)

Смежные вопросы