Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2011, 11:00   #1
И_в_а_н
Новичок
Джуниор
 
Регистрация: 04.05.2011
Сообщений: 1
По умолчанию суммирование нескольких строк с текстовыми и числовыми знач.

-----------------------------------

Последний раз редактировалось И_в_а_н; 04.05.2011 в 14:53.
И_в_а_н вне форума Ответить с цитированием
Старый 04.05.2011, 11:50   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А если предварительно все строки разделить по столбцам с требуемым разделителем, считая повторные разделители как один? Не легче будет?
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 04.05.2011 в 13:52.
SAS888 вне форума Ответить с цитированием
Старый 04.05.2011, 13:34   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Чтож это за "сводная", которую нужно сводной обрабатывать?
А вариантов есть много - сводная, с доп.столбцом и вытянув уникальные суммесли, сумпроизв, макросами на словаре несколько вариантов...
Но без Вашего примера в файле готового решения не будет - вряд ли кто на такую неинтересную задачу будет свой пример с экрана набивать...

Я похожую задачу так решал:
Код:
Option Explicit


Sub Otbor()
    Dim a(), oDict As Object, i As Long, temp As String, kk, rr As Range
    
    With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
    Set rr = [a1:h2]'шапка для копирования
    
    a = Range("B3:H" & Range("A" & Rows.Count).End(xlUp).Row).Value

    Set oDict = CreateObject("Scripting.Dictionary")
    oDict.CompareMode = vbTextCompare
    
    For i = 1 To UBound(a)

        temp = Application.Trim(a(i, 1) & "|" & a(i, 2) & "|" & a(i, 4) & "|" & a(i, 5) & "|" & a(i, 6))
        If Not oDict.Exists(temp) Then
            ReDim b(1 To 2)
            b(1) = a(i, 3): b(2) = a(i, 7)
            oDict.Add temp, b
        Else
            b = oDict.Item(temp)
            b(1) = b(1) + a(i, 3): b(2) = b(2) + a(i, 7)
            oDict.Item(temp) = b
        End If
    Next

    
    With Workbooks.Add.Sheets(1)
    rr.Copy .[a1]'копируем шапку
        i = 2
        For Each kk In oDict.keys
        i = i + 1
        .Range("B" & i) = Split(kk, "|")(0) 'Модель
        .Range("C" & i) = Split(kk, "|")(1) 'Наименование оборудования
        .Range("D" & i) = oDict.Item(kk)(1) 'Количество
        .Range("E" & i) = Split(kk, "|")(2) 'Уст. мощность
        .Range("F" & i) = Split(kk, "|")(3) 'Время работы
        .Range("G" & i) = Split(kk, "|")(4) 'Коэф. испол
        .Range("H" & i) = oDict.Item(kk)(2) 'Расход
        Next
    End With
    

    .DisplayAlerts = True
    .ScreenUpdating = True
    End With
End Sub
Но быстрее суммировать в стороннем массиве, а не в массивах словаря, что-то вроде
Код:
Option Explicit

Sub yurello()
    Dim x, y(), i&, j&, k&, u&, s$
    x = Range("A1:C" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    ReDim y(1 To UBound(x), 1 To 3)

    With CreateObject("Scripting.Dictionary")
        .CompareMode = 1
        For i = 1 To UBound(x, 1)
            s = Left(x(i, 1), 2)
            If Not .Exists(s) Then
                j = j + 1: .Item(s) = j
                For k = 1 To 3: y(j, k) = x(i, k): Next k
            Else
                u = .Item(s)
                y(u, 1) = Left(y(u, 1), 2) & "_"
                y(u, 2) = y(u, 2) + x(i, 2): y(u, 3) = y(u, 3) + x(i, 3)
            End If
        Next
    End With
    With [e1:g1].Resize(j)
        .ClearContents: .Value = y
    End With
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 04.05.2011 в 13:58.
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Суммирование строк в Access Shtirlic2009 Microsoft Office Access 13 21.09.2015 00:46
Суммирование определённых строк alexvav Microsoft Office Excel 8 10.03.2011 16:13
Суммирование строк kent4 Microsoft Office Excel 10 30.11.2010 15:25
суммирование определенных строк Rekky SQL, базы данных 4 30.07.2010 11:14