Страницы: 1
RSS
Вычисления над значениями через запятую, Необходимо выделить значения через запятую и произвести над ними вычисления
 
Добрый день!
Необходима помощь в нетривиальной (на мой скромный опыт) задаче.
Есть 2 колонки с данными, например:
а     1
б     2
в     3
г     4

Также есть ячейка с набором данных из первой колонки через запятую, например:    а,б,в   (таких ячеек в колонке будет от 1 до 30шт).
Нужно определить каждую букву в этом наборе и просуммировать соответствующее этой букве значение.
Количество букв в ячейке может варьироваться от 1 до 10.
Отдельно значение каждой буквы я вычислить могу, через ИНДЕКС или ВПР, ПОДСТАВИТЬ, ДЛСТР. Также могу определить количество слов черед ДЛСТР, посчитав кол-во запятых.
Но заставить посчитать внутри сумму, никак не получается, т.к. в одной ячейке может быть только а или а,б или а,б,в и т.д.
Заранее спасибо за помощь!
 
SergBSA, файл-пример с исходниками и желаемым результатом существенно сократит время ожидания до получения помощи
Соблюдение правил форума не освобождает от модераторского произвола
 
Пример во вложении.
Изменено: SergBSA - 14.02.2019 18:18:01
 
Почему в G12=1, если для кода г масса=3 ?
 
как понял: =SUM(IF(ISERROR(FIND($B$2:$B$7;B12));0;$C$2:$C$7))
Соблюдение правил форума не освобождает от модераторского произвола
 
SergBSA, вариант в Power Query:
Код
let
    Данные = Excel.CurrentWorkbook(){[Name="Данные"]}[Content],
    Масса = Excel.CurrentWorkbook(){[Name="Масса"]}[Content],
    func = Splitter.SplitTextByDelimiter(","),
    first = Table.AddColumn(Данные, "first", each Text.BeforeDelimiter([Значения], ",")),
    count = Table.AddColumn(first, "count", each List.Count(func([Значения]))),
    sum = Table.AddColumn(count, "sum", each List.Sum(List.Transform(func([Значения]), each Масса{[Код = _]}[Масса])))
in
    sum
Изменено: Aleksei_Zhigulin - 14.02.2019 19:31:58
 
Еще вариант через пользовательскую функцию:
Код
Function MassEffect(T As Range)
    Dim arrS() As String, intI As Integer, arrIn, dblS As Double
    If T.Cells.Count > 1 Then Exit Function
    arrIn = [b2:C7].Value
    arrS = Split(T, ",")
    For intI = 0 To UBound(arrS, 1)
        dblS = dblS + WorksheetFunction.VLookup(arrS(intI), arrIn, 2, False)
    Next intI
    MassEffect = dblS
End Function
Изменено: Пытливый - 14.02.2019 19:35:38
Кому решение нужно - тот пример и рисует.
 
Код
Sub iSumma()
Dim i As Long
Dim j As Long
Dim arr
Dim FoundKod As Range
    Range("G12:G15").ClearContents
  For i = 12 To 15
      arr = Split(Cells(i, "B"), ",")
    For j = 0 To UBound(arr)
      Set FoundKod = Range("B2:B7").Find(arr(j), , xlValues, xlWhole)
      Cells(i, "G") = Cells(i, "G") + FoundKod.Offset(, 1)
    Next
  Next
End Sub
 
pq
 
Огромное спасибо, очень выручили!
buchlotnik, воспользуюсь данным вариантом, пока более понятен для меня.
Тему можно закрыть.
Всем удачного дня.
 
Форумчане, если можно, еще вопрос.
Как эти же значения не просуммировать, а просто вывести также через запятую?
 
Цитата
не просуммировать, а просто вывести также через запятую
Код
Sub iSumma()
Dim i As Long
Dim j As Long
Dim arr
Dim FoundKod As Range
    Range("G12:G15").ClearContents
  For i = 12 To 15
      arr = Split(Cells(i, "B"), ",")
    For j = 0 To UBound(arr)
      Set FoundKod = Range("B2:B7").Find(arr(j), , xlValues, xlWhole)
      'Cells(i, "G") = Cells(i, "G") + FoundKod.Offset(, 1) 'для суммы
      Cells(i, "G") = Cells(i, "G") & FoundKod.Offset(, 1) & ","
    Next
      Cells(i, "G") = Left(Cells(i, "G"), Len(Cells(i, "G")) - 1)
      Cells(i, "G").NumberFormat = "@"
  Next
End Sub
 
Доброе утро!
В VBA  я не силен, никак не получается заставить отрабатывать.
Можно на моем конкретном примере, дальше постараюсь разобраться.
Заранее спасибо...
 
Цитата
SergBSA написал:
через запятую
- вариант на PQ
Скрытый текст
Соблюдение правил форума не освобождает от модераторского произвола
 
Во второй раз спасибо!
Если можно, еще 2 вопроса:
1. В случае, если используется не текст, а число, например а,б,в,35,г, то выдает ошибку
2. Можно ли как-то таблицу сделать обновляемой, дабы постоянно не кликать на "обновить"?
 
Цитата
SergBSA написал:
Если можно
нельзя - правила
Цитата
SergBSA написал:
1.
п. 2.3
Цитата
SergBSA написал:
2.
п. 2.6
Соблюдение правил форума не освобождает от модераторского произвола
 
По 1п. - приложил файл примера (буква г заменена на 35). Не отрабатывает при обновлении- "Не удается преобразовать 35 в тип Текст".
По 2п. - ок, поищу по форуму.
 
Ну так надо добавить преобразование типов и всё:
Скрытый текст

Цитата
SergBSA написал:
поищу по форуму.
это правильно, также можно создать новую тему с данным вопросом
Соблюдение правил форума не освобождает от модераторского произвола
 
Спасибо!
 
Создаю новую тему.
Всем спасибо.
Изменено: SergBSA - 21.02.2019 11:40:58
Страницы: 1
Наверх