Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/55: Рейтинг темы: голосов - 55, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 27
1

Объединить листы excel в один

04.08.2015, 16:48. Показов 10877. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток! Еще раз нуждаюсь в вашей помощи!

Нужен макрос для объединение разных таблиц (книг) excel в один как в примере.
Заранее спасибо кто откликнется)!
Вложения
Тип файла: xlsx Пример.xlsx (11.4 Кб, 46 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2015, 16:48
Ответы с готовыми решениями:

Копировать листы из файлов Excel в один файл Excel
Добрый день, господа! Помогите создать макрос, для того чтобы собрать(скопировать) листы из разных...

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

Создать листы с названиями из списка (Excel)
Подскажите пожалуйста, как создать листы с названиями из списка? Причем список в одной книге, а...

Блокировать листы в Excel после определенной даты
Добрый день, Искала на просторах интернета решения по данному вопросу, но к сожалению конкретного...

13
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
04.08.2015, 18:24 2
Лучший ответ Сообщение было отмечено Tumatayev как решение

Решение

Кликните здесь для просмотра всего текста
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
Option Base 1
Sub copyUnion()
Dim firstBook As Workbook
Dim secondBook As Workbook
Dim thirdBook As Workbook
Set secondBook = ActiveWorkbook
Set firstBook = Workbooks.Open("D:\\file1.xlsx")
Set thirdBook = Workbooks.Open("D:\\file3.xlsx")
Dim mass(15, 2)
For i = 1 To 15
    For j = 1 To 2
        mass(i, j) = firstBook.Sheets(1).Cells(i, j)
    Next
Next
secondBook.Sheets(1).Activate
secondBook.Sheets(1).Range("A1:D19").Copy
thirdBook.Sheets(1).Activate
thirdBook.Sheets(1).Range("B1").Select
ActiveSheet.Paste
thirdBook.Sheets(1).Range("B1:B19").Copy
thirdBook.Sheets(1).Range("A1").Select
ActiveSheet.Paste
For i1 = 1 To 20
    For k1 = 1 To 15
        If thirdBook.Sheets(1).Cells(i1, 1) = mass(k1, 1) Then Cells(i1, 1) = mass(k1, 2)
    Next
Next
End Sub

Во вложении работающий пример. Файлы file1 и file3 поместите в корень диска D или пропишите новые пути к ним в коде. Макрос находится в file2 и запускается кнопкой.
Вложения
Тип файла: rar CopyPaste.rar (23.8 Кб, 43 просмотров)
2
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 27
05.08.2015, 07:49  [ТС] 3
У меня одна проблема(
Где я допустил ошибку? я только размер таблиц поменял! а он мне копирует не с первый таблицы города а со второй ID
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
Option Base 1
Sub copyUnion()
Dim firstBook As Workbook
Dim secondBook As Workbook
Dim thirdBook As Workbook
Set secondBook = ActiveWorkbook
Set firstBook = Workbooks.Open("C:\\ALL.xlsx")
Set thirdBook = Workbooks.Open("C:\\File.xlsx")
Dim mass(1099, 2)
For i = 1 To 1099
    For j = 1 To 2
        mass(i, j) = firstBook.Sheets(1).Cells(i, j)
    Next
Next
secondBook.Sheets(1).Activate
secondBook.Sheets(1).Range("A1:D31673").Copy
thirdBook.Sheets(1).Activate
thirdBook.Sheets(1).Range("B1").Select
ActiveSheet.Paste
thirdBook.Sheets(1).Range("B1:B31673").Copy
thirdBook.Sheets(1).Range("A1").Select
ActiveSheet.Paste
For i1 = 1 To 31673
    For k1 = 1 To 1099
        If thirdBook.Sheets(1).Cells(i1, 1) = mass(k1, 1) Then Cells(i1, 1) = mass(k1, 2)
    Next
Next
End Sub
И получилась на третей таблице "ID, ID, Name, Car, Number" а не "City, ID, Name, Car, Number"
0
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
05.08.2015, 08:14 4
Сначала действительно должны происходить копирование и вставка столбца ID, чтобы скопировать форматирование ячеек, потом же идет цикл, который заменяет значения скопированного столбца ID на значения столбца City. У вас только заголовок не заменяется или все значения остаются из ID?
2
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 27
05.08.2015, 08:25  [ТС] 5
Только заголовок меняется а значение остается от ID
0
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
05.08.2015, 08:38 6
На первый взгляд, всё правильно написано. Возможно у вас какое-то другое форматирование ячеек в таблице первой книги. Поэтому макрос их перебирает, сравнивает со второй и воспринимает как разные. Поэтому и не меняет. Вы можете выложить сделанные файлы в архиве? Или хотя бы скопировать в один файл строчек по пять первых двух столбцов всех трех таблиц. Только чтобы копии были точно такие же как оригиналы в ваших файлах.
2
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 27
05.08.2015, 16:17  [ТС] 7
Все варианты форматов перепробовал, не получается(
Еще сам добавил доп. функцию "если совпадении нет то выводит Empty"
макрос и без этой функции не наработал
0
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 27
05.08.2015, 16:20  [ТС] 8
файл
Вложения
Тип файла: zip file1.zip (1.78 Мб, 10 просмотров)
0
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
05.08.2015, 17:21 9
Вы немного переоценили возможности быстродействия компьютера. Вы хотите чтобы он произвел 2 669 653 824 операций сравнения + вставка значений и просто не можете дождаться, когда он закончит работу А так всё работает правильно. Кроме того, у вас в таблице листа 2 есть значения, которых нет в таблице листа 1 - в этом случае в первой графе таблицы листа 3 остается значение второй графы. Я попытаюсь облегчить компьютеру задачу, но возможно процесс всё равно будет достаточно долгим.
2
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
05.08.2015, 18:00 10
Вот держите file2 с исправленным макросом. Работает около 4 минут. Сделать, чтобы работал еще быстрее не смогу И обратите внимание, что в файле 1 далеко не все ID из второго. Поэтому в таблице третьего файла есть одинаковые значения в 1 и 2 столбце.
Вложения
Тип файла: rar file2.rar (944.9 Кб, 12 просмотров)
1
Модератор
Эксперт MS Access
12084 / 4944 / 791
Регистрация: 07.08.2010
Сообщений: 14,523
Записей в блоге: 4
05.08.2015, 19:01 11
Лучший ответ Сообщение было отмечено Tumatayev как решение

Решение

у вас небольшие значения кодового слова
я применила бы массив
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
Sub copyUnion()
Dim firstBook As Workbook
Dim secondBook As Workbook
 
Dim ws1 As Worksheet
Dim ws2 As Worksheet
 
Dim i, i1, j, j2, s1, spath, dt1
dt1 = Timer
spath = Excel.ActiveWorkbook.Path & "\"
Set secondBook = ActiveWorkbook
Set firstBook = Workbooks.Open(spath & "file1.xlsx")
Set ws1 = firstBook.Sheets(1)
Set ws2 = secondBook.Sheets(1)
 
Dim mass(200000) As Long
For i = 2 To 200000
     j = ws1.Cells(i, 1)
     If j > 0 Then
     mass(j) = ws1.Cells(i, 2)
Else
Debug.Print i, ws1.Cells(i, 1)
End If
Next
 
 
 
For i1 = 2 To 31673
j2 = Val("0" & ws2.Cells(i1, 1))
If j2 > 1 Then
    s1 = mass(j2)
    If s1 > 0 Then
      ws2.Cells(i1, 6) = s1
    Else
      ws2.Cells(i1, 6) = "Empty"
      Debug.Print i1;
    End If
    End If
    Next
    Debug.Print
Debug.Print "время выполнение="; (Timer - dt1) \ 1; " sek"
''21sek
''надо доработать для объединенных ячеек
End Sub
2
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
05.08.2015, 22:31 12
Лучший ответ Сообщение было отмечено Tumatayev как решение

Решение

shanemac51, идея бесподобна , правда сначала мозг остановился, пытаясь понять, но потом дошло Жаль, что рано "спасибо" поставил - отзыв уже не берет
Hugo121, спасибо за код цикла по объединенным ячейкам Цикл по колонке содержащей объединенные ячейки
Tumatayev, как видите, я не один на форуме
Цитата Сообщение от Tumatayev Посмотреть сообщение
Спасибо огромное! Кажится только вы в форуме)))
Общими усилиями работает 40 секунд.
Вложения
Тип файла: rar file2_1.rar (945.7 Кб, 70 просмотров)
2
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 27
06.08.2015, 07:31  [ТС] 13
chumich, shanemac51
Спасибо огромное! Выручили от большой работы, и я свободен))) и как раз можно изучить VB) подскажите оптимальный источник знаний?)
0
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
06.08.2015, 07:36 14
Цитата Сообщение от Tumatayev Посмотреть сообщение
подскажите оптимальный источник знаний?)
Tumatayev, тут уж для каждого свой Смотрите и выбирайте, что вам подойдет: Учебники, справочники, самоучители
2
06.08.2015, 07:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.08.2015, 07:36
Помогаю со студенческими работами здесь

Вставить в Excel 2010 рисунки из папки в отдельные листы
Здравствуйте! Помогите пожалуйста написать макрос в Excel 2010: По нажатию кнопки находится папка,...

Как определить какие листы в книге Excel выделил пользователь?
Есть такая задача: пользователь выделяет несколько листов, а далее программно в них вставляются...

По содержимому столбца создать листы и в эти листы скопировать соответствующие строки
Здравствуйте, уважаемые Форумчане!!! Есть задачка: В прикреплённом файле есть табличка. Надо по...

Excel: как выделить все листы, находящиеся между заданными листами?
эта команда - Sheets(Array("zayavki", "list3")).Select - выделяет только обозначенные листы в...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru