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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Кажется вы перепутали тут первый и второй лист, по крайней мере это не соответствует изначальному ТЗ.
...
Рейтинг: 0 / 0
15.01.2010, 14:51
    #36412428
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос сравнивающий таблицы на разных листах Excel
Да, точно=)
Я уже все перепутала...
Наоборот, находим на втором листе и сравниваем с первым!
...
Рейтинг: 0 / 0
15.01.2010, 15:52
    #36412625
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос сравнивающий таблицы на разных листах Excel
Спасибо за помощь!
Попытаюсь сделать!
...
Рейтинг: 0 / 0
16.01.2010, 13:14
    #36413676
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос сравнивающий таблицы на разных листах Excel
Вот примерно так. Но там на первом листе очень многих дисциплин нет со второго листа. Этот вариант выводит и те, которых нет, и с разницей в часах.
Если отсутствующие не надо, уберите
Код: 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
16.01.2010, 19:09
    #36413989
Alisya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос сравнивающий таблицы на разных листах Excel
Ой! Огромное вам спасибо! =)
...
Рейтинг: 0 / 0
16.01.2010, 19:27
    #36414005
Hugo121
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Макрос сравнивающий таблицы на разных листах Excel
Небольшой 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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Макрос сравнивающий таблицы на разных листах Excel / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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