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

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

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

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

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

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

Это не массив, а коллекция.
Про CStr() я недавно читал - в деталях не помню, но это чтоб быстрее работало, можно и не превращать, но тогда будут лишние преобразования.
"в массиве будут все значения и в том числе дублирующиеся" - мне кажется, что-то Вы напутали... надо проверить...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 27.09.2010, 14:48   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Кстати, если Вам надо просуммировать из G у всех уникальных сочетаний
131 4607028557484
то это можно сделать одним проходом - заносим в коллекцию ключ 131&4607028557484, а Item 22.
Затем при повторе ключа увеличиваем Item на Item+значение.
Т.е. за один перебор массива получаем сумму значений из G по всем уникальным парам номер+штрихкод. Это надо?
webmoney: E265281470651 Z422237915069 R418926282008

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

Вот так например. См. лист2 - только там ещё надо первый столбец разбить, ну это другой вопрос.
Только мне словари больше нравятся...

P.S. 65000 строк обрабатывает за 1.78 сек. Но это без вывода на лист - на Excel2000 Transpose глючит, поэтому сам вывод мне на тесте пришлось закомментировать.
P.P.S. На 2003 Transpose отработало. Правда на тестовых данных получилось из 65535 строк 65530 уникальных, поэтому обработка заняла 5,09375 сек., а выгрузка ещё 10 сек. (общее время 15,8125 на небыстрой старой машине).
Вложения
Тип файла: zip ObrabotkaH1.zip (10.2 Кб, 12 просмотров)
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 27.09.2010 в 23:02.
Hugo121 вне форума Ответить с цитированием
Старый 28.09.2010, 00:16   #14
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Возможно я не так понял задачу.На Лист2 я вывел всю таблицу листа опись,но с убранными и проссумироваными дубликатами.На Лист3 вывел повторы
Вложения
Тип файла: rar Книга1.rar (1.24 Мб, 7 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 28.09.2010, 01:23   #15
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Совсем забыл.Штрихкод воспринимает как число.Поэтому все строковые штрихкоды не читает,игнорирует.Если вам такой вариант подойдет,надо будет число сохранять как тект с '
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 28.09.2010, 06:32   #16
sn00p
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Кстати, если Вам надо просуммировать из G у всех уникальных сочетаний
131 4607028557484
то это можно сделать одним проходом - заносим в коллекцию ключ 131&4607028557484, а Item 22.
Затем при повторе ключа увеличиваем Item на Item+значение.
Т.е. за один перебор массива получаем сумму значений из G по всем уникальным парам номер+штрихкод. Это надо?
кол-во дубликатов и их атрибуты(№ док-та и ШК) не известно заранее, впрочем как и кол-во строк, которое нужно обработать
sn00p вне форума Ответить с цитированием
Старый 28.09.2010, 06:40   #17
sn00p
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 40
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Возможно я не так понял задачу.На Лист2 я вывел всю таблицу листа опись,но с убранными и проссумироваными дубликатами.На Лист3 вывел повторы
суммы по столбцу G до и после обрабботки(на листе2) не совпадают.

по ШК как цифре, я же их преобразую ч\з STR, так не пойдет?
sn00p вне форума Ответить с цитированием
Старый 28.09.2010, 06:46   #18
sn00p
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Вот так например. См. лист2 - только там ещё надо первый столбец разбить, ну это другой вопрос.
Только мне словари больше нравятся...

P.S. 65000 строк обрабатывает за 1.78 сек. Но это без вывода на лист - на Excel2000 Transpose глючит, поэтому сам вывод мне на тесте пришлось закомментировать.
P.P.S. На 2003 Transpose отработало. Правда на тестовых данных получилось из 65535 строк 65530 уникальных, поэтому обработка заняла 5,09375 сек., а выгрузка ещё 10 сек. (общее время 15,8125 на небыстрой старой машине).

комрад, дайте линк на теорию.
нужно делать массив string? размерности = кол.во строк Х кол.во столбцов?
или пихать одной строкой в динамический массив?
sn00p вне форума Ответить с цитированием
Старый 28.09.2010, 08:41   #19
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от sn00p Посмотреть сообщение
суммы по столбцу G до и после обрабботки(на листе2) не совпадают.

по ШК как цифре, я же их преобразую ч\з STR, так не пойдет?
Суммы совпадают,при добавлении дубликатов для проверки на первом листе две верхние ячейки не попали в расчет.Переделать под строку это не проблема
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 28.09.2010, 09:13   #20
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от sn00p Посмотреть сообщение
комрад, дайте линк на теорию.
нужно делать массив string? размерности = кол.во строк Х кол.во столбцов?
или пихать одной строкой в динамический массив?
Линк не дам, нет на примете. Остальное не вполне понял
А суть вот - весь диапазон берём в массив (a = Range) и начинаем его перебирать (For i = 1 To UBound(a)) (так быстрее, чем с листа брать).
Берём первую пару и заносим эту строку (с вставленным разделителем, чтоб потом можно было назад разобрать) в Dictionary, как Item берём число из G.
Берём следующую пару и проверяем - если уже есть в словаре, плюсуем Item с значением G, если нет - добавляем в словарь.
Работает быстро, и если нужно, можно параллельно с добавлением в словарь, добавлять в другой массив нужные поля из первого массива. Да и сумму можно сразу в другом массиве плюсовать - как ориентир использовать Item словаря, только тогда в Item заносить не число из G, а порядковый номер.

Цитата:
Сообщение от sn00p Посмотреть сообщение
кол-во дубликатов и их атрибуты(№ док-та и ШК) не известно заранее, впрочем как и кол-во строк, которое нужно обработать
ну это не имеет значения - в коде берётся последняя строка по столбцу А.
webmoney: E265281470651 Z422237915069 R418926282008

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
Как передать данные типа "дата" из формы в таблицу Ярослав Блошенко Microsoft Office Access 1 26.02.2010 18:22
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Обновление набора данных после добавления в таблицу записей "внешней" программой dimmm БД в Delphi 5 21.04.2009 00:56