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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2016, 16:14   #1
danika24
Пользователь
 
Регистрация: 20.07.2011
Сообщений: 47
По умолчанию Сравнение и вставка значений

Здравствуйте нужна очень помощь. Есть Книга первые два листа с данными надо сравнить по колонке А обе листа . Вывести на 3 лист номера что есть во 2 листе но нет в 1 и наоборот. нашла интересный тут макрос но не знаю как его доделать чтобы работал у меня.
Приложение. Книга11 это моя что надо. Книга 1 это макрос что нашла. Таких книг около 100 и в ручную их не обработать помогите.

Последний раз редактировалось danika24; 31.03.2016 в 13:03.
danika24 вне форума Ответить с цитированием
Старый 30.03.2016, 19:40   #2
mchip
Форумчанин
 
Регистрация: 24.06.2008
Сообщений: 516
По умолчанию

Желтым выделено то чего нет на другом листе....
и без всяких макросов
Вложения
Тип файла: rar 1.RAR (59.4 Кб, 12 просмотров)
Можно сделать все! Было бы время, да деньги...
mchip вне форума Ответить с цитированием
Старый 31.03.2016, 08:04   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Sub BuhEpo()
    Dim r As Long
    Dim shBuh, shEpo, shNetEpo, shNetBuh
    On Error Resume Next
    Application.EnableCancelKey = xlDisabled
    Application.ScreenUpdating = False
    Set shBuh = Sheets("бух")
    Set shEpo = Sheets("эпо")
    Set shNetEpo = Sheets("нет в эпо")
    Set shNetBuh = Sheets("есть в эпо нет в бух")
    r = 1
    For r = 1 To shBuh.Cells(shBuh.Rows.Count, 1).End(xlUp).Row
        If Application.CountIf(shEpo.Columns(1), shBuh.Cells(r, 1)) = 0 Then
            shNetEpo.Cells(shNetEpo.Cells(shNetEpo.Rows.Count, 1).End(xlUp).Row + 1, 1) = shBuh.Cells(r, 1)
        End If
    Next r
    r = 1
    For r = 1 To shEpo.Cells(shEpo.Rows.Count, 1).End(xlUp).Row
        If Application.CountIf(shBuh.Columns(1), shEpo.Cells(r, 1)) = 0 Then
            shNetBuh.Cells(shNetBuh.Cells(shNetBuh.Rows.Count, 1).End(xlUp).Row + 1, 1) = shEpo.Cells(r, 1)
        End If
    Next r
    Application.ScreenUpdating = True
    MsgBox "Done!"
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 31.03.2016 в 08:12.
Aleksandr H. вне форума Ответить с цитированием
Старый 31.03.2016, 08:10   #4
danika24
Пользователь
 
Регистрация: 20.07.2011
Сообщений: 47
По умолчанию

Спасибо вам Большое мои дорогие вы меня спасли от суток на работе.
danika24 вне форума Ответить с цитированием
Старый 31.03.2016, 09:44   #5
danika24
Пользователь
 
Регистрация: 20.07.2011
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Код:
Sub BuhEpo()
    Dim r As Long
    Dim shBuh, shEpo, shNetEpo, shNetBuh
    On Error Resume Next
    Application.EnableCancelKey = xlDisabled
    Application.ScreenUpdating = False
    Set shBuh = Sheets("бух")
    Set shEpo = Sheets("эпо")
    Set shNetEpo = Sheets("нет в эпо")
    Set shNetBuh = Sheets("есть в эпо нет в бух")
    r = 1
    For r = 1 To shBuh.Cells(shBuh.Rows.Count, 1).End(xlUp).Row
        If Application.CountIf(shEpo.Columns(1), shBuh.Cells(r, 1)) = 0 Then
            shNetEpo.Cells(shNetEpo.Cells(shNetEpo.Rows.Count, 1).End(xlUp).Row + 1, 1) = shBuh.Cells(r, 1)
        End If
    Next r
    r = 1
    For r = 1 To shEpo.Cells(shEpo.Rows.Count, 1).End(xlUp).Row
        If Application.CountIf(shBuh.Columns(1), shEpo.Cells(r, 1)) = 0 Then
            shNetBuh.Cells(shNetBuh.Cells(shNetBuh.Rows.Count, 1).End(xlUp).Row + 1, 1) = shEpo.Cells(r, 1)
        End If
    Next r
    Application.ScreenUpdating = True
    MsgBox "Done!"
End Sub
А как написать чтобы он копировал не только номер серийный но и название?
danika24 вне форума Ответить с цитированием
Старый 31.03.2016, 09:53   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
shNetEpo.Cells(shNetEpo.Cells(shNetEpo.Rows.Count, 1).End(xlUp).Row + 1, 1) = shBuh.Cells(r, 1)
shNetEpo.Cells(shNetEpo.Cells(shNetEpo.Rows.Count, 1).End(xlUp).Row + 1, 2) = shBuh.Cells(r, 2)
Код:
shNetBuh.Cells(shNetBuh.Cells(shNetBuh.Rows.Count, 1).End(xlUp).Row + 1, 1) = shEpo.Cells(r, 1)
shNetBuh.Cells(shNetBuh.Cells(shNetBuh.Rows.Count, 1).End(xlUp).Row + 1, 2) = shEpo.Cells(r, 2)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 31.03.2016, 10:34   #7
danika24
Пользователь
 
Регистрация: 20.07.2011
Сообщений: 47
По умолчанию

Спасибо большое понимаю что много прошу но заставили заполнять таблицу еще по этим данным . Надо чтобы заполнились поля таблицы в соответсвии с выборкой и взяли еще данные из листа данные о годе ввода в эксплуатацию.

Последний раз редактировалось danika24; 31.03.2016 в 13:04.
danika24 вне форума Ответить с цитированием
Старый 31.03.2016, 11:09   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Кста, Вас не смутило, что описание на 1 строку сместилось вниз? Надо удалить с макроса "+1"
Код:
shNetEpo.Cells(shNetEpo.Cells(shNetEpo.Rows.Count, 1).End(xlUp).Row + 1, 2) = shBuh.Cells(r, 2)
shNetBuh.Cells(shNetBuh.Cells(shNetBuh.Rows.Count, 1).End(xlUp).Row + 1, 2) = shEpo.Cells(r, 2)


upd:
Код:
Sub ExceuteSlut()
    Dim shNetEpo, shTblNetEpo, shData
    Set shNetEpo = Sheets("нет в эпо")
    Set shTblNetEpo = Sheets("таблица нет в эпо")
    Set shData = Sheets("данные")
    
    hz shNetEpo, shTblNetEpo, shData
    
    Set shNetEpo = Sheets("есть в эпо нет в бух")
    Set shTblNetEpo = Sheets("таблица нет в бух")
    Set shData = Sheets("данные")
    hz shNetEpo, shTblNetEpo, shData
    MsgBox "done!"
End Sub

Sub hz(sh1, sh2, shData)
    Dim i, r, Pos As Long
    Dim arr As Variant, arr2 As Variant, N As Variant
    
    r = sh1.Cells(sh1.Rows.Count, 1).End(xlUp).Row
    For i = 2 To r
        With sh2
            .Cells(i, 6) = sh1.Cells(i, 1)
            
            arr = shData.Range("A1:C" & shData.Range("A35000").End(xlUp).Row)
            arr2 = Application.Index(arr, 0, 2)
            
            If IsError(Application.Match(Application.Trim(.Cells(i, 6)), arr2, 0)) Then
                Pos = 0
            Else
                Pos = Application.Match(Application.Trim(.Cells(i, 6)), arr2, 0)
            End If
            arr2 = Application.Index(arr, 0, 1)
            N = Application.Index(arr2, Pos, 1)
            .Cells(i, 1) = N
            
            arr2 = Application.Index(arr, 0, 3)
            N = Application.Index(arr2, Pos, 1)
            .Cells(i, 8) = N
            
        End With
    Next i
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 31.03.2016 в 12:13.
Aleksandr H. вне форума Ответить с цитированием
Старый 31.03.2016, 12:21   #9
danika24
Пользователь
 
Регистрация: 20.07.2011
Сообщений: 47
По умолчанию

Это я увидела исправила сама спасибо. Я мало что могу пока учусь. Спасибо вам большое.
danika24 вне форума Ответить с цитированием
Старый 31.03.2016, 12:37   #10
danika24
Пользователь
 
Регистрация: 20.07.2011
Сообщений: 47
По умолчанию

Немного не то вышло с заполнением надо чтобы проставился год и тип оборудования который есть в списке данные имеено так как там есть.
danika24 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение значений Programmer_St PHP 1 03.10.2012 23:48
Сравнение значений vajtek Общие вопросы Delphi 2 23.08.2011 19:53
Сравнение значений в 2х столбцах и удаление лишних значений.. Tyr Microsoft Office Excel 2 16.12.2010 18:19
вставка значений из списка timtim Microsoft Office Excel 2 23.07.2009 16:17
вставка значений Iskin Microsoft Office Excel 0 27.10.2008 13:21