Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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
Лови:
iSum = Columns("B";).Rows(65535).End(xlUp).Row
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
Не увидела последнего сообщения. :-) Ну тут можно подправить.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам