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

Как сравнить первые столбцы двух книг Экселя и выявить разницу?

04.08.2011, 15:53. Показов 6231. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, уважаемые!
Прошу вашей помощи в следующей задаче:
есть 2 файла в одной папке:Old.xls и New.xls . В первом столбце этих файлов содержатся имена. для файла Old надо написать макрос, который выявлял в файле New новые имена и записывал их в первый столбец файла Old в конце списка.
К примеру:
Old.xls
Петр
Иван
Сергей
new.xls
Сергей
Олег
Семен
Петр
в итоге файл old.xls должен быть следующего вида:
Петр
Иван
Сергей
Олег
Семен

надеюсь на вашу помощь =)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.08.2011, 15:53
Ответы с готовыми решениями:

Как сравнить разницу двух DateTime?
Есть 2 переменные DataTime. Надо выяснить прошло ли от одного DataTime до другого больше 12 часов. Есть ли в DataTime какие-нибудь методы,...

Сравнить списки двух книг
Здравствуйте, подскажите как подправить макрос чтобы при сравнении данных "книги 1", с данными книги "эталон", закрашивались...

Сравнить данные двух столбцов разных книг
Есть 2 книги, в них n-ое количество данных: Необходимо: 1. сравнить данные 2-х столбцов из разных книг. 2. при совпадении данных, из...

13
Сумрак
05.08.2011, 14:38
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
dim R1 as Range
dim R2 as Range
dim mV1 as Variant,mV2 as Variant
dim mBool as Boolean
 
for each mV1 in R1.cells
   for each mV2 in R2.cells
     if mV1.value=mV2.value then
       mBool=true
       exit for
     end if
     if mBool=false
       ...тут не найдено.. и выполняется код по внесению нового имени
     end if
   next mV2
next mV1
 
set ws1=nothing
set ws2=nothing
это итак, набросок
0 / 0 / 0
Регистрация: 04.08.2011
Сообщений: 6
07.08.2011, 09:56  [ТС]
Эм... эта часть мне как раз понятна=)
непонятно следующее -
1. каким образом R1 и R2 -становятся двумя книгами ?
R1='old.xls', или по-другому?
2.
if mBool=false
...тут не найдено.. и выполняется код по внесению нового имени
end if
а как он выполняется?
3. и что за переменные ws1 и ws2?
0
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
08.08.2011, 07:52
один из вариантов. Специально сделал через массив...
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
Sub Сверка()
  book = 'c:Temp
ew name.xls'
  If Dir(book) = '' Then
    MsgBox 'Нет файла'
  Else
    Dim msOld(): ReDim msOld(0): Dim msNew(): ReDim msNew(0)
    y = 2  ' запоминаю старые
    Do While Not IsEmpty(Cells(y, 1))
      ReDim Preserve msOld(UBound(msOld) + 1)
      msOld(UBound(msOld)) = Cells(y, 1)
      y = y + 1
    Loop
    Application.ScreenUpdating = False
    Workbooks.Open Filename:='C:TempNew Name.xls'
    yy = 2  ' ищу новые
    Do While Not IsEmpty(Cells(yy, 1))
      fl = True
      For i = 1 To UBound(msOld)
        If Cells(yy, 1) = msOld(i) Then
          fl = False
          Exit For
        End If
      Next
      If fl Then
        ReDim Preserve msNew(UBound(msNew) + 1)
        msNew(UBound(msNew)) = Cells(yy, 1)
      End If
      yy = yy + 1
    Loop
    ActiveWindow.Close:          ThisWorkbook.Activate
    For i = 1 To UBound(msNew):  Cells(y, 1) = msNew(i):  y = y + 1: Next
  End If
  MsgBox '', vbInformation, 'Готово'
End Sub
0
0 / 0 / 0
Регистрация: 04.08.2011
Сообщений: 6
08.08.2011, 12:21  [ТС]
=) спасибо.
Вот только где-то в этом месте у меня ошибка выскакивает-
Application.ScreenUpdating = False
Workbooks.Open Filename:='C:TempNew Name.xls'
yy = 2
вылезает ошибка 1004, Application-defined or object-defined error
0
0 / 0 / 0
Регистрация: 04.08.2011
Сообщений: 6
08.08.2011, 13:06  [ТС]
с синтаксисом разобралась. возникла новая проблема - книга new.xls открывается, но макрос с ней ничего не делает - он заново пробегает файл old.xls
/*здесь все нормально*/
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Сверка()
  book = 'C:    emp
ew1.xls'
If Dir(book) = '' Then
    MsgBox 'Нет файла'
  Else
    Dim msOld(): ReDim msOld(0): Dim msNew(): ReDim msNew(0)
    y = 2  ' запоминаю старые
    Do While Not IsEmpty(Cells(y, 1))
      ReDim Preserve msOld(UBound(msOld) + 1)
      msOld(UBound(msOld)) = Cells(y, 1)
      y = y + 1
    Loop
а вот тут идет проблема - открывается файл new, но значения Cells(yy, 1))- берутся не из new.xls, а из old.xls
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
Application.ScreenUpdating = False
    Workbooks.Open Filename:='C:    emp
ew1.xls'
    yy = 2  ' ищу новые
    Do While Not IsEmpty(Cells(yy, 1))
      fl = True
      For i = 1 To UBound(msOld)
        If Cells(yy, 1) = msOld(i) Then
          fl = False
          Exit For
        End If
      Next
      If fl Then
        ReDim Preserve msNew(UBound(msNew) + 1)
        msNew(UBound(msNew)) = Cells(yy, 1)
      End If
      yy = yy + 1
    Loop
    ActiveWindow.Close:          ThisWorkbook.Activate
    For i = 1 To UBound(msNew):  Cells(y, 1) = msNew(i):  y = y + 1: Next
  End If
  MsgBox 'done', vbInformation, 'Готово'
End Sub
может, надо еще что-то добавить, чтобы файл активным стал,или постоянно на него ссылку указывать?
0
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
08.08.2011, 14:50
После того как файл открывается, он сразу становится активным.
Сколько листов в этой книге?
Когда файл(new) открывается, какой лист активен?

Можно прогнать программу по шагам. На той строчке кода, где надо сделать остановку, в режиме редактирования, нажмите F9
Запустите программу, она дойдет до этого места, и остановится. Далее нажимайте на F8 и посматривайте что делает Excel.
Application.ScreenUpdating = False - гасит передергивание экрана, можно убрать.

y - счетчик по строкам в старом файле
yy - счетчик по строкам в новом файле
0
0 / 0 / 0
Регистрация: 04.08.2011
Сообщений: 6
08.08.2011, 15:28  [ТС]
>После того как файл открывается, он сразу становится активным.
>Сколько листов в этой книге?
стандартно, 3
>Когда файл(new) открывается, какой лист активен?
активным становится лист1 файла new
>Запустите программу, она дойдет до этого места, и остановится. Далее нажимайте на F8 и посматривайте что делает Excel.
это я уже делала. поставила якоря (debug->Run Watch) на следующие переменные:
y
Cells(y, 1)
yy
Cells(yy, 1)
проверка показала, что значениями Cells(yy, 1)становятся значения ячеек первого столбца файла old.xls
и, несмотря на то, что в одном файле 3 строчки. а в другом 5, итоговые значения переменных у и уу равны 4 (отсюда было высказано предположение, что файл old просто просматривается 2 раза.)
Вот, в общем ^^; если что - мое мыло sakura92@mail.ru -могу выслать оба файла для проверки.
0
1 / 1 / 0
Регистрация: 19.05.2011
Сообщений: 80
08.08.2011, 17:42
Предлагаю Вам свой вариант кода.
Для сравнения пользуюсь функцией поиска на листе:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub aaa()
Dim I As Long, K As Long
Dim obl As String, RList As Worksheet
    Workbooks('Old').Worksheets(1).Activate
    Set RList = Workbooks('Old').Worksheets(1)
    K = Range('A1').CurrentRegion.Rows.Count
    obl = 'A1:' & Cells(K, 1).Address
    Workbooks.Open FileName:='New.xls'
    For I = 1 To Range('A1').CurrentRegion.Rows.Count
      fval = Application.Match(Cells(I, 1).Value, RList.Range(obl), 0)
      If IsError(fval) = True Then
         K = K + 1
         RList.Cells(K, 1).Value = Cells(I, 1).Value
         obl = 'A1:' & Cells(K, 1).Address
      End If
    Next I
End Sub
0
1 / 1 / 0
Регистрация: 19.05.2011
Сообщений: 80
08.08.2011, 17:50
Приведенный макрос у меня находится в книге Old.
В примере оба файла расположены в текущей папке.
0
22 / 5 / 1
Регистрация: 05.09.2010
Сообщений: 370
09.08.2011, 06:58
Проблема в том, что макрос надо вставить в МОДУЛЬ, а не в лист
0
1 / 1 / 0
Регистрация: 19.05.2011
Сообщений: 80
09.08.2011, 10:22
Приведенный макрос находится в отдельном модуле в книге Old.
Его можно поместить в модуль любой книги. Только тогда надо будет добавить открытие книги Old. В макросе приведен алгоритм решения, который работает очень быстро даже с большими массивами. А куда поместить макрос - решайте сами и добавляйте в него, что считаете необходимым.
0
0 / 0 / 0
Регистрация: 04.08.2011
Сообщений: 6
15.08.2011, 16:08  [ТС]
Спасибо большое всем! =)
0
Сумрак
15.08.2011, 21:19
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
Sub ssss()
Dim WB1 As Workbook, WB2 As Workbook
Dim WS1 As Worksheet, WS2 As Worksheet
Dim R1 As Range, R2 As Range
 
Set WB1 = Workbooks.Open('***1.xls')
Set WS1 = ActiveSheet 'wb1.sheets(1)
Set WB2 = Workbooks.Open('***2.xls')
Set WS2 = ActiveSheet 'wb2.sheets(1)
Set R1 = WS1.Columns(1) 'Любой range  на WS1
Set R2 = WS2.Columns(1) 'Любой range  на WS2
 
'********* code
 
wb1.close true
wb2.close true
 
Set WB1 = Nothing
Set WS1 = Nothing
Set WB2 = Nothing
Set WS2 = Nothing
Set R1 = Nothing
Set R2 = Nothing
End Sub
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.08.2011, 21:19
Помогаю со студенческими работами здесь

Сравнить первые десять символов двух строк
Ввести строки. Сравнить первые десять символов двух строк. Если они одинаковы, объединить две строки, исключив из второй первые десять...

Сравнить первые 5 символов двух заданных строк
Сравнить первые 5 символов двух заданных строк. с помощью функции strncmp (). Результат сравнения вывести на экран. Присоединить первую...

Как в Делфи сравнить 2 числа и выявить наибольшее, использую 2 массива
как в Делфи сравнить 2 числа и выявить наибольшее, использую 2 массива?

Как автоматически сравнить 2 модуля VBA разных книг?
?

Как сравнить 2 столбца и при совпадении вычислить разницу и относительное значение
Здравствуйте! Помогите пожалуйста,сделать лаб.работу. Во вложении есть таблица,по данным которой нужно сделать следующее. Сравнить...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru