Страницы: 1
RSS
собрать данные в массив по признаку в одном столбце
 
Добрый день!
Я новичок в написание макросов. Помогите пожалуста с решением следующей задачи: из системы выгружаются данные в excel, в виде таблицы. Таблица содержит подкрашенные строчки (тоесть итоговые строки по категории), как собрать данные в массив только по этим итоговым строчкам. Признак, по которому можно собрать данные я вижу только один в столбце D в я чейках которые относятся к итоговым строка ничего нет. Я начала писать пробовать код, но что то у меня не совсем получается.

Файл выгрузки прилогаю
Изменено: Ashas88 - 22.10.2013 17:23:06
 
Оформляйте код ТЕГАМИ.
 
Извините а как это оформить тегами?
 
Вот код, который я начала писать..
Изменено: Ashas88 - 19.10.2013 15:58:25
 
В поле ответа (создания сообщения) вверху есть ряд кнопок - одна из них Ваша.
 
Спасибо!
 
если не секрет - зачем вам именно массив? что вы с ним дальше собираетесь делать?

в приложении - вариант с расширенным фильтром (без макроса)
если оч. надо в массив - то можно макрорекодером записать этот фильтр и одной командой загнать результат в массив.
пс. обратите внимание на оранжевые ячейки - заголовки должны быть уникальными.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Не секрет. Это не конечная задача... "11-е" и т.д. это название подгрупп, над которыми стоят группы, в итоги суммы по столбцам далее нужно просуммировать по группам.. И этот процесс нужно автоматизировать т.к. выгрузка происходит каждый день и ее нужно обрабатывать.. Во вложении файл привязки подгрупп к группам
 
Попробуйте в этом направлении:
Включить макрорекордер-
Выделить голубую область- Выделить видимые-Копировать-Вставить на чистый лист
( Выделить видимые:Найти и выделить-Выделение группы ячеек-Только видимые ячейки)
 
честно говоря, я тоже за то, чтобы автоматизировать ежедневные действия.
но если эти действия - раз в день, а нужна одна простая формула и одна простая сводная...
плюс (пока ещё) слабое владение VBA...
мммм...

а может - ну их, эти макросы?  :)  ;)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Спасибо большое за помощь :) Но хочется через макросы т.к. хочется научиться ими пользоваться, во вторых объем информации со временем увеличивается...
 
ну тогда давайте уточнять (для желающих написать макрос один раз, а не пятнадцать).

1) в ваших реальных таблицах такой же бардак? в смысле:
a. шапка с объединенными (но не везде!) ячейками;
b. пустая строка после шапки;
c. одинаковые заголовки;
d. сама таблица - посреди листа;
1+) нельзя ли от этого бардака (или хотя бы части) избавиться? или, к примеру, сказать: выгруженная таблица всегда начинается с ячейки B4 и всегда отделена от шапки одной пустой строкой...
2) где именно находится и как именно выглядит реальная вспомогательная таблица принадлежности подгрупп к группам?
3) могут ли в новой выгрузке оказаться подгруппы, отсутствующие во вспомогательной таблице? что делать в этом случае?
4) в каком виде вам нужен результат?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
1.таблица выглядит реально как я ее выложила, единственное столбцы имеют разные названия
2. Вид выгружаемой таблицы изменить нельзя, выгрузка может только быть либо больше, либо меньше и итоговые строчки постоянно меняют свое расположение(т.е. Либо ноже могут находиться,их может стать больше или меньше и т.д.). (((
3.вспомогательная таблица находиться в отдельном файле и состоит из двух столбов
3. Такого быть не может!)
4.результат нужен в следующем виде: заголовок таблице будет такой же как и в выгружаемом файле а ниже категории и суммы по категориям (т.е. В выгрузке есть подкатегории которые входят в категорию, нужно определить по средством вспомогательной таблице в какую категорию входят подкатегории, а потом получить итоговую сумму по каждому столбцу для категории).
 
вообще непонятно с категориями и подкатегориями, которые надо где-то в какомто файле определить.
Не надо много буков. Самое простое выложить примеры: что есть, что надо получить и если надо, то чем воспользоваться. Насколько я понял :
Код
Option Explicit

Sub QWERT()
Dim M()
Dim RZ()
Dim R, C
Лист2.Cells.ClearContents
Лист2.Cells.Font.Bold = 0
Range(Лист1.Cells(1, 1), Лист1.Cells(5, 8)).Copy Лист2.Cells(1, 1)
M = СУММИРОВАТЬ(Cells(6, 3))
Range(Лист2.Cells(7, 2), Лист2.Cells(UBound(M, 2) + 6, 8)) = Application.Transpose(M)

Лист2.Cells(UBound(M, 2) + 7, 5).Formula = "=SUM(E7:E" & UBound(M, 2) + 6 & ")"
Лист2.Cells(UBound(M, 2) + 7, 6).Formula = "=SUM(F7:F" & UBound(M, 2) + 6 & ")"
Лист2.Cells(UBound(M, 2) + 7, 7).Formula = "=SUM(G7:G" & UBound(M, 2) + 6 & ")"
Лист2.Cells(UBound(M, 2) + 7, 8).Formula = "=SUM(H7:H" & UBound(M, 2) + 6 & ")"
Range(Лист2.Cells(UBound(M, 2) + 7, 2), Лист2.Cells(UBound(M, 2) + 7, 8)).Font.Bold = 1
Лист2.Cells(UBound(M, 2) + 7, 8).NumberFormat = "#,##0.00"
End Sub

Function СУММИРОВАТЬ(Первая_ячейка_таблицы As Range)
Dim M()
Dim LR, LC, R, C, J
Dim REZ()
R = Первая_ячейка_таблицы.Row
C = Первая_ячейка_таблицы.Column
LR = Лист1.Cells(Лист1.Rows.Count, 3).End(xlUp).Row
LC = Лист1.Cells(R, Лист1.Columns.Count).End(xlToLeft).Column
M = Range(Лист1.Cells(R, C), Лист1.Cells(LR, LC)) ' загнали всё в массив

For R = 1 To UBound(M) 'по всему массиву
    If M(R, 2) = Empty Then
    J = J + 1
    ReDim Preserve REZ(6, 1 To J)
        For C = 1 To 6
            REZ(C, J) = M(R, C)
        Next C
    End If
Next R
СУММИРОВАТЬ = REZ
End Function
 
Понял.
 
Добрый день!
Александр, спасибо большое за помощь. Извините вы бы не могли пояснить, что написано в коде, чтобы я могла разобраться и понять т.к. я сама хочу научиться писать макросы...
 
Скрытый текст
 
Добрый день!
Спасибо за пояснения... А подскажите нельзя сделать, так чтобы все было в отдельных файлах (т.е. сам макрос в отдельном файле, база для обработке в отдельном файле, привязка в отдельном файле и итоговая таблица выводилась в файле в котором храниться база)..
 
Файл Суммирование сохранить как надстройку
Файл SooTv = соответствие груп подгруппам.
В нём табличка соответствия с присвоенным именем.
Этот файл должен быть рядом с файлом данных.
После открытия файла с данными (если надстрока подключена)
В 2003 появится меню Суммировать.
В 2007 на закладке надстройки тоже будет такая же кнопка
При нажатии создаётся новый лист в книге с данными
На время работы программы открывается автоматически и файл SooTv
Изменено: Александр Моторин - 23.10.2013 08:31:24
Страницы: 1
Читают тему
Наверх