Страница: 1 |
Страница: 1 |
Вопрос: Сводная таблица по заданному критерию
Добавлено: 05.08.08 15:27
Автор вопроса: Marlen
Добрый день!
Помогите пожалуйста решить следующую задачу посредством макроса VBA в Excel.
Есть файл с множеством листов. Каждый лист содержит информацию по своей группе. Форма данных (таблица) на каждом листе одинаковая. Необходимо согласно указанному критерию (строки в которых значение во второй колонке совпадает с заданным критерием) сделать выборку со всех листов и отобразить их на листе (Сводная), причем в первой ячейке каждой строки добавить имя листа с которого были взяты данные.
Заранее спасибо!
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #1
Добавлено: 05.08.08 17:57
Т. е. нужно, чтобы в первом столбце было название листа с которого взяли ин-фу, а во втором строка, по которой проводилась выборка ?
Номер ответа: 2
Автор ответа:
Marlen
Вопросов: 3
Ответов: 6
Профиль | | #2
Добавлено: 05.08.08 18:13
Совершенно верно! Я вижу это так. В первой строке Листа "Сводная" будет находиться заголовок таблицы. При вызове макроса выскакивает окно для ввода искомого значения. Дальше макрос начинает по порядку просматривать все листы, и если найдена строка удовлетворяющая запросу, в новой строке на Лист "Сводная" в первую колонку вставляет имя листа с которого взяты данные, а дальше найденную строку.
На каждом листе могут быть несколько строк соответствующих критерию.
При новом запуске макроса все строки под заголовком очищаются и заполняются новыми данными!
Номер ответа: 3
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #3
Добавлено: 05.08.08 19:03
Лови:
Worksheets("Сводная".Range("A2:A" & iSum).ClearContents
For i = 2 To iSum
FindStr = Range("B" & i).Value
For Each sh In Sheets
If sh.Name <> "Сводная" Then
iTemp = sh.Columns("A".Rows(65535).End(xlUp).Row
With sh.Range("A2:A" & iTemp)
Set c = .Find(FindStr, LookIn:=xlValues, LookAt:=xlWhole)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Worksheets("Сводная".Range("A" & i).Value = sh.Name
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
End If
Next sh
Next i
Номер ответа: 4
Автор ответа:
Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #4
Добавлено: 05.08.08 19:04
Не увидела последнего сообщения. Ну тут можно подправить.