Страница: 1 |
Страница: 1 |
Вопрос: Выбрать нужное из листа и сохранить это в другом
Добавлено: 16.06.09 09:53
Автор вопроса:
Дмитрий
Помогите пожалуйста начинающему:
Нужно из первого листа выбрать равные строки (сравниваем поочередно со строками второго листа) и, если условие по соответствующим ячейкам выполняется, копирум строку из первого листа в третий. Пользуясь хелпом написал макрос но он отказывается работать, почему немогу понять... Помогите кто знает в чем проблема
Sub write_report()
Sheets("Отчет").Select
Range("A1").Select
sotr_baza_n = 1 'проход по базе (Большой цикл)
sotr_sp_n = 1 'проход по списку событий (Вложеный цикл)
kol_sov = 0 'флаг совподения по сотрудникам
sn_copy = 2
z_baza = 0
z_spisok = 0
While z_baza = 0
sotr_sp_n = 1
'Excel.ThisWorkbook.
While z_spisok = 0
If (Sheets("База").Cells(sotr_baza_n, 3) <> Sheets("События").Cells(sotr_sp_n, 3)) And (Sheets("События").Cells(sotr_sp_n, 3) <> "") Then
sotr_sp_n = sotr_sp_n + 1
ElseIf (Sheets("База").Cells(sotr_baza_n, 3) = Sheets("События").Cells(sotr_sp_n, 3)) And (Sheets("События").Cells(sotr_sp_n, 3) <> "") Then
kol_sov = 1
If (Sheets("База").Cells(sotr_baza_n, 5) = "5-ти дневный график") And (Sheets("События").Cells(sotr_sp_n, 2) > Sheets("Отчет").Cells(1, 1)) Then
Sheets("События").Select
Rows(CStr(sotr_sp_n) + ":" + CStr(sotr_sp_n)).Select
Selection.Copy
Sheets("Отчет").Select
Rows(CStr(sn_copy) + ":" + CStr(sn_copy)).Select
ActiveSheet.Paste
sn_copy = sn_copy + 1
End If
sotr_sp_n = sotr_sp_n + 1
Else: z_spisok = 1
End If
Wend
sotr_baza_n = sotr_baza_n + 1
If Sheets("База").Cells(sotr_baza_n, 3) = "" Then
z_baza = 1
End If
Wend
End Sub
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа: AngryBadger
Вопросов: 33
Ответов: 245
Профиль | | #1
Добавлено: 16.06.09 11:24
Опиши какое условие должно выполняться и что с чем ты сравниваешь (на первом и втором листе).
Номер ответа: 2
Автор ответа: Дмитрий
Вопросов: 1
Ответов: 3
Профиль | | #2
Добавлено: 16.06.09 11:39
Вот это условие у меня "неидёт"
...If (Sheets("База".Cells(sotr_baza_n, 5) = "5-ти дневный график"
And (Sheets("События"
.Cells(sotr_sp_n, 2) > Sheets("Отчет"
.Cells(1, 1)) Then ...
Если во втором листе книги "База" у сотрудника в ячейке график работы стоит "5-ти дневный график" и в первом листе в ячейке время прохода время больше чемзаписано в певой ячейке третьего листа (например 8:00:00) то эту строчку из первого листа копируем в третий лист
Номер ответа: 3
Автор ответа: AngryBadger
Вопросов: 33
Ответов: 245
Профиль | | #3
Добавлено: 16.06.09 11:40
Вот макрос, который поочередно стравнивает первые 100 ячеек первого и второго листа, если находит совпадение - записывет совпавшее значение на 3 лист.
Sub CopyToSheet()
Dim MyRange1 As Range
Dim MyRange2 As Range
Dim r1 As Integer, r2 As Integer, r3 As Integer
Sheets(1).Select: Set MyRange1 = Sheets(1).Range(Cells(1, 1), Cells(100, 1))
Sheets(2).Select: Set MyRange2 = Sheets(2).Range(Cells(1, 1), Cells(100, 1))
For r1 = 1 To MyRange1.Cells.Count
For r2 = 1 To MyRange2.Cells.Count
If MyRange1.Cells(r1, 1).Value = MyRange2.Cells(r2, 1).Value Then
r3 = r3 + 1
Sheets(3).Cells(r3, 1).Value = MyRange1.Cells(r1, 1).Value
GoTo NextVal
End If
Next r2
NextVal:
Next r1
Sheets(3).Select
End Sub
Номер ответа: 4
Автор ответа: Дмитрий
Вопросов: 1
Ответов: 3
Профиль | | #4
Добавлено: 16.06.09 11:41
Вот это условие у меня "неидёт"
...If (Sheets("База".Cells(sotr_baza_n, 5) = "5-ти дневный график" And (Sheets("События".Cells(sotr_sp_n, 2) > Sheets("Отчет".Cells(1, 1)) Then ...
Если во втором листе книги "База" у сотрудника в ячейке график работы стоит "5-ти дневный график" и в первом листе в ячейке время прохода время больше чемзаписано в певой ячейке третьего листа (например 8:00:00) то эту строчку из первого листа копируем в третий лист
Номер ответа: 5
Автор ответа: Дмитрий
Вопросов: 1
Ответов: 3
Профиль | | #5
Добавлено: 16.06.09 11:44
Спасибо Михаил a.k.a.