Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2016, 16:12   #1
uncredow
Новичок
Джуниор
 
Регистрация: 18.02.2016
Сообщений: 1
По умолчанию Вывод необходимой информации из ста+ разных листов в один

Добрый день!

Уважаемые эксперты, подскажите, пожалуйста как можно реализовать в excel следующие действия:

К примеру:
Имеется:
1. Один файл со ста разными листами
2. Каждый лист является отдельным расчетом кадастровых работ по определенной улице.
3. В каждом листе есть итог (фраза в ячейке - "Итого по смете:"), который может находиться из-за криворукости исполнителей в разных ячейках:
-Лист 1 ячейка E19
-Лист 2 ячейка D23
-Лист 3 ячейка F409
и тд.

Нужно:
1. Чтобы искал во всех листах книги значение ячейки "Итого по смете"
2. Сводил найденные данные в новый лист построчно, начиная с ячейки где текст "Итого по смете" и двадцать ячеек из каждого листа , которые на этой же строке.

Есть небольшой макрос, но в нем проблема:
1. Ищет исключительно в столбцах A и B
2. Вносит данные из строки только 11 ячеек.
3. Если данные после ячейки "Итого по смете" повторяются, то еще одна строка в новом листе не добавляется.
4. Если на листе сразу два адреса с ячейкой "Итого по смете", то он переносит только первую строку, игнорируя вторую.


Я в этом не очень силен, прошу вашей помощи, таких файлов прилетело порядка 400 штук, в которых по 100-200 листов.
Вручную копировать мизинец с указательном пальцем немеют, а через макрос то и дело бывает, что на разные адреса итоговая смета с одинаковыми данными.


Код:
Sub собрать()
  Dim Dic As Object, i&, j&, Row&, cRow&, cCol&, tmp, s$
    Set Dic = CreateObject("Scripting.Dictionary")
    Dic.comparemode = 1
    cCol = Sheets.Count + 10
    ReDim mas(1 To 999, 1 To cCol)
    For i = 12 To cCol
        With Sheets(i - 11)
            tmp = .Range(.Cells.Find("Всего по смете").Offset(1), .Cells(Rows.Count, 12).End(xlUp)).Value
        End With
        For Row = 1 To UBound(tmp)
            s = tmp(Row, 1) & "|" & tmp(Row, 2) & "|" & tmp(Row, 3) & "|" & tmp(Row, 4) & "|" & _
                    tmp(Row, 5) & "|" & tmp(Row, 6) & "|" & tmp(Row, 7) & "|" & tmp(Row, 8)
            If Dic.exists(s) = False Then
                cRow = cRow + 1
                If cRow Mod 1000 = 0 Then ReDim Preserve mas(1 To cRow + 999, 1 To cCol)
                Dic(s) = cRow
                mas(cRow, 1) = cRow
                For j = 2 To 11: mas(cRow, j) = tmp(Row, j - 1): Next
            End If
            mas(Dic(s), i) = tmp(Row, 11)
        Next
    Next
    With Sheets(Sheets.Count).Cells(7, 1).Resize(cRow, cCol)
        .Value = mas
        .Borders.LineStyle = 1
    End With
End Sub
uncredow вне форума Ответить с цитированием
Старый 28.09.2016, 17:37   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

без файла бессильными могут оказаться даже те, кто в этом сильны

и если уже говорить об автоматизации процесса, то открыть 400 файлов и в каждом запустить макрос - это тоже работа! причем это такая работа, когда открыв 97-й файл Вы начинаете сомневаться, а не пропустил-ли я 96-й? не остался ли он не обсчитанным? и эта мысль будет появляться стабильно все чаще по мере обработки файлов.

в идеале запускаете макрос, указываете папку, где лежат данные, а дальше макрос по очереди открывает, производит расчеты и закрывает файлы, а Вы откладываете в сторону мышку, вместо нее берете пиво, и удобно откинувшись на спинку кресла, ждете окончания работы макроса
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сбор данных с разных листов на один Сталкер18 Microsoft Office Excel 3 14.05.2015 10:24
Вывод необходимой информации из файла, в виде таблицы memphis92 PHP 0 12.06.2013 22:05
копирование значений ячеек с разных листов в один moose123 Microsoft Office Excel 8 30.04.2013 13:04
Сборка листов из разных файлов в один Vja4eslav Microsoft Office Excel 8 17.08.2011 16:30
Сведение данных с разных листов, в один. ogololobov2009 Microsoft Office Excel 2 24.01.2011 18:31