Страницы: 1
RSS
простенький макрос сводной выборки по нескольким листам
 
Всем привет! Сегодня в ночь решил познать новый для себя мир - мир макросов. Выкладывать что получилось не буду - засмеете... кондово, топором, но я умею копировать нужные ячейки, какое-то подобие циклов получилось. Пригодились знания sql. Но видимо где-то с синтаксисом проблемы или просто мало времени. Не стал бы беспокоить, но сроку неделя на все про все. Когда-то с вашей помощью я делал похожую историю с дикими формулами - итог очень медленно и тяжеловато. Хотя как по мне, так макросами ни разу не проще. Но в общем хватить лирики.
Задача простейшая для вас, уверен.
Есть несколько листов с разного рода информацией, которую объединяет скажем так общий uin - название города. В итоге в отдельном листе нужно собрать по некоему шаблону всю информацию об этом городе.
Все бы ничего, но предшественники сделали не самый лучший формат перечня встреч с руководителями. Вытянут в горизонталь и для каждого города содержится несколько записей.
Логика понятна - нужно узнать номера строк и записать их в массив. Пробовал, но не получилось(
В общем выложу, пожалуй, имитацию файла... Уверен - так проще будет разобраться.
Буду признателен за совет и решение.
С уважением и пожеланиями легкой рабочей недели.
 
Код
макрос3()
       
           For g = 1 To 185
           If Sheets("ishod").Cells(g, 1).Value = Worksheets("otchet").Range("B1") Then
           check = "yes"
        '   num = Sheets("ishod").Cells(g, 1).Row
           country = Worksheets("otchet").Range("B1").Value
           End If
           Next
           
           country2 = Worksheets("otchet").Range("B1").Value
           'MsgBox (check)
          ' MsgBox (num)
          ' MsgBox (country)
           ' MsgBox (country2)
           
         For b = 2 To 40
          If (Worksheets("otchet").Cells(b, 1).Value <> "") Then
                   x = Worksheets("otchet").Cells(b, 1).Value
                   'нашли значение левой ячейки
                 
                   rowX = b
                   
                   y1 = Worksheets("keys").Range("a1:b100").Find(What:=x).Row
                   y2 = Worksheets("keys").Range("a1:b100").Find(What:=x).Column
                   y = Worksheets("keys").Cells(y1, y2 + 1).Value
               '    MsgBox (y)
                   ' значение левой колонки (сокращенное) в исходных табличках
                                 
                                 'Worksheets("otchet").Range("b5").Value = y
       
                 
                  For Each ActiveSht In ThisWorkbook.Sheets(Array("trips", "ishod", "votes"))
                      
                    Set Z = ActiveSht.Range("a1:z1").Find(What:=y, LookIn:=xlValues, _
    LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
                    
                    If Not Z Is Nothing Then
                       yNum = Z.Column
                    
                '    MsgBox ActiveSht.Name & "  " & y
                         Set Z1 = ActiveSht.Range("a1:z200").Find(What:=country2, LookIn:=xlValues, _
    LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False)
                      
                          If Not Z1 Is Nothing Then
                       xNum = Z1.Row
                       
                '       MsgBox ActiveSht.Name & "  " & country2 & "   " & xNum
                      
                  ActiveSht.Cells(xNum, yNum).Copy Destination:=Worksheets("otchet").Cells(rowX, 2)
                  Else
                  
                  Worksheets("otchet").Cells(rowX, 2) = "нет данных"
                  End If
         
               
                    End If
                    Next
       
        End If
                    Next
        
                  
                ' èùåì íîìåð êîëîíêè â íóæíîì ëèñòå
                
                   
                   ' If Z = 0 Then
                   ' Z = Worksheets("trips").Range("a1:z1").Find(What:=y).Column
                   ' End If
        '            Sheets("info").Cells(num, Z).Copy Destination:=Worksheets("otchet").Cells(rowX, 2)
        '            Sheets("meetings").Cells(num, Z).Copy Destination:=Worksheets("otchet").Cells(rowX, 2)
                            'Sheets("info").Cells(a, 3).Copy Destination:=Worksheets("otchet").Range("b3")
                            'Sheets("info").Cells(a, 4).Copy Destination:=Worksheets("otchet").Range("b4")
           
       '    Else:
       '    If Worksheets("otchet").Cells(b, 2).Value <> "" Then
       '    Worksheets("otchet").Cells(b, 2).Value = "íåò äàííûõ"
       '    End If
          ' End If
        '   Next
            
   
   '    For v = 1 To 180
    '       If Sheets("info2").Cells(v, 2).Value = Worksheets("otchet").Range("B1") Then
  '         Sheets("info2").Cells(v, 3).Copy Destination:=Worksheets("otchet").Range("b11")
   '        End If
       
  
    ' y1 = Worksheets("meetings").Range("a1:a200").Find(What:=country).Row
   '  y2 = Worksheets("keys").Range("a1:z10").Find(What:=X).Column
   ' y = Worksheets("keys").Cells(y1, y2 + 1).Value
    ' Z = Worksheets("meetings").Range("a1:z1").Find(What:=y).Column
  
  Dim nums()
  
  For h = 2 To 185
           If Sheets("rows").Cells(h, 1).Value = Worksheets("rows").Range("B1") Then
   
   nums()=. Sheets("rows").Cells(h, 1).Row
  
  End If
  Next
  
End Sub

решил все же выложить свои потуги для понимания достигнутого уровня за ночь... ну и чтоб не совсем нахлебник... большая часть работает, но с массивом полная чепуха... сорри названия листов тут несколько отличаются...
Изменено: Dmivanov - 29.07.2013 10:17:34
 
Откуда для Твери взялись значения ff, rr, ii для столбца "В"?
 
Если листинг большой, то выкладывайте его в виде txt-файла или прячьте под спойлер.
 
Цитата
Юрий М пишет:
Откуда для Твери взялись значения ff, rr, ii для столбца "В"?
из листа info. Там просто идет подборка по "координатам". Когда два аргумента топором но сделал.
Проблема с условной вкладкой meetings, когда название города встречается более одного раза, плюс идет доп. связка инфо 1(2, 3) и информация - эти две ячейки также взаимоувязаны...
 
Dmivanov,

Не знаю насколько поможет в данной ситуации данный макрос, но я им пользуюсь для сборки листов (он тупо добавляют всю информацию со всех листов по порядку на новый лист), мне кажется, если добавить к нему "выбор данных по условию", то должно сработать.

Код
Изменено: Всеволод Сливчанский - 29.07.2013 10:56:37
 
А почему Вы считаете, что макрос "простенький"? Простенький - это [A] = [C1]  :)  
См. файл. Кнопка не нужна.
И исправляйте свой #2
 
Всеволод Сливчанский, перебор листов тут абсолютно ни к чему.
 
Был уверен, что простенький) спасибо за код.. буду сейчас поэтапно разбираться.. СПАСИБО!

Цитата
исправляйте свой #2
про #2 не совсем понял...
 
Цитата
Dmivanov пишет: про #2 не совсем понял...
Тогда ещё раз прочитайте #4
 
Эмм я правильно понимаю, что по alt+f11 там единственный код, что используется?
и больше нигде ничего переименовывать не надо?...
 
Это макрос на событие листа Worksheet_Change. Про какое переименовывание Вы говорите?
 
Да вот с ним малось и мучаюсь... не понимают откуда берется Target и поскольку в примере цифры (количество) колонок, строк абсолютное, приходится лавировать... надеюсь, что смогу дальше сам разобраться...
 
Цитата
Dmivanov пишет: не понимают откуда берется Target
Кто не понимает? )) Target - целевая ячейка, изменение в которой мы отслеживаем.
 
мне крайне стыдно...я во всем разобрался, кроме одного момента(((
я уже все как мне кажется варианты перепробовал - в оригинале оказалось 4 "фамилии" и потом информация..
ввиду четности я уже какие комбинации не перепробовал...
есть вариант, что такие столбцы будут добавляться... можно ли уйти от абсолютных чисел?
 
Ну вот почему СРАЗУ нельзя было сказать, что число столбцов - величина переменная? Почему?!
См. файл.
 
Dmivanov, почитайте, наконец, 4-е сообщение!
Страницы: 1
Наверх