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

Вход

Регистрация

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

 

= Мир MS Excel/Поиск соответствующего значения по VBA впр - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск соответствующего значения по VBA впр (Макросы/Sub)
Поиск соответствующего значения по VBA впр
ant6729 Дата: Суббота, 06.05.2017, 23:18 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 322
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Добрый вечер!
В приложенном примере кода в модуле лист1 в колонку11 лист1 не могу вывести впр значения по пятой колонке листа1 при поиске в лист2 по 2 и 3 колонкам.
Прошу прощения за, возможно, непонятное описание.

Подскажите, пожалуйста, как это реализовать это через событие по дк.
К сообщению приложен файл: 6060946.xlsm(16Kb)


Сообщение отредактировал ant6729 - Суббота, 06.05.2017, 23:52
 
Ответить
СообщениеДобрый вечер!
В приложенном примере кода в модуле лист1 в колонку11 лист1 не могу вывести впр значения по пятой колонке листа1 при поиске в лист2 по 2 и 3 колонкам.
Прошу прощения за, возможно, непонятное описание.

Подскажите, пожалуйста, как это реализовать это через событие по дк.

Автор - ant6729
Дата добавления - 06.05.2017 в 23:18
ant6729 Дата: Воскресенье, 07.05.2017, 00:12 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 322
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Всем спасибо, за участие...) написал, но не через впр...
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Target = Cells(1, 11)
    lr1 = Sheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row
    lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
    For i = 1 To lr1
        For j = 1 To lr2
            If Sheets("Лист1").Cells(i, 5).Value = Sheets("Лист2").Cells(j, 2).Value Then
                Sheets("Лист1").Cells(i, 11).Value = Sheets("Лист2").Cells(j, 3).Value
            End If
        Next j
    Next i
End Sub
[/vba]

Впр, наверное, было лишнее.. Возможно ли оно было, даже не знаю.


Сообщение отредактировал ant6729 - Воскресенье, 07.05.2017, 00:15
 
Ответить
СообщениеВсем спасибо, за участие...) написал, но не через впр...
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Target = Cells(1, 11)
    lr1 = Sheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row
    lr2 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row
    For i = 1 To lr1
        For j = 1 To lr2
            If Sheets("Лист1").Cells(i, 5).Value = Sheets("Лист2").Cells(j, 2).Value Then
                Sheets("Лист1").Cells(i, 11).Value = Sheets("Лист2").Cells(j, 3).Value
            End If
        Next j
    Next i
End Sub
[/vba]

Впр, наверное, было лишнее.. Возможно ли оно было, даже не знаю.

Автор - ant6729
Дата добавления - 07.05.2017 в 00:12
Pelena Дата: Воскресенье, 07.05.2017, 07:50 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11483
Репутация: 2554 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Возможно ли оно было
Ваш изначальный макрос можно было так доработать
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    On Error Resume Next
    If Target = Cells(1, 11) Then
        lr1 = Cells(Rows.Count, 1).End(xlUp).Row
        For i = 2 To lr1
            Cells(i, 11).Value = Application.WorksheetFunction.VLookup(Cells(i, 5).Value, Sheets("Лист2").Range("B1:C1000"), 2, False)
            If Err Then Cells(i, 11).Value = "нет данных": Err = 0
        Next i
    End If
End Sub
[/vba]


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение
Возможно ли оно было
Ваш изначальный макрос можно было так доработать
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    On Error Resume Next
    If Target = Cells(1, 11) Then
        lr1 = Cells(Rows.Count, 1).End(xlUp).Row
        For i = 2 To lr1
            Cells(i, 11).Value = Application.WorksheetFunction.VLookup(Cells(i, 5).Value, Sheets("Лист2").Range("B1:C1000"), 2, False)
            If Err Then Cells(i, 11).Value = "нет данных": Err = 0
        Next i
    End If
End Sub
[/vba]

Автор - Pelena
Дата добавления - 07.05.2017 в 07:50
ant6729 Дата: Воскресенье, 07.05.2017, 12:08 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 322
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Спасибо, Pelena!!!

[vba]
Код
Cells(i, 5).Value = n
[/vba] неверно думал, что сработает.


Сообщение отредактировал ant6729 - Воскресенье, 07.05.2017, 12:10
 
Ответить
СообщениеСпасибо, Pelena!!!

[vba]
Код
Cells(i, 5).Value = n
[/vba] неверно думал, что сработает.

Автор - ant6729
Дата добавления - 07.05.2017 в 12:08
Pelena Дата: Воскресенье, 07.05.2017, 12:16 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11483
Репутация: 2554 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Можно
[vba]
Код
n=Cells(i, 5).Value
[/vba] и потом n подставить в формулу.
Неверно, что у Вас эта строчка стояла ДО цикла, и в формуле вместо n было ii


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеМожно
[vba]
Код
n=Cells(i, 5).Value
[/vba] и потом n подставить в формулу.
Неверно, что у Вас эта строчка стояла ДО цикла, и в формуле вместо n было ii

Автор - Pelena
Дата добавления - 07.05.2017 в 12:16
ant6729 Дата: Воскресенье, 07.05.2017, 13:11 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 322
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Я почему - то думал, это в "шапку" надо писать...
Сейчас попробовал, да работает... Однако до первого не найденного
Добавил [vba]
Код
On Error Resume Next
[/vba] и [vba]
Код
If Err Then Cells(i, 11).Value = "нет данных": Err = 0
[/vba] и понял, что зачем. Спасибо!
 
Ответить
СообщениеЯ почему - то думал, это в "шапку" надо писать...
Сейчас попробовал, да работает... Однако до первого не найденного
Добавил [vba]
Код
On Error Resume Next
[/vba] и [vba]
Код
If Err Then Cells(i, 11).Value = "нет данных": Err = 0
[/vba] и понял, что зачем. Спасибо!

Автор - ant6729
Дата добавления - 07.05.2017 в 13:11
ant6729 Дата: Понедельник, 08.05.2017, 02:57 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 322
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Подскажите, пожалуйста, если натыкаемся на ошибку, то выходим из процедуры, а если ошибки нет, то процедура продолжается и выполняется другая строка.

Получается что-то вроде, но это не правильно.

[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    On Error Resume Next
    If Target = Cells(1, 11) Then
        lr1 = Cells(Rows.Count, 1).End(xlUp).Row
        For i = 2 To lr1
            Cells(i, 11).Value = Application.WorksheetFunction.VLookup(Cells(i, 5).Value, Sheets("Лист2").Range("B1:C1000"), 2, False)
  If Err Then Cells(i, 11).Value = "нет данных": Err = 0
    Next i  
Exit Sub
    Else
call sub2
  
    End If
End Sub
[/vba]
 
Ответить
СообщениеПодскажите, пожалуйста, если натыкаемся на ошибку, то выходим из процедуры, а если ошибки нет, то процедура продолжается и выполняется другая строка.

Получается что-то вроде, но это не правильно.

[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    On Error Resume Next
    If Target = Cells(1, 11) Then
        lr1 = Cells(Rows.Count, 1).End(xlUp).Row
        For i = 2 To lr1
            Cells(i, 11).Value = Application.WorksheetFunction.VLookup(Cells(i, 5).Value, Sheets("Лист2").Range("B1:C1000"), 2, False)
  If Err Then Cells(i, 11).Value = "нет данных": Err = 0
    Next i  
Exit Sub
    Else
call sub2
  
    End If
End Sub
[/vba]

Автор - ant6729
Дата добавления - 08.05.2017 в 02:57
Pelena Дата: Понедельник, 08.05.2017, 07:29 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11483
Репутация: 2554 ±
Замечаний: 0% ±

Excel 2010, 2016 & Mac Excel
Непонятно, где должна выполняться "другая строка", в цикле для каждой ячейки или после цикла один раз?
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    On Error Resume Next
    If Target = Cells(1, 11) Then
        lr1 = Cells(Rows.Count, 1).End(xlUp).Row
        For i = 2 To lr1
            Cells(i, 11).Value = Application.WorksheetFunction.VLookup(Cells(i, 5).Value, Sheets("Лист2").Range("B1:C1000"), 2, False)
            If Err Then Exit Sub
            call sub2
    Next i  
    'call sub2
    End If
End Sub
[/vba]


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
СообщениеНепонятно, где должна выполняться "другая строка", в цикле для каждой ячейки или после цикла один раз?
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    On Error Resume Next
    If Target = Cells(1, 11) Then
        lr1 = Cells(Rows.Count, 1).End(xlUp).Row
        For i = 2 To lr1
            Cells(i, 11).Value = Application.WorksheetFunction.VLookup(Cells(i, 5).Value, Sheets("Лист2").Range("B1:C1000"), 2, False)
            If Err Then Exit Sub
            call sub2
    Next i  
    'call sub2
    End If
End Sub
[/vba]

Автор - Pelena
Дата добавления - 08.05.2017 в 07:29
ant6729 Дата: Понедельник, 08.05.2017, 08:13 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 322
Репутация: 2 ±
Замечаний: 40% ±

Excel 2010
Спасибо, Pelena!!!
Был нужен второй вариант
 
Ответить
СообщениеСпасибо, Pelena!!!
Был нужен второй вариант

Автор - ant6729
Дата добавления - 08.05.2017 в 08:13
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Поиск соответствующего значения по VBA впр (Макросы/Sub)
Страница 1 из 11
Поиск:

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