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

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

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

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

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

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

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

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

Что-то такое я смутно предполагал... Но я не понял, как эти "ААААА" и прочие наименования опеределять? В обрабатываемых документах названия ведь всегда разные...
Если не затруднит, то подробнее, плиз.
например написать все возможные варинты на листе. Надо подумать, так на вскидку не знаю если честно. В голову только переборы приходят.
Все варианты написать не получится, это я для упрощения задачи написал в условии, что в столбце 7 наименования товара. Да, эти названия можно было бы написать куда-нибудь. Реально, в этом столбце пишется код (string, типа JGF2378YTE). И он может повторяться лишь в одном обрабатываемом документе... Сгенерируется другой XLS - там уже другие комбинации. Таким образом, "товар" у меня никогда не повторяется в разных документах.
А если использовать перебор? Как оптимально это настроить? Ведь найденный "товар" надо записать куда-то, в массив? А потом сверяться, было ли такое уже?
...
Рейтинг: 0 / 0
Перебор строк с суммированием одинаковых значений
    #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
Перебор строк с суммированием одинаковых значений
    #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
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Перебор строк с суммированием одинаковых значений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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