Выборка по нескольким параметрам из базы

Автор linstylesup@yandex.ru, 16.02.2012, 23:37

« назад - далее »

linstylesup@yandex.ru

Добрый день. Прошу помочь с проблемой выборки данных из базы по нескольким параметрам.
Существуют большая база в формате xml по данным за каждые сутки (лист 01, 02,03...31). Эта база потом сводится в одну общую таблицу из которой представлена только одна ее часть - (лист ПС Юбилейная Т1). Прошу помочь в в такой проблеме  - на лист "ПС Юбилейная Т1" в ячейки столбцов C. D. E и F нужно перенести данные из листа "01" столбца "value", которое удовлетворяет параметрам "name4", "desc", "start", указанных в ячейках лист "ПС Юбилейная Т1": B6. C6. D6. E6 и F6.
Как пример: на страницу "ПС Юбилейная Т1", в ячейке А2 которой задано "name4" = "ПС Юбилейная Т1", в столбцы C...F строк с А8 по А55  со страницы "01" переносятся данные:
Лист "01" ячейка I2 -> Лист "ПС Юбилейная Т1" ячейка С8
Лист "01" ячейка I50 -> Лист "ПС Юбилейная Т1" ячейка D8
Лист "01" ячейка I98 -> Лист "ПС Юбилейная Т1" ячейка E8
Лист "01" ячейка I146 -> Лист "ПС Юбилейная Т1" ячейка F8
и т.д.
Исходники огромные и вручную прописывать ссылки - проще застрелиться.Буду благодарен за пример использования для данной задачи или функциями или макросами.

Wasilic

#1
Размеры таблиц на листах 01-31 меняются?
Для решения Вашей задачи, нужна дополнительная инфа.
ЦитироватьЭта база потом сводится в одну общую таблицу
1. Как часто делается свод? Ежедневно или раз в месяц?
Цитироватьпредставлена только одна ее часть - (лист ПС Юбилейная Т1).
2. На листе 01 присутствует ПС Юбилейная Т2. Сколько их всего?
3. Вам нужен принцип реализации задачи или готовое решение?

ЦитироватьБуду благодарен за пример использования для данной задачи
Если этого достаточно, вопросы снимаются.
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

Energo

#2
Цитата: Wasilic от 17.02.2012, 00:54
Размеры таблиц на листах 01-31 меняются?
Для решения Вашей задачи, нужна дополнительная инфа.
ЦитироватьЭта база потом сводится в одну общую таблицу
1. Как часто делается свод? Ежедневно или раз в месяц?
Цитироватьпредставлена только одна ее часть - (лист ПС Юбилейная Т1).
2. На листе 01 присутствует ПС Юбилейная Т2. Сколько их всего?
3. Вам нужен принцип реализации задачи или готовое решение?

ЦитироватьБуду благодарен за пример использования для данной задачи
Если этого достаточно, вопросы снимаются.
1. Свод проиходит каждый день.
2. ПС Юбилейная Т2 одна из многих "name4" - общее число 60 наименований. Соответственно Страниц "Юбилейная Т1, Юбилейная Т2 и т.д." куда должна быть выгрузка данных будет 60 штук. Файл разростается до гигантских размеров  :-\.
3. Готовое решение - было бы супер, ибо в макросах на уровне простого юзера...

Сори зашел  с рабочего компа...

Wasilic

#3
Цитироватьобщее число 60 наименований.
И для каждого свой лист, типа "ПС Юбилейная Т1", "ПС Юбилейная Т2"  и т.д.? И все в одном файле?
Для готового решения необходимо полное понимание задачи.

ЗЫ Вы писали
ЦитироватьСуществуют большая база в формате xml по данным за каждые сутки
ЦитироватьЭта база потом сводится в одну общую таблицу
Когда потом сводится? Каждый день?
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

Energo

ЦитироватьИ для каждого свой лист, типа "ПС Юбилейная Т1", "ПС Юбилейная Т2"  и т.д.? И все в одном файле?
Для готового решения необходимо полное понимание задачи.
Да, Вы правы - листы подстанций все в одном файле. В нем же и данные за каждые сутки, выуженные их xml формата (листы 01, 02...31). Вот и получается, что данные из листа 01, 02...31 (котрые содержат данные за сутки по ВСЕМ подстанциям) нужно выудить на страницу нужной подстанции именно ее данные.

ЦитироватьКогда потом сводится? Каждый день?
Да, как только сутки прошли - информация за сутки помещается в свой лист (01, 02...31).

Energo

В Вашем примере Вы привязывались к данным по переменной N
Sub WWW()
  Dim iL As Worksheet, i, j
  Range("C8:F2000").ClearContents
  If Range("A2") = "ПС Юбилейная Т1" Then
     N = 2
  Else
     N = 194
  End If
  K = N + 47
  z = 8
  For Each iL In Worksheets
    If iL.Name <> "ПС Юбилейная Т1" Then
       NL = iL.Name
       If Sheets(iL.Name).Range("A" & Rows.Count).End(xlUp).Row > 10 Then
          For i = N To K
             Cells(z, 3) = Sheets(iL.Name).Cells(i, 9)
             Cells(z, 4) = Sheets(iL.Name).Cells(i + 48, 9)
             Cells(z, 5) = Sheets(iL.Name).Cells(i + 96, 9)
             Cells(z, 6) = Sheets(iL.Name).Cells(i + 144, 9)
             z = z + 1
          Next i
       Else
         MsgBox "Лист " & iL.Name & " пустой. Процедура прервана!"
         Exit Sub
       End If
    End If
  Next iL
End Sub


Это правильное решение, но к сожалению название подстанции "ПС Юбилейная Т1" (да как и любой из списка "name4") может сместиться как вверх, так и вниз - из-за добавления или вычеркивания подстанции из базы...

Wasilic

Это был всего лишь пример принципа решения, я ж не знал что с макросами у Вас отношения напряженные.  :)
Может и я на что сгожусь ... Если сгодился, можете меня по+благодарить+.

Energo

Даже такой пример я Вам очень признателен  :).
Изучаю...

Energo

Вторая часть алгоритма выдает ошибку... А не проще будет создать обход на сравнение нужных параметров для выборки? Сырой макрос написал, но все равно не хватает знаний.

Energo

Благодаря помощи с форума оптимизировал (на сколько это возможно) решение задачи. Огромная благодарность Wasilic'у за пример и помощь в решении. Однако моя проблема приобретает несколько иной подход решения, отличный от перврначального ее видения. Но это, пожалуй, уже будет другая тема для общения на Вашем форуме.
Спасибо Всем!