Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/43: Рейтинг темы: голосов - 43, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 7

Подгрузка данных из нескольких таблиц в одну

15.05.2012, 08:35. Показов 8622. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, профессионалы экстра класса!
Требуется помощь в написании макроса по переносу данных из нескольких таблиц в сводную!
Есть 64 таблицы одинаковых по структуре, но с различными данными (город 1.xls), и есть единая таблица для всех городов (итоговая.xls). Раз в месяц требуется перебивать данные из «мелких» в итоговую. В ручную это долго и к сожалению, в силу человеческого фактора, очень много ошибок при перекопированнии. Прошу помощи в автоматизации данного процесса. Копирование данных нужно производить только в неокрашенных ячейках. Листы в итоговой соответствуют названиям разделов в «мелкой».
Пробовала использовать макрорекодер (приравнивала ячейки), код получается многотысячный, а как всё оптимизировать не знаю
Заранее благодарю))
Вложения
Тип файла: zip таблицы.zip (24.0 Кб, 65 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.05.2012, 08:35
Ответы с готовыми решениями:

Копирование данных из нескольких таблиц в одну
Доброго времени суток. Передо мной стоит задача: есть книга, в которой содержится N-ное количество листов, на каждом листе находится...

Объединение нескольких таблиц в одну
Добрый день! Excel'ем приходится пользоваться нечасто, поэтому прошу не пинать :) Суть задачи: Есть несколько таблиц с...

Сбор данных с разных xls таблиц в одну итоговую таблицу
Написан скрипт для сбора данных с разных xls таблиц в одну итоговую таблицу, но почему в итоговой таблице не выводит, подскажите что не так...

12
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
15.05.2012, 08:48
Цитата Сообщение от black_cat Посмотреть сообщение
Листы в итоговой соответствуют названиям разделов в «мелкой».
поверьте на слово - это не так.

файлв с городами находятся в одной папке? там только эти файлы или еще какие-нибудь? список городов есть? есть ли в имени файла с городом и в итоговом файле привязка к месяцу/году?
0
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 7
15.05.2012, 09:02  [ТС]
Цитата Сообщение от ikki_cf Посмотреть сообщение
поверьте на слово - это не так.

файлв с городами находятся в одной папке? там только эти файлы или еще какие-нибудь? список городов есть? есть ли в имени файла с городом и в итоговом файле привязка к месяцу/году?
Верю на слово, глазам своим не поверила

1.файлы с городами в отдельной папке (города и районы)
2.список городов числовой от 1101 до 1164
3.в итоговом файле привязки к месяцу и году нет.
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
15.05.2012, 09:30
ок.
можно сделать примерно так:
макрос будет в цикле открывать поочередно нужные "мелкие" файлы, копировать нужные данные в итоговый, закрывать "мелкие".
варианты (выберите нужный):
1) макрос всегда в цикле перебирает все возможные файлв с городами. вопрос - что делать, если какого-нибудьфайла не будет?
2) пользователю выдается диалоговое окно, он выбирает в нем несколько нужных файлов, макрос работает с ними

по листам:
предлагаю ничего не менять в именах листов - все равно у Вас есть случаи, когда на один лист должны попасть данные из разных строк "мелких" файлов. лучше один раз сделать табличку соответствия - какая строка "мелкого" на какой лист и в какой столбец итогового должна копироваться.
в связи с этим вопрос: таблицы в "мелких" всегда одинаковы и не меняются по структуре? строки/столбцы не поедут? номера в столбце F - это просто № строки по порядку или он привязан к наименованию раздела? может быть, можно привязаться именно к этим номерам? или лучше - к наименованиям?

по именам файлов:
до меня всё-таки не дошло - имена файлов такие: "1101.xls", "1102.xls",.. или такие: "город 1101.xls", "город 1102.xls",.. ?

пс. да, я знаю - я до неприличия любопытен
1
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 7
15.05.2012, 10:22  [ТС]
Ваше неприличие меня радует, большое количество вопросов дает возможность правильно поставить задачу, спасибо Вам за это.

Макрос должен выполняться при нажатии на кнопку. В отчетный период данные в мелких файлах раз 10 в день могут смениться(( Мелкие файлы будут присутствовать все обязательно, пользователь за этим будет следить. Как вариант близок второй))

Таблица в мелких файлах по городам неизменна, изменяться будут только числовые значения, остальные ячейки будут защищены от записи. Номера в столбце F, просто номер по порядку, лучше все привязать к наименованиям.
Имена файлов "1101.xls", "1102.xls", но 64 это не предел, количество их может увеличиться(( прошу не привязывать в итоговой таблице к наименованию подразделения, там тоже иногда придется менять
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
15.05.2012, 13:29
в качестве первого приближения )
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
Option Explicit
 
Sub myConsolidate()
  Dim fto
  Dim wbThis As Workbook, wb As Workbook, wsMy As Worksheet, ws As Worksheet
  Dim i&, j%, sWbName$, sShtName$, sColName$, sRegName$
  Dim sText$, c As Range, cMy As Range, cRegion As Range, lr&
  
  On Error Resume Next
  
  Set wbThis = ThisWorkbook
  Set wsMy = wbThis.Worksheets("my")
  Application.ScreenUpdating = False
  
  If Len(wsMy.[myPath].Value) Then ChDir wsMy.[myPath].Value
  fto = Application.GetOpenFilename _
      (FileFilter:="Microsoft Excel Files (*.xls), *.xls", _
      MultiSelect:=True, Title:="выберите файлы с регионами")
  If TypeName(fto) = "Boolean" Then
    MsgBox "файл(ы) не выбран(ы)!"
    GoTo ExitHandler
  End If
  
  For i = 1 To UBound(fto)
    Workbooks.Open Filename:=fto(i)
    Set wb = ActiveWorkbook: sRegName = Left(wb.Name, Len(wb.Name) - 4)
    Set ws = wb.Worksheets(1)
    For j = 2 To wsMy.[myTable].Rows.Count
      If wsMy.[myTable].Cells(j, 1) = "" Then Exit For
      sShtName = wsMy.[myTable].Cells(j, 1).Value
      sColName = wsMy.[myTable].Cells(j, 2).Value
      sText = wsMy.[myTable].Cells(j, 3).Value
      Set c = ws.UsedRange.Find(what:=sText, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=True)
      If c Is Nothing Then Exit For
      With wbThis.Worksheets(sShtName)
        Set cMy = .Rows(2).Find(what:=sColName)
        If cMy Is Nothing Then Exit For
        lr = .Cells(.Rows.Count, 1).End(xlUp).Row
        If lr < 5 Then
          lr = 5
        Else
          Set cRegion = .Range(.[a4], .Cells(lr, 1)).Find(what:=sRegName)
          If cRegion Is Nothing Then lr = lr + 1 Else lr = cRegion.Row
        End If
        .Cells(lr, 1).Value = sRegName
        .Cells(lr, cMy.Column).Resize(1, 6).Value = ws.Cells(c.Row, 7).Resize(1, 6).Value
      End With
    Next
    wb.Close False
  Next
ExitHandler:
End Sub
добавлен лист "my" со служебной информацией. его можно скрыть.

работаем так: открываем файл "итоговая.xls", запускаем в нем макрос (по Alt+F8, кнопку не рисовал)
выбираем нужные файлы, жмём "Открыть".
Вложения
Тип файла: zip black_cat.zip (55.6 Кб, 105 просмотров)
0
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 7
16.05.2012, 11:31  [ТС]
Спасибо большое, всё очень красиво))только все с точностью до наоборот...
1.копирование данных должно производиться в ячейки без цвета, в зеленых ячейках уже стоят формулы, их убирать не нужно.
2. и "наименование подразделения" устанавливается в соответствии с именем файла, что не нужно было, имя файла меняться не будет, а вот имя подразделения возможно...
3. и файлы должны как то перезаписываться что ли...вообщем не могу это объяснить, вообщем 10 раз добавил один город, и получилась 10 строк((, а должна быть одна с обновленными данными

А вообще-то Вы просто молодецпросто я же женщина, объяснить такие вещи мне сложно)))
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
16.05.2012, 12:27

Цитата Сообщение от black_cat Посмотреть сообщение
1.копирование данных должно производиться в ячейки без цвета, в зеленых ячейках уже стоят формулы, их убирать не нужно.
:cofee2: цвет ячеек в макросе вообще не учитывается. заполните табличку на листе "my" нужными Вам названиями - они и будут переноситься из файлов.
Цитата Сообщение от black_cat Посмотреть сообщение
2. и "наименование подразделения" устанавливается в соответствии с именем файла, что не нужно было, имя файла меняться не будет, а вот имя подразделения возможно...
про подразделения вообще первый раз слышу. но всё равно не понял.
Цитата Сообщение от black_cat Посмотреть сообщение
3. и файлы должны как то перезаписываться что ли..., должна быть одна с обновленными данными
ну... как бы... так оно и сделано - обновляется, если такая строка уже есть, и добавляется, если нету.
0
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 7
16.05.2012, 13:04  [ТС]
Цитата Сообщение от ikki_cf Посмотреть сообщение

:cofee2: цвет ячеек в макросе вообще не учитывается. заполните табличку на листе "my" нужными Вам названиями - они и будут переноситься из файлов.
с этим разобралась)))
Цитата Сообщение от ikki_cf Посмотреть сообщение
про подразделения вообще первый раз слышу. но всё равно не понял.
в итоговой таблице есть столбец, называется наименование подразделения, при добавлении мелкой, наименование меняться не должно, а оно выставляется в соответствии с именем мелкого файла
Цитата Сообщение от ikki_cf Посмотреть сообщение
ну... как бы... так оно и сделано - обновляется, если такая строка уже есть, и добавляется, если нету.
проверила, да Вы абсолютно правы, я сама невнимательность
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
16.05.2012, 13:46
Цитата Сообщение от ikki_cf Посмотреть сообщение
заполните табличку на листе "my" нужными Вам названиями - они и будут переноситься из файлов.
я немножко сжульничал (невольно, честное слово!)
оказывается, у Вас таблички в "итоговой" немного разные - где-то шесть столбцов, где-то три... надо менять вот это место:
Visual Basic
1
.Cells(lr, cMy.Column).Resize(1, 6).Value = ws.Cells(c.Row, 7).Resize(1, 6).Value
если нужна помощь - пишите.

Цитата Сообщение от black_cat Посмотреть сообщение
есть столбец, называется наименование подразделения, при добавлении мелкой, наименование меняться не должно, а оно выставляется в соответствии с именем мелкого файла
а как и где они связаны между собой?

пс. данные из таблички в "my" берутся, на самом деле, из диапазона myTable. поэтому, если разлинованного сейчас кусочка не хватит, то вставлять новые строки нужно перед последней строкой, либо переопределить имя myTable.
0
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 7
17.05.2012, 06:19  [ТС]
Цитата Сообщение от ikki_cf Посмотреть сообщение
я немножко сжульничал (невольно, честное слово!)
оказывается, у Вас таблички в "итоговой" немного разные - где-то шесть столбцов, где-то три... надо менять вот это место:
Visual Basic
1
.Cells(lr, cMy.Column).Resize(1, 6).Value = ws.Cells(c.Row, 7).Resize(1, 6).Value
если нужна помощь - пишите.
Спасибо большое, но мне же тоже что-то нужно сделать, так что я я приведу итоговую в соответствие с мелкой и всё будет чудненько)))

Цитата Сообщение от ikki_cf Посмотреть сообщение
а как и где они связаны между собой?

пс. данные из таблички в "my" берутся, на самом деле, из диапазона myTable. поэтому, если разлинованного сейчас кусочка не хватит, то вставлять новые строки нужно перед последней строкой, либо переопределить имя myTable.
и с этим я просто добавлю один столбец с наименованиями подразделений и проблема уйдет))


И еще просьба, а можно сделать так чтобы в итоговой таблице при добавлении городов строки 13,35,45,51,66,74,75,82,83 пропускались, я хочу там суммирование сделать по регионам, чтобы нагляднее было))


и еще ...всё таки какой же Вы молодец
0
призрак
 Аватар для ikki
3266 / 894 / 119
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
17.05.2012, 09:12
Цитата Сообщение от black_cat Посмотреть сообщение
при добавлении городов строки 13,35,45,51,66,74,75,82,83 пропускались, я хочу там суммирование сделать по регионам
и как Вы себе это представляете?
точнее - не вижу ни нужды такой, ни проблемы

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

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

красиво было бы, да?
1
0 / 0 / 0
Регистрация: 15.05.2012
Сообщений: 7
17.05.2012, 10:55  [ТС]
еще как красиво))ладно, и так все супер замечательно...расцеловала бы Вас, за Вашу помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.05.2012, 10:55
Помогаю со студенческими работами здесь

SQL запрос в VBA на выборку данных из нескольких таблиц mdb
Добрый день. Есть база mdb с несколькими таблицами: Регистр - общая таблица с хранением операций деятельности предприятия. Поля...

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

Вывод данных из нескольких таблиц в одну
Здравствуйте. Требуется построить запрос, что бы из таблиц Bloki_Pitaniya, Jestkie_Diski, Korpusa, Materinskie_Plati, Operativnaya_Pamyat,...

Запрос на выборку данных из нескольких таблиц в одну
Здравствуйте! В общем, проблема такая.. Нужно мне составить отчет, который содержит данные из нескольких таблиц. С этим проблем нет,...

Объединение нескольких таблиц в одну
вот есть 5 таблиц test_1,test_2.....5 , у них всего два поля id(autoincrement) и word(varchar(50)) и есть таблица test тоже с такими же...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru