С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 18.01.2014
Сообщений: 10

Оптимизировать макрос, сравнивающий значения в столбцах двух различных таблиц Word

25.09.2014, 15:30. Показов 2126. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub sravnenie()
 
Dim i,j,iCount9, iCountn As integer
 
iCount9=ActiveDocument.Tables(9).Rows.Count
iCountn=ActiveDocument.Tables(1).Rows.Count
 
For i=2 to iCount9
  For j=2 to iCountn
  IF ActiveDocument.Tables(9).Colums(2).Cells(i).Range.Text=ActiveDocument.Tables(1).Colums(2).Cells(j).Range.Text Then
    ActiveDocument.Tables(1).Colums(10).Cells(j).Range.Text= "Да"
  End if
  Next j
Next i
 
End Sub
В word идет сравнение значений столбца 2 таблицы 9 со значениями столбца 2 таблицы 1. Если есть совпадение, в таблице 1 в столбце 10 записывается "Да". Но как-то макрос слишком долго выполняется, может до 2-х часов работать.
В одной таблице 700-строк, в другой где-то 1300
Непонятно почему так долго выполняется...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2014, 15:30
Ответы с готовыми решениями:

Word: макрос для таблиц. Отформатировать определенный вид таблиц
В документе два вида таблиц. Первый тип таблиц имеет вертикальную шапку сбоку (левый столбец) и состоит она всегда из двух столбцов. Второй...

Макрос: Написать макрос по сравнению двух таблиц для нахождения несоответствий...
знатоки, прошу помощи в еще одном деле: есть два листа, --в одном список: яблоко, груша, слива, --во втором: яблоко, груша ...

есть ли возможность оптимизировать сквозную нумерацию различных документов word и excel?
Приветствую! В работе существует необходимость нумеровать большое количество файлов word и excel (30-40 шт.). Общее число страниц может...

4
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,931
Записей в блоге: 4
25.09.2014, 16:44
700*1300=910000 выполнений сравнения
причем самый медленный вариант обращения к тексту ячеек друх таблиц

по возможности надо применить массивы или коллекцию
если текст в ячейках не очень длинный , то я применяю следующий прием
--одну таблицу(у вас это 9) считываю в строку
--затем читаю таб1, ищу в строке и замена

итого 700+1300=2000 операций, в 450 раз быстрее

Добавлено через 43 минуты
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
Sub sravnenie_140925()
''пробуйте на копии''''''''''''''''''''''''''''''''''''
Dim i, j, iCount9, iCountn As Integer, ss, s1
Dim tbl1 As Table
Dim tbl9 As Table
Set tbl1 = ActiveDocument.Tables(1)
Set tbl9 = ActiveDocument.Tables(9)
iCount9 = tbl9.Rows.Count
iCountn = tbl1.Rows.Count
 ss = "`"
For i = 2 To iCount9
  ss = ss & tbl9.Columns(2).Cells(i).Range.Text & "`"
 
Next i
  
 
 
 
  For j = 2 To iCountn
  
  s1 = tbl1.Columns(2).Cells(j).Range.Text
  If InStr(ss, s1) > 0 Then
     tbl1.Columns(10).Cells(j).Range.Text = "Да"
  End If
  Next j
 
 
End Sub
2
340 / 315 / 43
Регистрация: 20.08.2014
Сообщений: 1,242
Записей в блоге: 1
25.09.2014, 16:51
mma86g, дополнительно отключите
Application.ScreenUpdating = False
вначале макроса и включите вконце
Application.ScreenUpdating = True
1
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
27.09.2014, 13:08
Протестировал макрос уважаемой shanemac51.
В ходе тестирования были получены следующие любопытные результаты:
  1. Слово "сено" из девятой таблицы не было обнаружено в первой таблице.
  2. Слово "рок" почему-то нашлось в девятой таблице, хотя на самом деле его там нету.
  3. Ячейка с пустой строкой была обнаружена во втором столбце девятой таблицы, хотя на самом деле ее там нету.
С уважением,
Аксима
Миниатюры
Оптимизировать макрос, сравнивающий значения в столбцах двух различных таблиц Word  
Вложения
Тип файла: doc ТестПрограммыСравнения.doc (46.0 Кб, 7 просмотров)
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,931
Записей в блоге: 4
27.09.2014, 13:38
Лучший ответ Сообщение было отмечено Аксима как решение

Решение

извиняюсь за ошибку и проверка идет со 2-й строки(есть шапка)

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
Sub sravnenie_140927()
''пробуйте на копии''''''''''''''''''''''''''''''''''''
Dim i, j, iCount9, iCountn As Integer, ss, s1
Dim tbl1 As Table
Dim tbl9 As Table
Set tbl1 = ActiveDocument.Tables(1)
Set tbl9 = ActiveDocument.Tables(9)
iCount9 = tbl9.Rows.Count
iCountn = tbl1.Rows.Count
 ss = "`"
For i = 2 To iCount9
  ss = ss & tbl9.Columns(2).Cells(i).Range.Text & "`"
 
Next i
  
 
 
 
  For j = 2 To iCountn
  
  s1 = "`" & tbl1.Columns(2).Cells(j).Range.Text
  If InStr(ss, s1) > 0 Then
     tbl1.Columns(10).Cells(j).Range.Text = "Да"
  End If
  Next j
 
 
End Sub
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.09.2014, 13:38
Помогаю со студенческими работами здесь

Макрос для сравнения данных в двух столбцах, вместо vlookup
Подскажите, пожалуйста, как написать макрос, который бы можно было использовать для сравнения данных в двух столбцах, вместо vlook up.

[Макрос]Сверка значений ячеек двух таблиц на двух листах и заливка цветом
Возникла задача, сравнить две таблицы на соответствие числовых значений. Две таблицы отчётности, в ячейках значения примерно с 10 знаками...

Макрос сравнения двух таблиц
Здравствуйте,помогите сравнить два файла есть файл с эталонной таблицей и файл для сравнения, надо сравнить столбец адреса с эталоном и...

Макрос сравнения двух таблиц
Здравствуйте,помогите сравнить два файла есть файл с эталонной таблицей и файл для сравнения, надо сравнить столбец адреса с эталоном и...

Сравнить значения в двух столбцах - в случае совпадения заполнить из третьего
Здравствуйте уважаемые. Если на словах то надо заполнить серийные номера в одной таблице исходя из данных в другой таблице - проблема...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru