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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2012, 22:47   #1
Олег Никитин
Новичок
Джуниор
 
Регистрация: 06.03.2012
Сообщений: 2
По умолчанию Нестандартный макрос для обработки таблицы

Добрый день! Надеюсь на вашу помощь.
Нужно создать макрос для следующих задач:
Есть таблица. В ней, допустим, 5 столбцов. Один из них определяющий (в моем примере это столбец 2, выделенный жирным. Нужно с помощью макроса найти все значения в этом столбце, отличающиеся друг от друга. Вывести каждое(!) значение отдельно вместе со значениями всех остальных столбцов, которые ему соответствуют. По пятому столбцу должна посчитаться сумма всех значений, которые в нем.
При этом желательно, чтобы результаты открывались как новый документ Exel. Возможно ли это? Если нет, то как минимум на новом листе каждый.

Прикрепляю архив. В нем: таблицу 1, исходную. И таблицы 2,3, которые должны получиться.
Вложения
Тип файла: rar Задачка.rar (226.2 Кб, 24 просмотров)
Олег Никитин вне форума Ответить с цитированием
Старый 07.03.2012, 00:08   #2
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

В формате BMP дороже.
RAN. вне форума Ответить с цитированием
Старый 07.03.2012, 00:32   #3
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

И где сумма?
Сделать можно - есть пара/тройка вариантов в зависимости от общего количества обрабатываемых строк.
Не боитесь, что с такой маскировкой можете разные карты как одну посчитать? Ещё бы фамилии не помешали...
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.03.2012, 12:48   #4
Олег Никитин
Новичок
Джуниор
 
Регистрация: 06.03.2012
Сообщений: 2
По умолчанию

Сумму я не стал вписывать - пока считаю вручную. Но считать её нужно по 5 столбцу.
Я, естественно, не мог дать скрины полных таблиц с достоверными данными, поэтому тут то, что есть
Общее количество обрабатываемых строк может быть разным, от 5 до 50, поэтому из этого сложно выводы делать.
Подскажите, какие есть варианты?
Олег Никитин вне форума Ответить с цитированием
Старый 08.03.2012, 13:07   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Макросом пройтись по данным столбца с номерами и в словарь собрать уникальные номера.
Если строк не тысячи - то сразу в словаре можно и отбирать в массив соответствующие строки (создать каждому массив с запасом на максимальное возможное количество и заполнять).
Если строк много - то в таком варианте будет большой расход памяти. Тогда в словарь собираем уникальные, потом циклом по этим значением фильтруем исходный лист и копируем видимые в новую книгу, сохраняем.
Так даже проще код написать.

Но как сказано выше - из bmp дороже...
Чтоб писать код - нужен файл для проверки. Его создание стОит денег :-)
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 08.03.2012, 13:43   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Подарок по случаю праздника
Исходный файл должен быть сохранён - результаты будут помещены рядом в ту же папку.
Код:
Option Explicit

Sub otbor()
    Dim i&, a(), kk, x As Range, sh As Worksheet, WBN As Workbook
    Application.ScreenUpdating = False

    Set sh = ActiveSheet
    a = sh.[a1].CurrentRegion.Columns(2).Value

    With CreateObject("Scripting.Dictionary")

        For i = 1 To UBound(a)
            .Item(a(i, 1)) = vbNullString
        Next

        For Each kk In .keys
            Set WBN = Workbooks.Add(xlWBATWorksheet)    'создание новой книги с одним листом
            With sh
                .Rows.Hidden = False
                Set x = .[B:B].Find(kk, , , xlWhole)
                .[B:B].ColumnDifferences(x).EntireRow.Hidden = True
                .Cells.SpecialCells(xlCellTypeVisible).Copy WBN.Sheets(1).[a1]
                i = WBN.Sheets(1).[a1].CurrentRegion.Rows.Count
                WBN.Sheets(1).Cells(i + 1, 5).Formula = "=sum(e1:e" & i & ")"
                WBN.SaveAs ThisWorkbook.Path & "\" & Replace(kk, "*", "_"): WBN.Close 0
                .Rows.Hidden = False
            End With
        Next

    End With

    Application.ScreenUpdating = True
End Sub
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 08.03.2012 в 14:08. Причина: добавил сумму
Hugo121 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос для обработки прайсов nondescript Microsoft Office Excel 11 24.08.2010 23:51
Макрос для обработки диапазона значений в цикле as-is Microsoft Office Excel 5 08.03.2010 12:39
Макрос обработки данных для Excel 2007 Python Фриланс 1 16.02.2010 20:47
надо: макрос для обработки данных poll69 Microsoft Office Excel 2 06.02.2010 17:25
макрос для обработки результатов тестирования prostoklassnik Microsoft Office Excel 12 05.11.2009 13:35