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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2009, 12:01   #1
psbad
Пользователь
 
Регистрация: 11.11.2009
Сообщений: 10
По умолчанию Групировка значений и их сумма, но с условием

Добрый день! Прошу помощи.

Есть файл, в котором присутствует 1 столбец, содержащий 100 тысяч строк. Мне необходимо объединить значения по совпадению первых например 4 символов, и получить колличество таких значения в столбце B. Подскажите пожалуйста возможно ли такое? и как это возможно реализовать?
Вложения
Тип файла: rar примерl.rar (8.5 Кб, 31 просмотров)
psbad вне форума Ответить с цитированием
Старый 11.11.2009, 12:22   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Можно, например, выполнить такой макрос:
Код:
Sub Main()
    Dim i As Long, s As String, x As Range: Application.ScreenUpdating = False
    Set x = Range([A2], Cells(Rows.Count, 1).End(xlUp)): [A:B].AutoFilter
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
        s = Left(Cells(i, 1), 4) & "*"
        Selection.AutoFilter Field:=1, Criteria1:=s
        Cells(i, 2) = x.SpecialCells(xlCellTypeVisible).Rows.Count
    Next: [A:B].AutoFilter
End Sub
Пример во вложении. Но вот сколько времени он будет выполняться при Ваших объемах, я не оценивал.
Если требуется упорядочить, то можно предварительно отсортировать данные.
Вложения
Тип файла: rar Пример.rar (15.1 Кб, 19 просмотров)
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 11.11.2009 в 12:26.
SAS888 вне форума Ответить с цитированием
Старый 11.11.2009, 12:32   #3
psbad
Пользователь
 
Регистрация: 11.11.2009
Сообщений: 10
По умолчанию

макрос работает, а возможно ли как то сгрупировать значения? т.е оставить из каждого множества только например первые 4 символа? или целиком слово "Toyota" ? просто если их отсортировать то они не пропадут а просто выстроятся по алфавиту или еще как то..я пробовал через сводную таблицу и из 100 тысяч оставалось 3,5 но это все равно очень много и записи по сути уникальны но не до конца (т е имеются префиксы,приставки, индексы производителей, и пр. ненужная инфа)
psbad вне форума Ответить с цитированием
Старый 11.11.2009, 13:09   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Ну, тогда может быть так устроит?
Вложения
Тип файла: rar Пример_2.rar (13.6 Кб, 28 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 11.11.2009, 13:21   #5
psbad
Пользователь
 
Регистрация: 11.11.2009
Сообщений: 10
По умолчанию

ну просто замечательный макрос! только подскажите пожалуйста какой параметр в Вашем макросе отвечает за кол-во символов в столбце В(Новое имя)? ( что бы в дальнейшем я не задавал глупых вопросов и смог немного подправить макрос сам).

выражаю большущую благодарность за столь продуктивную помощь!!!
psbad вне форума Ответить с цитированием
Старый 11.11.2009, 13:44   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

В макросе строковой переменной s в цикле присваивается значение для критерия автофильтра. А именно:
Код:
s = Left(Cells(i, 1), 4) & "*"
Т.е. из ячейки столбца 1, строки i берем слева 4 символа.
Подставьте то, что нужно Вам.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 11.11.2009 в 13:50.
SAS888 вне форума Ответить с цитированием
Старый 11.11.2009, 23:32   #7
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте psbad.
SAS888 уже предложил Вам конструкцию которая Вас устраивает.
предлагаю посмотреть ещё одну конструкцию, созданную для работы с применением библиотеки ADO.
думаю скорость обработки 100 000 строк будет несколько выше.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 12.11.2009, 10:49   #8
psbad
Пользователь
 
Регистрация: 11.11.2009
Сообщений: 10
По умолчанию

Здравствуйте Евгений! готов посмотреть Ваш вариант. Поскольку отработка макроса занимает действительно большое количество времени (в первый раз я так и не дождался - ждал порядка 10 минут). Тяжело все таки даются если быть точным 130 000 строк.
psbad вне форума Ответить с цитированием
Старый 12.11.2009, 19:10   #9
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте psbad.
получите файл.
Евгений.
Вложения
Тип файла: rar Пример3.rar (16.8 Кб, 23 просмотров)
Teslenko_EA вне форума Ответить с цитированием
Старый 13.11.2009, 06:38   #10
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Тяжело все таки даются если быть точным 130 000 строк.
Код от Teslenko_EA действительно хорош. Но я попробую с ним посоревноваться. К тому же, почему-то, иногда (по моим тестам) подсчет происходит неверно.
Посмотрите другой вариант. Запустите макрос "Main".
Вложения
Тип файла: rar Пример_4.rar (13.7 Кб, 24 просмотров)
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 13.11.2009 в 06:56.
SAS888 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid сумма значений monushka Общие вопросы Delphi 21 26.10.2009 17:12
Сумма значений строк Deni55 Microsoft Office Excel 14 02.06.2009 13:56
Сумма значений таблицы условию. Drummer_SV Microsoft Office Excel 4 13.05.2009 16:24
создать массив сл значений, сумма которых определена prasvit Помощь студентам 13 04.04.2009 03:35
СУММА ЗНАЧЕНИЙ ЭЛЕМЕНТОВ Dimak24 Помощь студентам 1 24.12.2008 09:29