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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2012, 09:04   #1
kent4
Пользователь
 
Регистрация: 19.11.2010
Сообщений: 24
По умолчанию Подсчет суммы

Счета за телефон присылают вот в таком файле, сумма только итоговая, а надо посчитать по каждому телефону отдельно.
т.е. чтобы получилась табличка:
№тел сумма
№тел сумма
№тел сумма
№тел сумма
№тел сумма

кол-во номеров может меняться

заранее спасибо, сам возможно разобрался, но очень срочно надо...
Вложения
Тип файла: rar Ноябрь 2012сч 283.rar (247.8 Кб, 17 просмотров)
kent4 вне форума Ответить с цитированием
Старый 19.12.2012, 09:18   #2
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

а по какому столбцу ориентироваться (номер телефона) А или Н?
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 19.12.2012, 09:21   #3
kent4
Пользователь
 
Регистрация: 19.11.2010
Сообщений: 24
По умолчанию

По столбцу А
kent4 вне форума Ответить с цитированием
Старый 19.12.2012, 09:55   #4
kent4
Пользователь
 
Регистрация: 19.11.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от staniiislav Посмотреть сообщение
а по какому столбцу ориентироваться (номер телефона) А или Н?
По столбцу А
kent4 вне форума Ответить с цитированием
Старый 19.12.2012, 09:58   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Объединяете данные в одну таблицу и делаете сводную таблицу по столбцу A
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 19.12.2012, 10:06   #6
kent4
Пользователь
 
Регистрация: 19.11.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Объединяете данные в одну таблицу и делаете сводную таблицу по столбцу A
Я понимаю, что для вас это очень просто, но для меня нет, я VBA не знаю. Буду очень признателен, если подскажете как это написать
kent4 вне форума Ответить с цитированием
Старый 19.12.2012, 10:34   #7
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Знание VBA для этого не нужно совсем. Практически все правки косметические и делаются за 10 минут.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 19.12.2012, 11:11   #8
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

можно так попробовать:

Код:
Option Explicit

Sub поиск_уникальных_и_сумма()
    Dim avArr, avArr2, li As Long, i As Long, j As Long, S1 As Integer, S2 As Integer
    With New Collection
        On Error Resume Next
        S1 = Application.InputBox(Prompt:="Поставьте начальную строку", Title:="НАЧАЛЬНАЯ СТРОКА", Type:=1)
            If S1 = 0 Then Exit Sub
        S2 = Application.InputBox(Prompt:="Поставьте конечную строку ", Title:="КОНЕЧНАЯ СТРОКА", Type:=1)
            If S2 = 0 Then Exit Sub
        avArr = Range("H" & S1 & ":" & "L" & S2).Value
        avArr2 = Range("H" & S1 & ":" & "L" & S2).Value
        For i = 1 To UBound(avArr)
            If IsEmpty(avArr(i, 1)) = False And avArr(i, 1) <> "Телефон Б" Then
                .Add avArr(i, 1), CStr(avArr(i, 1))
                If Err = 0 Then
                    li = li + 1: avArr(li, 1) = avArr(i, 1)
                Else: Err.Clear
                End If
            End If
        Next i

        For i = 1 To li
            avArr(i, 2) = 0
            For j = 1 To UBound(avArr)
                 If avArr(i, 1) = avArr2(j, 1) Then
                    avArr(i, 2) = avArr(i, 2) + avArr2(j, 5)
                End If
            Next j
        Next i
        
    End With
    If li Then Range("O" & S1).Resize(li, 2).Value = avArr
End Sub
Вложения
Тип файла: rar Ноябрь 2012сч 283 (2).rar (272.4 Кб, 15 просмотров)
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 19.12.2012, 12:45   #9
kent4
Пользователь
 
Регистрация: 19.11.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
Знание VBA для этого не нужно совсем. Практически все правки косметические и делаются за 10 минут.
Это вариант, но как я понял там необходимо будет растягивать номера телефонов вниз, а кол-во строк 6000 и номеров там порядочно, это займет у пользователя минут 20 так точно.
kent4 вне форума Ответить с цитированием
Старый 19.12.2012, 12:46   #10
kent4
Пользователь
 
Регистрация: 19.11.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от staniiislav Посмотреть сообщение
можно так попробовать:

Код:
Option Explicit

Sub поиск_уникальных_и_сумма()
    Dim avArr, avArr2, li As Long, i As Long, j As Long, S1 As Integer, S2 As Integer
    With New Collection
        On Error Resume Next
        S1 = Application.InputBox(Prompt:="Поставьте начальную строку", Title:="НАЧАЛЬНАЯ СТРОКА", Type:=1)
            If S1 = 0 Then Exit Sub
        S2 = Application.InputBox(Prompt:="Поставьте конечную строку ", Title:="КОНЕЧНАЯ СТРОКА", Type:=1)
            If S2 = 0 Then Exit Sub
        avArr = Range("H" & S1 & ":" & "L" & S2).Value
        avArr2 = Range("H" & S1 & ":" & "L" & S2).Value
        For i = 1 To UBound(avArr)
            If IsEmpty(avArr(i, 1)) = False And avArr(i, 1) <> "Телефон Б" Then
                .Add avArr(i, 1), CStr(avArr(i, 1))
                If Err = 0 Then
                    li = li + 1: avArr(li, 1) = avArr(i, 1)
                Else: Err.Clear
                End If
            End If
        Next i

        For i = 1 To li
            avArr(i, 2) = 0
            For j = 1 To UBound(avArr)
                 If avArr(i, 1) = avArr2(j, 1) Then
                    avArr(i, 2) = avArr(i, 2) + avArr2(j, 5)
                End If
            Next j
        Next i
        
    End With
    If li Then Range("O" & S1).Resize(li, 2).Value = avArr
End Sub
При попытке скачать почему то запрашивает логи и пароль, не могли бы вы скинуть на почту bobrenok333@yandex.ru
kent4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет суммы killer12rus SQL, базы данных 1 26.09.2010 00:35
Подсчет суммы. Firebird artemavd БД в Delphi 3 31.03.2010 15:29
Подсчет суммы Владимир1988 Помощь студентам 7 05.12.2009 23:02
Подсчет суммы в DBGrid girz БД в Delphi 3 16.05.2009 14:11
Подсчет суммы Kardi PHP 0 23.11.2008 16:46