Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Перебор строк с суммированием одинаковых значений / 9 сообщений из 9, страница 1 из 1
12.04.2007, 19:02:51
    #34457341
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк с суммированием одинаковых значений
Ещё раз здравствуйте!
При написании очередной программки на VBA появился вопрос, который самостоятельно затрудняюсь решить, поэтому надеюсь на помощь.

Есть документ XLS, в котором содержится таблица со множеством столбцов. Данные начинаются с 4-й строки (первые 3 пустые) и с 7 столбца (таблица генерируется другой программой). Причем между строками с данными постоянно встречаются пустые строки (от 3 до 12 - рандомно).
В столбце 7 - содержатся наименования товаров. Эти наименования могут многократно повторяться, к примеру:
ААААА
ССССС
ВВВВВВ
ААААА
ККККК
ССССС
........
Задача: сгрупировать одинаковые наименования - т.е. рассчитать, сколько раз каждое наименование присуствует в таблице?
К сожалению, кроме полного перебора каждого наименования по всему столбцу в циклах - ничего в голову не приходит.
Но это будет долго выполняться. Что бы такое придумать?
...
Рейтинг: 0 / 0
12.04.2007, 19:12:15
    #34457378
JimOrange
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк с суммированием одинаковых значений
А Сводная Таблица не помогает?
...
Рейтинг: 0 / 0
12.04.2007, 19:16:12
    #34457388
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк с суммированием одинаковых значений
Код: plaintext
WorkSheetFunction.countif (Range(...) , "AAAAA")

Код: plaintext
[countif(G3:G65536, "AAAAA")]
...
Рейтинг: 0 / 0
12.04.2007, 19:36:58
    #34457419
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк с суммированием одинаковых значений
JimOrangeА Сводная Таблица не помогает?
Нет. Я делаю программу, которая буде конвертировать исходные данные в файл спец. формата.
Мне это нужно решить в VBA.
...
Рейтинг: 0 / 0
12.04.2007, 19:50:04
    #34457441
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк с суммированием одинаковых значений
Deggasad
Код: plaintext
WorkSheetFunction.countif (Range(...) , "AAAAA")

Код: plaintext
[countif(G3:G65536, "AAAAA")]

Что-то такое я смутно предполагал... Но я не понял, как эти "ААААА" и прочие наименования опеределять? В обрабатываемых документах названия ведь всегда разные...
Если не затруднит, то подробнее, плиз.
...
Рейтинг: 0 / 0
12.04.2007, 20:08:49
    #34457479
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк с суммированием одинаковых значений
Alex37 Deggasad
Код: plaintext
WorkSheetFunction.countif (Range(...) , "AAAAA")

Код: plaintext
[countif(G3:G65536, "AAAAA")]

Что-то такое я смутно предполагал... Но я не понял, как эти "ААААА" и прочие наименования опеределять? В обрабатываемых документах названия ведь всегда разные...
Если не затруднит, то подробнее, плиз.
например написать все возможные варинты на листе. Надо подумать, так на вскидку не знаю если честно. В голову только переборы приходят.
...
Рейтинг: 0 / 0
12.04.2007, 20:31:30
    #34457539
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк с суммированием одинаковых значений
Deggasad Alex37 Deggasad
Код: plaintext
WorkSheetFunction.countif (Range(...) , "AAAAA")

Код: plaintext
[countif(G3:G65536, "AAAAA")]

Что-то такое я смутно предполагал... Но я не понял, как эти "ААААА" и прочие наименования опеределять? В обрабатываемых документах названия ведь всегда разные...
Если не затруднит, то подробнее, плиз.
например написать все возможные варинты на листе. Надо подумать, так на вскидку не знаю если честно. В голову только переборы приходят.
Все варианты написать не получится, это я для упрощения задачи написал в условии, что в столбце 7 наименования товара. Да, эти названия можно было бы написать куда-нибудь. Реально, в этом столбце пишется код (string, типа JGF2378YTE). И он может повторяться лишь в одном обрабатываемом документе... Сгенерируется другой XLS - там уже другие комбинации. Таким образом, "товар" у меня никогда не повторяется в разных документах.
А если использовать перебор? Как оптимально это настроить? Ведь найденный "товар" надо записать куда-то, в массив? А потом сверяться, было ли такое уже?
...
Рейтинг: 0 / 0
13.04.2007, 00:14:09
    #34457855
Deggasad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк с суммированием одинаковых значений
как идея, а там сам смотри

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub Макрос1()
'
    ActiveSheet.Copy Before:=Sheets( 1 )
    Rows("3:65536").Select
    Selection.Sort Key1:=Range("G3"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:= 1 , MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
       
    Range("A2").Value = "Критерий"
    Range("B2").Value = "Количество повторений"
    
    LastRow = ActiveSheet.Range("G3:G65536").Find("*", _
    SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Offset( 1 ,  0 ).Row
    n =  3 : m =  3 
    Do
     Range("A" & n).Value = Range("G" & m).Value
     x = ActiveSheet.Range("G3:G65536").Find(Range("A" & n).Value, _
     SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Offset( 1 ,  0 ).Row
     Range("B" & n).Value = x - m
     m = x
     n = n +  1 
    Loop While m < LastRow
    
End Sub
...
Рейтинг: 0 / 0
13.04.2007, 02:27:51
    #34457902
Alex37
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перебор строк с суммированием одинаковых значений
Deggasadкак идея, а там сам смотри

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sub Макрос1()
'
    ActiveSheet.Copy Before:=Sheets( 1 )
    Rows("3:65536").Select
    Selection.Sort Key1:=Range("G3"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:= 1 , MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
       
    Range("A2").Value = "Критерий"
    Range("B2").Value = "Количество повторений"
    
    LastRow = ActiveSheet.Range("G3:G65536").Find("*", _
    SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Offset( 1 ,  0 ).Row
    n =  3 : m =  3 
    Do
     Range("A" & n).Value = Range("G" & m).Value
     x = ActiveSheet.Range("G3:G65536").Find(Range("A" & n).Value, _
     SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Offset( 1 ,  0 ).Row
     Range("B" & n).Value = x - m
     m = x
     n = n +  1 
    Loop While m < LastRow
    
End Sub

Интересно. Хотя для меня может и сложновато, надо вникать... А я уже не могу. С 8:00 за компом сижу...

Но вроде решил я свою проблему. Сделал так. Считываю за один проход данные из XLS документа построчно, пропуская пустые строки, попутно распихивая информацию из текущей не пустой строки по массивам. Как данные закончились, начинаю обрабатывать данные в массивах, делая множество проверок, сравнений... Попутно всё пишется в текстовые файлы в нужной последовательности (это командные файлы для управления станком). Практически готово. И работает достаточно быстро, несколько секунд.

Спасибо всем за помощь!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Перебор строк с суммированием одинаковых значений / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]