powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос сравнивающий таблицы на разных листах Excel
27 сообщений из 27, показаны все 2 страниц
Макрос сравнивающий таблицы на разных листах Excel
    #36411167
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброй ночи, всем!!!
Нужна помощь!
Есть две таблицы на разных листах. Необходимо из листа2 считывать информацию о наименовании дисциплины, это столбец "Наименование дисциплины" (Философия, Иностранный язык, и.т.д) и соответствующее количество часов, это столбец "Всего по ГОСу" и сравнивать с информацией на листе1, где также есть столбцы содержащие наименование дисциплины и количество часов. При не совпадении количества часов, выводить наименование дисциплины на лист3.
Ну вот, вроде всё! =)
Если кто-то знает как это сделать, подскажите пожалуйста!
Кстати, я там что-то пыталась делать, макрос Сравнение=)))
Буду очень благодарна!
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411176
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alisya,

А чем вам не нравится ваш макрос (кроме того, что он натыкается на первую пустую строку после заголовка таблицы и выходит из цикла)?

В принципе - ТЗ неясно. Вы же умеете программировать, сумейте сформулировать ТЗ - это 90% решения вашей проблемы. А именно - дайте внятную расшифровку понятию " соответствующее ". То ли должны строки совпадать, то ли Row, то ли надо искать на втором листе что-то соответствующее первому листу....
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411182
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alisyaэто столбец "Наименование дисциплины" (Философия, Иностранный язык, и.т.д)

На втором листе есть столбец "Название дисциплины".
Три взятых навскидку названия:
Язык и стиль делового общения
Основы библиографических знаний
Профессиональный иностранный язык

Не встречаются на первом листе. Что в этом случае делать? Писать на третий лист несоответствие?

Слово "Философия", "Химия" встречаются, но как ЧАСТЬ текста на втором листе. Считается это соответствием?
В общем - доработайте ТЗ.
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411482
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соответствующее, это значит мы берем поочередно каждую дисциплину из второго листа, возьмем например Философия, смотрим сколько часов ее отведено, это столбец Всего по ГОСу, для философии - 138 часов. Затем переходим на первый лист, находим там дисциплину Философия и количество часов отведенных на предмет, это столбец Всего часов. Если количество часов на листе1 и листе2 не совпадают, для одного и того же предмета, то название этого предмета записывается на лист3
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411502
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если названия предметов на втором листе не встречаются на первом, то все равно выводить их на третий лист.

Вообще, идея заключается в том чтобы брать информацию из второго листа и сравнивать с первой, а именно название предмета и количество часов.

А насчет философии и Химии, я вас не совсем понимаю, я не нашла там строк где бы они являлись частью текста=)

Ну вот доработала как смогла=)))
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411515
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alisyaнаходим там дисциплину Философия и количество часов отведенных на предмет

Что такое "находим там"?
Я же просил уточнить ТЗ и расшифровать "соответствующее"
Хорошо, допустим вы имеете ввиду следующее:
Нужно найти во втором столбце на первом листе строку, которая начинается с указанного слова, и двоеточия, остальной текст не важен.

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

P.S. Есть вариант вместо цикла использовать поиск (метод Find).
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411518
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlisyaА насчет философии и Химии, я вас не совсем понимаю, я не нашла там строк где бы они являлись частью текста=)

На первом листе нет ячеек с текстом "Философия" или "Химия"
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411537
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть и философия, и химия, вот только у философии часов не наблюдается...
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411586
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121Есть и философия, и химия, вот только у философии часов не наблюдается...

Я ведь четко сформулировал свой пост.
Есть ячейка
авторФилософия: предмет философии, место и роль философии в культуре, становление философии, основные направления, школы философии и этапы исторического развития; структура философского знания; учение о бытии, монистические и плюралистические концепции бытия, самоорганизация бытия; понятия материльного и идеального, пространство , время; движение и развитие, диалектика; детерминизм и индетерминизм, динамические и статистические закономерности, научные, философские и религиозные картины мира; человек, общество, культура; человек и природа, общество и его структура, гражданское общество и государство, человек в системе социальных связей, человек и исторический процесс: личность и массы, свобода и необходимость; формационная и цивилизационная концепции общественного развития; смысл человеческого бытия, насилие и ненасилие, свобода и ответственность, мораль, справедливость, право; нравственные ценности, представление о совершенном человеке в различных культурах, эстетические ценности и их роль в человеческой жизни, религиозные ценности и свобода совести; сознание и познание, сознание, самосознание и личность; познание, творчество, практика; вера и знание, понимание и объяснение, рациональное и иррациональное в познавательной деятельности, проблема истины, действительность, мышление, логика и язык; научное и вненаучное знание, критерии научности, структура научного познания, его методы и формы; рост научного знания, научные революции и смены типов рациональности, наука и техника; будущее человечества, глобальные проблемы современности, взаимодействие цивилизаций и сценарии будущего.

Но оператором сравнения
Sheets(1).Cells(nRow, nColumn) <> Sheets(2).Cells(nRow2, nColumn2)
она найдена не будет. Поэтому сразу обращаю внимание автора на это.

Что касается отсутствия часов - видимо, это надо обрабатывать так же, как отсутствие строки в принципе, но как - автор не ответила даже после моего вопроса.
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411680
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, понял. Я бы сделал частичным поиском - берём всё значение ячейки второго листа и ищем частичное совпадение в колонке первого. Мой универсальный :) ( кто помнит :) ) так ищет, но там задача найти совпадения, а не отличия в других ячейках. Вполне можно сделать.
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411687
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но если слово например "Физика" встретится в фразе "Физическая культура :физика тела и т.д. культура в общекультурно"... Надо дополнительно проверять на начало строки...
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411722
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121Но если слово например "Физика" встретится в фразе "Физическая культура :физика тела и т.д. культура в общекультурно"... Надо дополнительно проверять на начало строки...

Ну либо Left, либо искать с двоеточитем, либо после Find все равно проверять Left-
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411732
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще - там есть "артикулы" в первом столбце, может логично искать по ним. Правда придется дополнительно обрабатывать незначащий нолик :(
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411754
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProВообще - там есть "артикулы" в первом столбце, может логично искать по ним.
И сразу - ГСЭ.Ф.1 нету...
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36411772
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И вообще там с индексами косяки:
Код: plaintext
1.
ГСЭ.Ф. 1 	Философия
ГСЭ.Ф. 01 	Иностранный язык:лексический минимум в объеме  4000  учебных лексических единиц 
А например
Код: plaintext
1.
2.
3.
4.
5.
ГСЭ.Ф. 2 
ГСЭ.Ф. 3 
ГСЭ.Ф. 4 
ГСЭ.Ф. 5 
ГСЭ.Ф. 6 
вообще нет.
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36412315
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, вы правильно догадались, при отсутствии часов нужно выводить предмет на лист3, как не соответствие.
Как вы заметили есть два документа, на листе1 ГОС(государственный образовательный стандарт), на листе2 план, составленный сотрудником.
Необходимо выполнить проверку соответствия часов выделенных на изучение дисциплин в плане (столбец Всего по ГОСу), с отведенным в ГОСе (лист1, столбец Всего часов)
Я уже незнаю как вам еще объяснить!=)
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36412343
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да вы не мне должны объяснить, а компьютеру.

Я уже несколько раз спросил, что должно являться признаком соответствия строк первого и второго листа? Номер строки? Текст? Часть текста? Пока эта задача не будет решена, нет смысла вести речь о сравнении количества часов.

Я уже выдвинул предположение, что вы имели ввиду под соответствием строк. Уже предложил алгоритм решения. А вы мне опять про сравнение часов рассказываете.

Еще раз. Мы не ведем пока речь о сравнении часов. Мы сейчас пока выясняем, как вы планируете сопоставить строки на первом и втором листе между собой.
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36412365
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моя проблема в том, что я понятия не имею как сделать сравнение двух листов.
Если бы я могла объяснить это компьютеру......
Мне нужно чтобы из первого листа считывалась информация о названии предмета, и затем на втором листе находилось название этого предмета, как начало строки.
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36412414
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlisyaМоя проблема в том, что я понятия не имею как сделать сравнение двух листов.
Если бы я могла объяснить это компьютеру......
Мне нужно чтобы из первого листа считывалась информация о названии предмета, и затем на втором листе находилось название этого предмета, как начало строки.

Вот, наконец-то.

Собственно, цикл по второму листу у вас есть. Для поиска на первом листе можно использовать метод Find. Либо можете сделать внутренний цикл, который будет перебирать все ячейки и сравнивать их с началом исходной строки примерно так:
Код: plaintext
If str = Left$(Cells(i, j), Len(str)) Then
То есть сравнить переменную str с левой частью ячейки соответствующей длины
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36412419
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlisyaМне нужно чтобы из первого листа считывалась информация о названии предмета, и затем на втором листе находилось название этого предмета, как начало строки.

Кажется вы перепутали тут первый и второй лист, по крайней мере это не соответствует изначальному ТЗ.
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36412428
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, точно=)
Я уже все перепутала...
Наоборот, находим на втором листе и сравниваем с первым!
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36412625
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помощь!
Попытаюсь сделать!
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36413676
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот примерно так. Но там на первом листе очень многих дисциплин нет со второго листа. Этот вариант выводит и те, которых нет, и с разницей в часах.
Если отсутствующие не надо, уберите
Код: plaintext
1.
2.
3.
4.
5.
        Else
                Set blank_cell = tocopy_.Cells(tocopy_.Range("a" & Rows.Count).End(xlUp).Row +  1 ,  1 )
                source_.Cells(cc.Row,  2 ).Copy blank_cell
                blank_cell.Offset( 0 ,  2 ).Value = "Not Exist In Sheets1 Column2!"

Код: plaintext
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.
Option Explicit
Sub Сравнение()

Dim temp, temph
Dim source_ As Object, target_ As Object, tocopy_ As Object, x As Range
Dim iFirstAddress$, blank_cell As Range
Dim cc As Range

Set source_ = Sheets( 2 )
Set target_ = Sheets( 1 )
Set tocopy_ = Sheets( 3 )

For Each cc In source_.UsedRange.Columns( 2 ).Cells

temp = cc.Value
temph = source_.Cells(cc.Row,  5 ).Value

    If temp <> "" Then
        Set x = target_.Columns( 2 ).Find(temp, LookIn:=xlValues, lookat:=xlPart, MatchCase:=True)
        
        If Not x Is Nothing Then
        
            iFirstAddress = x.Address
                    
            Do
                Set x = target_.Columns( 2 ).FindNext(x)
                    If target_.Cells(x.Row,  3 ).Value <> temph Then
                            Set blank_cell = tocopy_.Cells(tocopy_.Range("a" & Rows.Count).End(xlUp).Row +  1 ,  1 )
                            source_.Cells(cc.Row,  2 ).Copy blank_cell
                    End If
            Loop While Not x Is Nothing And x.Address <> iFirstAddress
        Else
                Set blank_cell = tocopy_.Cells(tocopy_.Range("a" & Rows.Count).End(xlUp).Row +  1 ,  1 )
                source_.Cells(cc.Row,  2 ).Copy blank_cell
                blank_cell.Offset( 0 ,  2 ).Value = "Not Exist In Sheets1 Column2!"
        End If
    End If
Next

End Sub

...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36413989
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой! Огромное вам спасибо! =)
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36414005
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Небольшой update:
люди заводят обычно данные как попало, и например "Философия " <> "Философия", а "Иностранный_язык" <> "Иностранный__язык" (намеренный двойной пробел в посте движок форума умно убрал),
поэтому добавил WorksheetFunction.Trim(), что эти ошибки позволяет не замечать (просто Trim() оставляет двойные пробелы внутри фразы).
+ добавил вывод несовпадающих часов - оказывается, там не совпадает только Инженерная графика и Общая электротехника, у остальных 53 фраз просто нет часов вообще или их нет в листе 1 колонке 2
Ну и раз Trim(), то теперь Dim temp$, temph$
Код: plaintext
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.
Option Explicit
Sub Сравнение()

Dim temp$, temph$
Dim source_ As Object, target_ As Object, tocopy_ As Object, x As Range
Dim iFirstAddress$, blank_cell As Range
Dim cc As Range

Set source_ = Sheets( 2 )
Set target_ = Sheets( 1 )
Set tocopy_ = Sheets( 3 )

For Each cc In source_.UsedRange.Columns( 2 ).Cells
	temp = WorksheetFunction.Trim(cc.Value)
	temph = WorksheetFunction.Trim(source_.Cells(cc.Row,  5 ).Value)

    If temp <> "" Then
        Set x = target_.Columns( 2 ).Find(temp, LookIn:=xlValues, lookat:=xlPart, MatchCase:=True)
        If Not x Is Nothing Then
            iFirstAddress = x.Address
            Do
                Set x = target_.Columns( 2 ).FindNext(x)
                If WorksheetFunction.Trim(target_.Cells(x.Row,  3 ).Value) <> temph Then
                    Set blank_cell = tocopy_.Cells(tocopy_.Range("a" & Rows.Count).End(xlUp).Row +  1 ,  1 )
                    source_.Cells(cc.Row,  2 ).Copy blank_cell
                    blank_cell.Offset( 0 ,  1 ).Value = WorksheetFunction.Trim(target_.Cells(x.Row,  3 ).Value)
                    blank_cell.Offset( 0 ,  2 ).Value = temph
                End If
            Loop While Not x Is Nothing And x.Address <> iFirstAddress
        Else
                Set blank_cell = tocopy_.Cells(tocopy_.Range("a" & Rows.Count).End(xlUp).Row +  1 ,  1 )
                source_.Cells(cc.Row,  2 ).Copy blank_cell
                blank_cell.Offset( 0 ,  3 ).Value = "Not Exist In Sheets1 Column2!"
        End If
    End If
Next

End Sub
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36414169
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз большое спасибо! =)
...
Рейтинг: 0 / 0
Макрос сравнивающий таблицы на разных листах Excel
    #36414172
Alisya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз большое спасибо! =)
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос сравнивающий таблицы на разных листах Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]