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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2011, 18:02   #41
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну давай.
Только я скоро домой, так что будет пауза...
Распиши подробно, что нужно сделать - от этого макрос будет сильно зависеть
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 18.03.2011, 18:17   #42
igsxor
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 35
По умолчанию

Открыл новую книгу в ней открыл основн.табл.,создал макрос,ввёл твой код
Код:
Option Explicit

Sub Otbor()
    Dim a(), b, c, d, e, i As Long, ii As Long, j As Long, jj As Long, k As Long, temp As String
    Dim gottabl As Workbook
    Set gottabl = Workbooks("C:\Documents and Settings\dell_xp\Мои документы\Excel_forum\2_готовая табл.xlsx")

    a = Range("A2:I" & Range("A" & Rows.Count).End(xlUp).Row).Value
    ReDim b(1 To UBound(a), 1 To 3)

    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(a)
            temp = a(i, 1) & a(i, 5)
            If Not .Exists(temp) Then
                j = j + 1: .Item(temp) = j
                b(j, 1) = a(i, 1)
                b(j, 2) = a(i, 5)
                b(j, 3) = a(i, 9)
            Else
                k = .Item(temp)
                b(k, 3) = b(k, 3) + a(i, 9)
            End If
        Next
    End With



    With CreateObject("Scripting.Dictionary")

        For i = 1 To j
            temp = b(i, 1)
            If Not .Exists(temp) Then jj = jj + 1: .Item(temp) = jj
        Next

        ReDim c(1 To .Count, 1 To 4)

        For i = 1 To UBound(b)
            temp = b(i, 1)
            If Len(temp) Then
                c(.Item(temp), 1) = b(i, 1)
                Select Case b(i, 2)
                Case "?"
                    c(.Item(temp), 2) = b(i, 3)
                Case "?"
                    c(.Item(temp), 4) = b(i, 3)
                End Select
            End If
        Next

    End With

With gottabl.Sheets(1)
    d = .Range("B7:B" & .Range("B" & .Rows.Count).End(xlUp).Row).Value

ReDim e(1 To UBound(d), 1 To 3)

For i = 1 To UBound(d)
For ii = 1 To UBound(c)
If CStr(d(i, 1)) = CStr(c(ii, 1)) Then e(i, 1) = c(ii, 2): e(i, 3) = c(ii, 4):  Exit For
Next ii, i

 .Range("C7:E7").Resize(UBound(e)) = e
End With

End Sub
Запустил run,выдал ошибку
Run time error '9':
Subscript out of range.

До этого ругался на вот эту строчку :
Set gottabl = Workbooks("2_готовая табл.xlsx")
igsxor вне форума Ответить с цитированием
Старый 18.03.2011, 18:20   #43
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Надо видеть, на какой строке ошибка, вернее на что именно ругается.
Тут должно ругаться:
Код:
Set gottabl = Workbooks("C:\Documents and Settings\dell_xp\Мои документы\Excel_forum\2_готовая табл.xlsx")
И вот эти вопросительные знаки тоже в коде?
Код:
Case "?"
c(.Item(temp), 2) = b(i, 3)
Case "?"
Всё, пауза на часик-полтора...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 18.03.2011 в 18:25.
Hugo121 вне форума Ответить с цитированием
Старый 18.03.2011, 22:40   #44
igsxor
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 35
По умолчанию

Всё расписал во вложенном файле.Раньше не мог войти,сервер перегружен был судя по всему.
Вложения
Тип файла: rar подробно_о_табл.rar (25.3 Кб, 9 просмотров)
igsxor вне форума Ответить с цитированием
Старый 18.03.2011, 23:21   #45
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Так ведь в http://www.programmersforum.ru/showp...4&postcount=34
уже всё это реализовано.
Там только обратите внимание на строки:
"Т.к. так и не определились, как подвязаться к файлу "2_готовая табл.xlsx", то я сделал как мне проще:
Set gottabl = Workbooks("2_готовая табл.xlsx")
т.е. эта книга тоже уже должна быть открыта."

Но сейчас на всякий случай ещё перепроверю на приложенных файлах...
Да, всё работает без переделок.
Только важно - в строке
Set gottabl = Workbooks("2_готовая табл.xlsx")
должно быть указано имя Вашего сводного файла, он должен быть открыт, и код нужно запускать при активном листе с обрабатываемыми данными.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 18.03.2011 в 23:29.
Hugo121 вне форума Ответить с цитированием
Старый 18.03.2011, 23:32   #46
igsxor
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 35
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Так ведь в http://www.programmersforum.ru/showp...4&postcount=34
уже всё это реализовано.
ми.
Ссылка не рабочая
igsxor вне форума Ответить с цитированием
Старый 18.03.2011, 23:36   #47
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

У меня открывается...
Это 34-е сообщение этой темы. Берите код целиком и помещайте в любой стандартный модуль. Хотя может и вообще в любой можно, не проверял.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 19.03.2011, 00:04   #48
igsxor
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 35
По умолчанию

Всё код откомпилировался чистенко вроде)
Компилировал в 1_почти_готовая..
Дальше его нужно сохранить или как?
igsxor вне форума Ответить с цитированием
Старый 19.03.2011, 22:33   #49
igsxor
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 35
По умолчанию

Пробовал.
Всё запустилось,но не подходит,так как данные не правильные.
Как мне просто выгрузить в туже книгу где и начальные данные?
Или можно только в новую?
igsxor вне форума Ответить с цитированием
Старый 19.03.2011, 22:56   #50
igsxor
Пользователь
 
Регистрация: 15.03.2011
Сообщений: 35
Смущение

Цитата:
Сообщение от doober Посмотреть сообщение
Ваш вопрос решается штатными средствами -сводной таблицей.

во вложении пример создания сводной таблицы при помощи ADO
Доброго времени.

Прошу прошения,что проигнорировал.
Только попробовал ваш код.Просмотрел но не понял его.)
Как убрать кнопку Жми меня.
Кнопку я попробую вывести потом на панель управления.
И если не трудно объясни как после выгрузки сделать сводную таблицу)
igsxor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос группировки данных в таблице magana Microsoft Office Excel 1 28.01.2011 23:52
Обновление данных из табл в др. Ал3 Microsoft Office Access 1 04.07.2010 00:27
Результат перевода из 10й сис-мы в 16-ю занести в табл(10-е число - 16), до тех пор пока не будет введено Maemi_IT Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 11.01.2010 21:27
Кол-во данных в таблице dani92 БД в Delphi 1 02.04.2009 07:58
Как выпонить действия по двойному слику на созданной таблице Tiolic Общие вопросы Delphi 2 21.06.2007 09:53