Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
5 / 4 / 1
Регистрация: 03.04.2018
Сообщений: 113
1

Перенести значения из одной таблицы в другую, если они соответствуют условиям

02.12.2020, 13:37. Показов 3398. Ответов 10

Author24 — интернет-сервис помощи студентам
Приветствую всех, кто зашел в данную тему!
Имеется книга Excel с одним листом
На данном листе находятся две таблицы, нужно перенести данные из правой таблицы в левую, если они подходят условиям.
Написал код, который перебирает поочередно все эти столбцы и строки и сравнивает, но почему-то не работает, файл будет прикреплен к сообщению.
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
Public Sub Inp()
Worksheets("Table").Select
Application.ScreenUpdating = True
Dim Cup As String
LR = Cells(Rows.Count, 20).End(xlUp).Row
For I = 2 To LR 'левая таблица
    For Z = 2 To LR 'правая таблица
        If InStr(1, Cells(I, 2), Cells(Z, 21), 1) > 0 Then 'линия
            If InStr(1, Cells(I, 3), Cells(Z, 23), 1) > 0 Then 'первое словосочетание
                If InStr(1, Cells(I, 4), Cells(Z, 24), 1) > 0 Then 'второе словосочетание
                    For x = 5 To 19 'условие
                        If InStr(1, Cells(1, x), Cells(Z, 22), 1) > 0 Then 'условие
                        Sheets("Table").Activate
                        'ActiveSheet.Cells(l, x) = Range("Y" + CStr(Z))
                        ActiveSheet.Cells(CStr(l), CStr(x)) = Range("Y" + CStr(Z))
                        End If
                    Next
                End If
            End If
        End If
    Next
Next
End Sub
Миниатюры
Перенести значения из одной таблицы в другую, если они соответствуют условиям  
Вложения
Тип файла: zip Книга1.xlsm.zip (1.74 Мб, 2 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2020, 13:37
Ответы с готовыми решениями:

Как перенести значения из одной умной таблицы в другую
Здравствуйте. Помогите пожалуйста перенести данные из "Таблица1" в "Таблица2" с учетом того, что...

Скопировать значения одной таблицы в другую (они идентичны, но находятся на разных серверах)
Как скопировать значения одной таблицы в другую, при условии, что они идентичны но находятся на...

Перенос значения из одной таблицы в другую, если выполняется условие
всем привет. в Oracle не сильно силен. подскажите, как можно решить подобную задачку. Есть...

Перенести выборочные данные из одной бд в другую бд, когда они на разных серверах
Есть две mysql бд на разных серверах. Нужно сделать select с условием из таблицы в одной бд и...

10
2739 / 1714 / 778
Регистрация: 23.03.2015
Сообщений: 5,432
02.12.2020, 13:54 2
serviktor,
Цитата Сообщение от serviktor Посмотреть сообщение
LR = Cells(Rows.Count, 20).End(xlUp).Row
Это что?
0
5 / 4 / 1
Регистрация: 03.04.2018
Сообщений: 113
02.12.2020, 13:58  [ТС] 3
Считывает заполненные строки, чтоб цикл был со второй строки и до конца, пока не закончатся заполненные строки
0
2739 / 1714 / 778
Регистрация: 23.03.2015
Сообщений: 5,432
02.12.2020, 14:04 4
Лучший ответ Сообщение было отмечено serviktor как решение

Решение

serviktor,
У вас 20-ый столбец пустой....

Попробуйте чуть подправленный код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Sub Inp()
LR = Cells(Rows.Count, 21).End(xlUp).Row
MsgBox (LR)
For i = 2 To LR 'ëåâàß òàáëèöà
    For Z = 2 To LR 'ïðàâàß òàáëèöà
        If InStr(1, Cells(i, 2), Cells(Z, 21), 1) > 0 Then 'ëèíèß
            If InStr(1, Cells(i, 3), Cells(Z, 23), 1) > 0 Then 'çàêîí÷èëè
                If InStr(1, Cells(i, 4), Cells(Z, 24), 1) > 0 Then 'íà÷àëè
                    For x = 5 To 19 'óñëîâèå
                        If InStr(1, Cells(1, x), Cells(Z, 22), 1) > 0 Then 'óñëîâèå
                        Cells(i, x).Value = Cells(Z, 25).Value
                        End If
                    Next
                End If
            End If
        End If
    Next
Next
End Sub
1
5 / 4 / 1
Регистрация: 03.04.2018
Сообщений: 113
02.12.2020, 14:14  [ТС] 5
Цитата Сообщение от Narimanych Посмотреть сообщение
У вас 20-ый столбец пустой....
ТОЧНО! Спасибо большое, невнимательно посчитал номер столбца)

Добавлено через 6 минут
Цитата Сообщение от Narimanych Посмотреть сообщение
Cells(i, x).Value = Cells(Z, 25).Value
В таблице может быть и 40 тысяч строк, поэтому этот вариант сюда не подходит, и не совсем понимаю зачем тут 25 в Cells(Z, 25)
0
2739 / 1714 / 778
Регистрация: 23.03.2015
Сообщений: 5,432
02.12.2020, 14:38 6
serviktor,
Цитата Сообщение от serviktor Посмотреть сообщение
вариант сюда не подходит
Обоснуйте и покажите чем отличается это строка
от вашей
Цитата Сообщение от serviktor Посмотреть сообщение
ActiveSheet.Cells(CStr(l), CStr(x)) = Range("Y" + CStr(Z))
ну не считая дичи в вашем коде типа Cells(CStr(l), CStr(x))

Добавлено через 2 минуты
Цитата Сообщение от serviktor Посмотреть сообщение
В таблице может быть и 40 тысяч строк
Поверьте это не много....
0
5 / 4 / 1
Регистрация: 03.04.2018
Сообщений: 113
02.12.2020, 15:11  [ТС] 7
Цитата Сообщение от Narimanych Посмотреть сообщение
Обоснуйте и покажите чем отличается это строка
Пока расписывал Вам ответ - понял, что оказался не прав
У Вас написано Cells(Z, 25), а у меня Range("Y" + CStr(Z))
Первая цифра на сколько я помню - строка, вторая - столбец, это когда мы пишем Cells
А я пишу Range("Y" + CStr(Z))
И там и там строка - та, которая в цикле Z, а столбец Y - 25-й по счету
Так что опять прошу прощенья за невнимательность

Добавлено через 26 минут
Цитата Сообщение от Narimanych Посмотреть сообщение
Поверьте это не много
Прописываю значение LR вручную, потому что иначе Excel зависает и перестает отвечать. На 500 строк работает, а на 5000 - уже умирает. Может быть есть способ
избежать этого? Думаю написать еще один цикл, который изменял бы значения i и LR, но мне кажется это конкретные костыли и я сделаю только хуже
Можете подсказать что-нибудь по этому вопросу?
0
2739 / 1714 / 778
Регистрация: 23.03.2015
Сообщений: 5,432
02.12.2020, 15:15 8
serviktor,
Прикрепите ваш рабочий файл ( если в нем нет секретов)
0
5 / 4 / 1
Регистрация: 03.04.2018
Сообщений: 113
02.12.2020, 15:35  [ТС] 9
Цитата Сообщение от Narimanych Посмотреть сообщение
Прикрепите ваш рабочий файл
Вот:
Вложения
Тип файла: zip Книга.xlsm.zip (1.67 Мб, 12 просмотров)
0
2739 / 1714 / 778
Регистрация: 23.03.2015
Сообщений: 5,432
02.12.2020, 17:05 10
Лучший ответ Сообщение было отмечено serviktor как решение

Решение

serviktor,
У меня по времени около 4 минут...
Вложения
Тип файла: rar rrr.rar (3.18 Мб, 14 просмотров)
1
5 / 4 / 1
Регистрация: 03.04.2018
Сообщений: 113
02.12.2020, 17:28  [ТС] 11
Narimanych, премного благодарен, скорее всего надо было просто подождать подольше, а не вырубать через диспетчер зависший Excel
0
02.12.2020, 17:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2020, 17:28
Помогаю со студенческими работами здесь

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

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

Перенести данные с одной таблицы в другую.
Приветствую всех! Возникла проблема, помогите решить пожалуйста. Объединял конвертером сайт и...

Перенести данные из одной таблицы в другую
Здравствуйте! Скажите как сначала перенести данные из одной таблицы А, в таблицу B, которые...

Перенести информацию из одной таблицы в другую
Есть 2 базы данных VexnaMon.db3 и VexnaMon_150410_152155.db3. Первая база идет как хранилище ,...

Перенести данные из одной таблицы в другую
Добрый день. Подскажите, пожалуйста, как решить данную задачу. Есть 3 таблицы бд: table1(id_1,...


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

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