Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск и подставка из ячейки на против - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск и подставка из ячейки на против (Макросы/Sub)
Поиск и подставка из ячейки на против
Dilemma086 Дата: Среда, 25.11.2015, 09:59 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Подскажите, как сделать в VBA. Имеется лист1 с артикулами, лист2 с артикулами ценой и складом. Как найти совпадающие артикулы и подставить значения цены и склада на лист1. Именно VBA, просьба ВПР не предлагать. Спасибо.
К сообщению приложен файл: ex_25.11.2015.xlsx (10.6 Kb)
 
Ответить
СообщениеПодскажите, как сделать в VBA. Имеется лист1 с артикулами, лист2 с артикулами ценой и складом. Как найти совпадающие артикулы и подставить значения цены и склада на лист1. Именно VBA, просьба ВПР не предлагать. Спасибо.

Автор - Dilemma086
Дата добавления - 25.11.2015 в 09:59
Manyasha Дата: Среда, 25.11.2015, 10:25 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Dilemma086, так подойдет?
[vba]
Код
Sub ее()
    With Sheets(1)
        .[b2].CurrentRegion.Resize(, 2).Offset(1, 1).ClearContents
        For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            Set art = Sheets(2).Columns(1).Find(.Cells(i, 1))
            If Not art Is Nothing Then
                Cells(i, 2) = art.Offset(0, 1).Value
                Cells(i, 3) = art.Offset(0, 2)
            End If
        Next i
    End With
End Sub
[/vba]
К сообщению приложен файл: ex_25.11.2015-1.xlsm (18.9 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеDilemma086, так подойдет?
[vba]
Код
Sub ее()
    With Sheets(1)
        .[b2].CurrentRegion.Resize(, 2).Offset(1, 1).ClearContents
        For i = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
            Set art = Sheets(2).Columns(1).Find(.Cells(i, 1))
            If Not art Is Nothing Then
                Cells(i, 2) = art.Offset(0, 1).Value
                Cells(i, 3) = art.Offset(0, 2)
            End If
        Next i
    End With
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 25.11.2015 в 10:25
Dilemma086 Дата: Среда, 25.11.2015, 10:42 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Да, работает! Очень признателен, спасибо Вам!!!
 
Ответить
СообщениеДа, работает! Очень признателен, спасибо Вам!!!

Автор - Dilemma086
Дата добавления - 25.11.2015 в 10:42
Dilemma086 Дата: Четверг, 26.11.2015, 09:55 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
можете пояснить, что означает эта строчка?
[vba]
Код
.[b2].CurrentRegion.Resize(, 2).Offset(1, 1).ClearContents
[/vba]


Сообщение отредактировал Manyasha - Четверг, 26.11.2015, 10:29
 
Ответить
Сообщениеможете пояснить, что означает эта строчка?
[vba]
Код
.[b2].CurrentRegion.Resize(, 2).Offset(1, 1).ClearContents
[/vba]

Автор - Dilemma086
Дата добавления - 26.11.2015 в 09:55
SLAVICK Дата: Четверг, 26.11.2015, 10:33 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
сдесь в одной строке несколько действий:
выделение смежного диапазона к ячейке .[b2]
уменьшение его до 2-х столбцов
сдвиг на один столбец
очистка.
Чтобы лучше понять - пройдитесь дебугером(f8) по коду под спойлером и смотрите за изменением выделения на листе.:


Правда я не люблю пользоваться CurrentRegion - возможны ошибки, если будут пустые строки.
Я - бы заменил эту строку на:
[vba]
Код
Range("b2:c" & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents
[/vba]
как по мне так и проще для понимания, и точнее :D


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 26.11.2015, 10:45
 
Ответить
Сообщениесдесь в одной строке несколько действий:
выделение смежного диапазона к ячейке .[b2]
уменьшение его до 2-х столбцов
сдвиг на один столбец
очистка.
Чтобы лучше понять - пройдитесь дебугером(f8) по коду под спойлером и смотрите за изменением выделения на листе.:


Правда я не люблю пользоваться CurrentRegion - возможны ошибки, если будут пустые строки.
Я - бы заменил эту строку на:
[vba]
Код
Range("b2:c" & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents
[/vba]
как по мне так и проще для понимания, и точнее :D

Автор - SLAVICK
Дата добавления - 26.11.2015 в 10:33
Manyasha Дата: Четверг, 26.11.2015, 10:40 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Dilemma086, CurrentRegion - возвращает текущий диапазон для ячейки В2, т.е. диапазон до пустых строк и столбцов, чтобы наглядно посмотреть, можете написать
[vba]
Код
[b2].CurrentRegion.select
[/vba]
Resize(, 2) - берем только 2 столбца текущего диапазона
Offset(1, 1) - сдвигаем все на 1 строчку вниз и на 1 столбец вправо
[vba]
Код
[b2].CurrentRegion.Resize(, 2).Offset(1, 1).select' проверка
[/vba]
полученную область очищаем (ClearContents).


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеDilemma086, CurrentRegion - возвращает текущий диапазон для ячейки В2, т.е. диапазон до пустых строк и столбцов, чтобы наглядно посмотреть, можете написать
[vba]
Код
[b2].CurrentRegion.select
[/vba]
Resize(, 2) - берем только 2 столбца текущего диапазона
Offset(1, 1) - сдвигаем все на 1 строчку вниз и на 1 столбец вправо
[vba]
Код
[b2].CurrentRegion.Resize(, 2).Offset(1, 1).select' проверка
[/vba]
полученную область очищаем (ClearContents).

Автор - Manyasha
Дата добавления - 26.11.2015 в 10:40
Dilemma086 Дата: Четверг, 26.11.2015, 14:18 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Можно Вас попросить на другом примере показать как это сделать?
К сообщению приложен файл: ex_26.11.2015.zip (48.9 Kb)
 
Ответить
СообщениеМожно Вас попросить на другом примере показать как это сделать?

Автор - Dilemma086
Дата добавления - 26.11.2015 в 14:18
SLAVICK Дата: Четверг, 26.11.2015, 14:36 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Вот немного изменил код Manyasha:
[vba]
Код
Sub ee()
    With Sheets(1)
        .Range("d2:n" & .Cells(.Rows.Count, "C").End(xlUp).Row).ClearContents
        For i = 2 To .Cells(.Rows.Count, "C").End(xlUp).Row
            Set art = Sheets(2).Columns(4).Find(.Cells(i, "C"))
            If Not art Is Nothing Then
                .Cells(i, "g") = Sheets(2).Cells(art.Row, "o").Value
                .Cells(i, "n") = Sheets(2).Cells(art.Row, "p").Value
            End If
        Next i
    End With
End Sub
[/vba]
К сообщению приложен файл: ex_26.11.2015-3.zip (55.3 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 26.11.2015, 14:38
 
Ответить
СообщениеВот немного изменил код Manyasha:
[vba]
Код
Sub ee()
    With Sheets(1)
        .Range("d2:n" & .Cells(.Rows.Count, "C").End(xlUp).Row).ClearContents
        For i = 2 To .Cells(.Rows.Count, "C").End(xlUp).Row
            Set art = Sheets(2).Columns(4).Find(.Cells(i, "C"))
            If Not art Is Nothing Then
                .Cells(i, "g") = Sheets(2).Cells(art.Row, "o").Value
                .Cells(i, "n") = Sheets(2).Cells(art.Row, "p").Value
            End If
        Next i
    End With
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 26.11.2015 в 14:36
Dilemma086 Дата: Четверг, 26.11.2015, 14:53 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Во, теперь совсем хорошо ) Спасибо Вам просто наигромаднейшее!!!
 
Ответить
СообщениеВо, теперь совсем хорошо ) Спасибо Вам просто наигромаднейшее!!!

Автор - Dilemma086
Дата добавления - 26.11.2015 в 14:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск и подставка из ячейки на против (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!