Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
259 / 7 / 1
Регистрация: 22.01.2013
Сообщений: 47

Копирование данных с определённого массива с несколько листов в один

14.02.2013, 17:20. Показов 3100. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите исправить ошибку в макросе:
значит есть несколько листов в 1 файле, нужно скопировать массив $A$1:$Q$4, из листов 17 по 67 либо указав название листов, на второй лист текущей книги.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Option Explicit
 
Sub ConsolidatedRangeOfBrandsAndRegions()
    
    Dim iBeginRange As Object, lCalc As Long, lCol As Long
    Dim sCopyAddress As String, sSheetName As String
    Dim oAwb As String, lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer
    Dim wsSh As Object, wsDataSheet As Object, bPolyBooks As Boolean, avFiles
    Dim s, N As Integer
    Dim shtname As Variant
    On Error Resume Next
    
'   1. Выбираем диапазон выборки с книг
    Set iBeginRange = Range("$A$1:$Q$4")
'   2. Указываем листы для сбора
    N = 17
    For s = 1 To Application.Worksheets.Count
    Worksheets(N).Activate
    shtname = ActiveSheet.Name
'   3. Указываем имя листа. Допустимо указывать в имени листа символы подставки ? и *.
'   Если указать только * то данные будут собираться со всех листов
'    sSheetName = ("Винница" "Волынь" "Днепр" "Донецк" "Житомир" "Закарпатье" _
'        "Запорожье" "Ив-Франковск" "Киев" "Кировоград" "Крым" "Луганск" "Львов" _
'        "Николаев" "Одесса" "Полтава" "Ровно" "Сумы" "Тернополь" "Харьков" "Херсон" _
'        "Хмельницкий" "Черкассы" "Чернигов" "Черновцы")
'   5. Если имя листа не указано - данные будут собраны со вех листов
'    If sSheetName = "" Then sSheetName = "*"
'    On Error GoTo 0
    avFiles = Array(ThisWorkbook.FullName)
'   8. Указываем куда собирать данные. Либо создаём новый лист в книге для сбора после
'   текущего листа After:=ActiveSheet либо в конец After:=Sheets(Sheets.Count)
'    ThisWorkbook.Sheets.Add After:=ActiveSheet
'    Set wsDataSheet = ThisWorkbook.ActiveSheet
    Set wsDataSheet = ThisWorkbook.Worksheets(2)
'   9. цикл по книгам
    For li = LBound(avFiles) To UBound(avFiles)
        If bPolyBooks Then Workbooks.Open Filename:=avFiles(li)
        oAwb = Dir(avFiles(li), vbDirectory)
        '10. цикл по листам
        For Each wsSh In Workbooks(oAwb).Sheets
            If wsSh.Name Like sSheetName Then
                '11. Если имя листа совпадает с именем листа, в который собираем данные
                'и сбор идет только с активной книги - то переходим к следующему листу
                If wsSh.Name = wsDataSheet.Name And bPolyBooks = False Then GoTo NEXT_
                With wsSh
                    Select Case iBeginRange.Count
                    Case 1 '12. собираем данные начиная с указанной ячейки и до конца данных
                        lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row
                        If lLastrow > 4 Then lLastrow = 4
                        iLastColumn = .Cells.SpecialCells(xlLastCell).Column
                        sCopyAddress = .Range(.Cells(iBeginRange.Row, iBeginRange.Column), .Cells(lLastrow, iLastColumn)).Address
                    Case Else
'   13. собираем данные с фиксированного диапазона
                        sCopyAddress = iBeginRange.Address
                    End Select
                    lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1
'   14. вставляем имя книги и листа, с которой собраны данные
'                    If lCol Then wsDataSheet.Cells(lLastRowMyBook, 1).Resize(Range(sCopyAddress).Rows.Count).Value = oAwb + "\" + wsSh.Name
                    If lCol Then wsDataSheet.Cells(lLastRowMyBook, 1).Resize(Range(sCopyAddress).Rows.Count).Value = wsSh.Name
                    .Range(sCopyAddress).Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol)
                End With
            End If
NEXT_:
        Next wsSh
        If bPolyBooks Then Workbooks(oAwb).Close False
    N = N + 1
    Next li
    
'   15. переименовываем лист с данными
'   ThisWorkbook.Worksheets(2).Name = "fdata"
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2013, 17:20
Ответы с готовыми решениями:

Копирование данных со всех листов на один по условию
Добрый день, подскажите пожалуйста решение задачи, нужно перенести данные со всех листов со столбцов А, В и С на последний лист при...

Копирование данных с одного листа на несколько других листов
В общем, есть код который должен копировать данные из одного листа на несколько других листов. Вот он: Sub CopyToOtherSheet() Dim WS As...

Копирование диапазона из двух книг в одну (несколько листов)
Здравствуйте. Хочу попросить помощи в решении одной задачи в Excel 2010. Пытаюсь создать макрос, который бы подтягивал в книгу...

1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
14.02.2013, 19:36
undefined7, замечание по коду, не связанное с вашей задачей. В VBA нужно указывать тип данных для каждой переменной, иначе в переменной будет тип данных Variant:
Visual Basic
1
Dim s As Integer, N As Integer
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.02.2013, 19:36
Помогаю со студенческими работами здесь

Копирование строк с разных листов в один с определенным условием
Уважаемые, помогите, пожалуйста, если это возможно! есть книга из нескольких листов с одинаковыми таблицами и постоянным добавление...

Как объединить несколько столбцов с разных листов в один?
Привет! Надо чтобы на отдельном листе автоматически формировался столбец, который объединяет в себе конкретные столбцы из других листов...

Копирование данных листов между разными книгами
Еще раз здравствуйте. Заканчивается моя работа с VBA. Остался последний вопрос. Имеем: Книга А, у нее есть Лист с названием...

Копирование данных с разных листов файла Excel
Всем привет. Подскажите, пожалуйста, как скопировать данные с одного файла Excel имеющего два (и более) листов? У меня в файле два...

Копирование данных с нескольких листов с по двойному клику мыши
Помогите написать макрос для копирования данных в лист "Заказ" по двойному клику мыши по цене товара


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru