Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2015, 12:10   #1
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию Макрос копирования

Добрый день, поправьте пожалуйста меня.
Есть 2 листа в excel, делаю проверку на совпадение и если совпало то нужно копировать и вставить в другой лист. Счетчик j меняется, но копирования не происходит
Код:
Dim j As Integer, c As Integer, a As Integer
Set sh = Sheets(4)
Set sh1 = Sheets(8)
j = 1
c = 3
a = 3
lrow = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
lcel = Application.WorksheetFunction.CountA(sh1.Rows(11))
Do While j <= lrow
    MsgBox "j=" & j
    Do While c <= lcel
        If sh.Cells(j, 8).Val = sh2.Cells(11, c).Val Then
        Range(Cells(8, ñ), Cells(196, ñ)).Select
        Selection.Copy
        Sheets(7).Select
        Cells(8, a).Select
        Selection.PasteSpecial
        a = a + 1
        Else
        c = c + 1
        End If
            Loop
            j = j + 1
            Loop
Kot070 вне форума Ответить с цитированием
Старый 16.10.2015, 14:36   #2
AleksandrH
Заблокирован
 
Регистрация: 15.02.2010
Сообщений: 148
По умолчанию

перед range в строке
Код:
 Range(Cells(8, ñ), Cells(196, ñ)).Select
надо указать на каком листе копируешь
например:
Код:
 sh.Range(Cells(8, ñ), Cells(196, ñ)).Select
второе: sh2. ето че за дичь? Option Explicit использовать должен ты!
AleksandrH вне форума Ответить с цитированием
Старый 16.10.2015, 14:54   #3
Kot070
Форумчанин
 
Регистрация: 22.12.2012
Сообщений: 139
По умолчанию

Выкладываю последний исправленый вариант. Вылетает ошибка "Run-time error '1004' Метод Select из класса Range завершен неверно"
Код:
Dim j As Integer, c As Integer, a As Integer
Set sh = Sheets(4)
Set sh1 = Sheets(8)
j = 1
'c = 3
a = 3
lrow = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
lcel = Application.WorksheetFunction.CountA(sh1.Rows(11))
Do While j <= lrow
        c = 3
    MsgBox "j=" & j
    Do While c <= lcel
      '  MsgBox "c=" & c
        If sh.Cells(j, 8).Value = sh1.Cells(11, c).Value Then
        sh1.Range(sh1.Cells(8, c), sh1.Cells(196, c)).Select
        Selection.Copy
        Sheets(7).Select
        Cells(8, a).Select
        Selection.PasteSpecial
        a = a + 1
        Else
        c = c + 1
        End If
            Loop
            j = j + 1
            Loop
Kot070 вне форума Ответить с цитированием
Старый 16.10.2015, 16:02   #4
AleksandrH
Заблокирован
 
Регистрация: 15.02.2010
Сообщений: 148
По умолчанию

Код:
Sub p78()
Dim j As Integer, c As Integer, a As Integer
Set sh = Sheets(4)
Set sh1 = Sheets(8)
'Dim sh1v As String
'Dim shv As String
j = 1
a = 3
lrow = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
lcel = Application.WorksheetFunction.CountA(sh1.Rows(11))
Do While j <= lrow
    c = 3
    Do While c <= lcel
'        shv = sh.Cells(j, 8)
'        sh1v = sh1.Cells(11, c)
'        Debug.Print shv & " : " & sh1v
        If sh.Cells(j, 8) = sh1.Cells(11, c) Then
            sh1.Range(sh1.Cells(8, c), sh1.Cells(196, c)).Copy
            Sheets(7).Cells(8, a).PasteSpecial
            a = a + 1
        End If
        c = c + 1
     Loop
    j = j + 1
Loop
End Sub
Код:
Sub p78()
Dim j As Integer, c As Integer, a As Integer
Set sh = Sheets(4)
Set sh1 = Sheets(8)
Set sh2 = Sheets(9)
'Dim sh1v As String
'Dim shv As String
j = 1
a = 3
lrow = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
lcel = Application.WorksheetFunction.CountA(sh1.Rows(11))
lcel = Application.WorksheetFunction.CountA(sh1.Rows(11))
Do While j <= lrow
    c = 3
    Do While c <= lcel
'        shv = sh.Cells(j, 8)
'        sh1v = sh1.Cells(11, c)
'        Debug.Print shv & " : " & sh1v
        If sh.Cells(j, 8) = sh1.Cells(11, c) Then
            sh1.Range(sh1.Cells(8, c), sh1.Cells(196, c)).Copy
            Sheets(7).Cells(8, a).PasteSpecial
            a = a + 1
        End If
        c = c + 1
     Loop
    j = j + 1
Loop

lcel = Application.WorksheetFunction.CountA(sh2.Rows(11))
Do While j <= lrow
    c = 3
    Do While c <= lcel
        If sh.Cells(j, 8) = sh2.Cells(11, c) Then
            sh2.Range(sh2.Cells(8, c), sh2.Cells(196, c)).Copy
            Sheets(7).Cells(8, a).PasteSpecial
            a = a + 1
        End If
        c = c + 1
     Loop
    j = j + 1
Loop
End Sub

Последний раз редактировалось AleksandrH; 17.10.2015 в 09:39. Причина: код для перебора 2го листа
AleksandrH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макрос копирования в ячейки johny_03 Microsoft Office Excel 1 12.04.2014 21:07
Макрос копирования и обнуления Emmanuel Microsoft Office Excel 7 26.10.2012 11:11
Макрос для копирования значений из нескольких файлов в один общий с определенным условием копирования zenner Microsoft Office Excel 0 21.03.2011 14:48
макрос копирования отредактируйте. zander Microsoft Office Excel 1 17.03.2011 12:30
Макрос для копирования knyz Microsoft Office Excel 28 11.01.2009 06:12