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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2016, 01:44   #1
NeDobryj
Новичок
Джуниор
 
Регистрация: 18.12.2016
Сообщений: 4
По умолчанию Поиск и копирование совпадений на нескольких листах

Добрый день.

Как произвести копирование нескольких ячеек (наименование, кофицент, количество) из листа "Temp" на лист "Смета" только если значение ячейки "Temp".C#(наименование) найдено на листе "Прайс-лист".A:A (наименование)

Интересует пример макросом VBA, впр и индекс\поискпоз - не подходят...
  • Temp - Лист с временными данными.
  • Смета - лист где должны проводится расчеты
  • Прайс лист - База номенклатуры по которой будет проводится расчет.
Если можно пример с комментариями, что бы разобраться в коде.
Вложения
Тип файла: xlsx Расчет.xlsx (10.5 Кб, 17 просмотров)
NeDobryj вне форума Ответить с цитированием
Старый 18.12.2016, 15:05   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
Sub Macros()
    Dim sh As Worksheet, sh2 As Worksheet, sh3 As Worksheet
    Dim rng As Range, i As Long, j As Long, r As Long, sh2r As Long
    Set sh = Sheets("Temp")
    Set sh2 = Sheets("Прайс-Лист")
    Set sh3 = Sheets("Смета")
    ' строк в прайсе
    sh2r = sh2.Cells(sh2.Rows.Count, 1).End(xlUp).Row
    With sh
    ' перебираем елементы С на темпе
        For i = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
            ' сравниваем со списком листа Прайс-Лист
            For j = 1 To sh2r
                 ' найдено совпадение
                If sh2.Cells(j, "A") = .Cells(i, "C") Then
                ' последняя строка Сметы
                    r = sh3.Cells(sh3.Rows.Count, 1).End(xlUp).Row + 1
                    ' перенос значений на смету
                    .Range(.Cells(i, "C"), .Cells(i, "E")).Copy _
                            sh3.Cells(r, "A")
                    ' перенос цены на смету
                    sh3.Cells(r, "D") = sh2.Cells(j, "B")
                    ' выход из цикла
                    Exit For
                End If
            Next j
        Next
    End With
    Set sh = Nothing
    Set sh2 = Nothing
    Set sh3 = Nothing
End Sub
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 18.12.2016, 15:20   #3
NeDobryj
Новичок
Джуниор
 
Регистрация: 18.12.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Код:
Sub Macros()
    Dim sh As Worksheet, sh2 As Worksheet, sh3 As Worksheet
    Dim rng As Range, i As Long, j As Long, r As Long, sh2r As Long
    Set sh = Sheets("Temp")
    Set sh2 = Sheets("Прайс-Лист")
    Set sh3 = Sheets("Смета")
    ' строк в прайсе
    sh2r = sh2.Cells(sh2.Rows.Count, 1).End(xlUp).Row
    With sh
    ' перебираем елементы С на темпе
        For i = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
            ' сравниваем со списком листа Прайс-Лист
            For j = 1 To sh2r
                 ' найдено совпадение
                If sh2.Cells(j, "A") = .Cells(i, "C") Then
                ' последняя строка Сметы
                    r = sh3.Cells(sh3.Rows.Count, 1).End(xlUp).Row + 1
                    ' перенос значений на смету
                    .Range(.Cells(i, "C"), .Cells(i, "E")).Copy _
                            sh3.Cells(r, "A")
                    ' перенос цены на смету
                    sh3.Cells(r, "D") = sh2.Cells(j, "B")
                    ' выход из цикла
                    Exit For
                End If
            Next j
        Next
    End With
    Set sh = Nothing
    Set sh2 = Nothing
    Set sh3 = Nothing
End Sub
Спасибо огромное, то что нужно!
NeDobryj вне форума Ответить с цитированием
Старый 18.12.2016, 15:34   #4
NeDobryj
Новичок
Джуниор
 
Регистрация: 18.12.2016
Сообщений: 4
По умолчанию

Как как добавить проверку по симвовам, к примеру если первые 200 символов совпадают?
NeDobryj вне форума Ответить с цитированием
Старый 18.12.2016, 16:53   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от NeDobryj Посмотреть сообщение
первые 200 символов совпадают?
http://www.homeandlearn.org/left_and...functions.html
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 19.12.2016, 04:00   #6
NeDobryj
Новичок
Джуниор
 
Регистрация: 18.12.2016
Сообщений: 4
По умолчанию

Код отличный, выполняет то что нужно... вопрос в следующем, если мне нужно значение которое не совпало, добавить в прайс лист, по условию:
Код:
                If .Cells(i, "C").Offset(0, 1) <> "" Then
                    q = sh2.Cells(sh2.Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(i, "C").Copy _
                        sh2.Cells(q, "A")
                    Exit For
                End If
Как правильно встроить этот код в макрос, else, не подходит, макрос дублирует значение...
Понимаю что это нужно сделать после перебора по совпадению..

Последний раз редактировалось NeDobryj; 19.12.2016 в 04:03.
NeDobryj вне форума Ответить с цитированием
Старый 19.12.2016, 08:19   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

введите логическую переменную, например, которая принимает true если найдено совпадение, иначе false. после цикла for проверить и если она false - копировать
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск одинаковых ячеек в нескольких листах. R-oksana Microsoft Office Excel 5 11.12.2016 00:36
Поиск нескольких совпадений в столбце и вывод на новую страницу SidSide Microsoft Office Excel 0 18.08.2016 17:43
сводная таблица при объединенных ячейках или поиск повторов на нескольких листах Море Microsoft Office Excel 4 06.05.2016 17:08
Поиск совпадений на разных листах и столбцах Sash414 Microsoft Office Excel 2 30.11.2011 22:17
Поиск совпадений в нескольких таблицах Macklay SQL, базы данных 13 29.07.2011 15:06