Страницы: 1
RSS
ВПР в VBA помогите написать ...
 
Доброго вечера, уважамые ГУРУ Excel и просто посетители!  
 
Прошу Вашей помощи в корректировке функции ВПР в макросе.    
 
См. файл.    
 
С уважением,
 
{quote}{login=Пахом}{date=31.10.2010 12:32}{thema=ВПР в VBA помогите написать ...}{post}Доброго вечера, уважамые ГУРУ Excel и просто посетители!  
 
Прошу Вашей помощи в корректировке функции ВПР в макросе.    
 
См. файл.    
 
С уважением,{/post}{/quote}  
ActiveCell.FormulaLocal = _  
       "=ВПР(A2;Лист1!A2:C4;3;ЛОЖЬ)=""жилая"""
Спасибо
 
Если уж макрос, то зачем формулы?
 
Это я охотника спросил :-)
 
{quote}{login=Юрий М}{date=31.10.2010 12:58}{thema=}{post}Это я охотника спросил :-){/post}{/quote}  
это я понял :)  
 
только не понял что он хочет или vlookup в vba  или то что я написал ?
Спасибо
 
А я не понял, почему Пахома зовут Любовь.
 
{quote}{login=Юрий М}{date=31.10.2010 01:05}{thema=}{post}А я не понял, почему Пахома зовут Любовь.{/post}{/quote}  
 
Доброй ночи, Юрий М и R Dmitry!  
 
Мне необходимо проверить условие: равно ли значение формулы - условию "жилая", и если да, то выдать сообщение ОК, если нет, то Неокей.    
Т.е. необходима связка ВПР и функции If then  
Всё.
 
Доброй ночи! Сейчас Дмитрий нарисует без ВПР проверку, а я пошёл спать - завтра на сутки.
 
{quote}{login=Юрий М}{date=31.10.2010 01:26}{thema=}{post}Доброй ночи! Сейчас Дмитрий нарисует без ВПР проверку, а я пошёл спать - завтра на сутки.{/post}{/quote}  
 
Ого! Приятный Вам снов.    
 
ПС: а Вы на какую работу ходите? Простите за нескромность, просто интересно.    
 
ПС: у меня компьютер носит имя Любовь.  
С уважением,
 
Option Explicit  
Sub ВПР()  
'   помогите убрать ошибку  
Dim i As Integer  
   For i = 1 To 3  
   If WorksheetFunction.VLookup(Cells(i + 1, 1), Sheets(1).Range("A2:C4"), 3, False) = "жилая" Then  
       Cells(i + 1, 3) = "истина"  
   Else  
       Cells(i + 1, 3) = "ложь"  
   End If  
       i = i + 1  
   Next i  
End Sub
 
i = i + 1 зачем?
 
{quote}{login=Hugo}{date=31.10.2010 11:29}{thema=}{post}i = i + 1 зачем?{/post}{/quote}  
 
всем доброго утра!  
 
немаленькая функция получается ... но ! главное чтоб работала :)  
 
а функцию нельзя изобразить в одну строчку как эту функцию:  
If WorksheetFunction.CountIf(Sheets("Квартал").Cells.Columns(2), Target) > 1 Then  
 
С уважением,
 
i = i + 1    
эту строчку надо убрать
 
искомое значение Cells(i + 1, 1) - объясните пожалуйста эту часть кода
 
если перечень этажей на листе 2 не совпадает с перечнем на листе 1, то выдаётся ошибка.    
 
Суть ещё раз:  
Мне просто нужно найти по этажу значение в соседнем столбце, и если это значение равно "жилая" сделать одно действие (True), иначе другое (Else).  
 
С уважением,
 
Исходный текст макроса записан на листе 2  
формулой вы пишите ВПР(A2;Лист1!A2:C4;3;ЛОЖЬ)  
в макросе  
Cells(i + 1, 1) -  это ячейка столбца А на листе 2,    
где у вас отображается этаж ( при i=1 это ячейка А2)  
Sheets(1).Range("A2:C4") это Лист1!A2:C4  
Мне кажется, что поиск соответствия лучше проводить  
по столбцу квартира
 
Благодарю Вас.  
 
Всё понятно объяснили. Но есть ошибка при работе макроса - см. пожалуйста файл.    
можно ли поправить?
 
{quote}{login=Kuzmich}{date=31.10.2010 12:57}{thema=Re}{post}Исходный текст макроса записан на листе 2  
формулой вы пишите ВПР(A2;Лист1!A2:C4;3;ЛОЖЬ)  
в макросе  
Cells(i + 1, 1) -  это ячейка столбца А на листе 2,    
где у вас отображается этаж ( при i=1 это ячейка А2)  
Sheets(1).Range("A2:C4") это Лист1!A2:C4  
Мне кажется, что поиск соответствия лучше проводить  
по столбцу квартира{/post}{/quote}  
 
Всё, я разобрался, теперь буду эксперементировать.    
 
Благодарю Вас, ГУРУ Excel!  
 
С уважением,
 
На листе 1 у вас диапазон данных А2:C24  
этот же диапазон должен быть и в макросе  
Sheets(1).Range("A2:C24")  
 
Sub ВПР()  
' помогите убрать ошибку  
Dim i As Integer  
For i = 1 To 100  
If Cells(i + 1, 1) <> "" Then  
If WorksheetFunction.VLookup(Cells(i + 1, 1), Sheets(1).Range("A2:C24"), 3, False) = "жилая" Then  
Cells(i + 1, 3) = "истина"  
Else  
Cells(i + 1, 3) = "ложь"  
End If  
End If  
Next i  
End Sub  
 
Но это не убережет макрос от ошибки,    
если номера этажа на листе 2 вдруг не  
окажется на листе 1
 
Убережет on error resume...
Я сам - дурнее всякого примера! ...
 
On Error Resume Next
 
{quote}{login=Kuzmich}{date=31.10.2010 02:08}{thema=Re}{post}On Error Resume Next{/post}{/quote}  
 
спасибо :)
 
Поиск соответствия по номеру квартиры
 
не коротко но быстро  :) Юрий просил без ВПР ...:)  
Sub Макрос1()  
Dim lR&, lR1&, i&, j&, arr, arr1, arrF  
lR = Sheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row  
lR1 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row  
ReDim arrF(1 To lR1 - 1, 1 To 1)  
 
arr = Sheets(1).Range("A2:C" & lR).Value  
arr1 = Sheets(2).Range("A2:A" & lR1).Value  
For i = 1 To UBound(arr1)  
      For j = 1 To UBound(arr)  
        If arr1(i, 1) = arr(j, 1) Then  
           If arr(j, 3) = "жилая" Then arrF(i, 1) = "ИСТИНА"  
           If arr(j, 3) = "нежилая" Then arrF(i, 1) = "ЛОЖЬ"  
         End If  
       Next j  
Next i  
Sheets("Лист2").Range("C2:C" & lR1) = arrF  
End Sub
Спасибо
 
{quote}{login=R Dmitry}{date=31.10.2010 03:21}{thema=}{post}не коротко но быстро  :) Юрий просил без ВПР ...:)  
Sub Макрос1()  
Dim lR&, lR1&, i&, j&, arr, arr1, arrF  
lR = Sheets("Лист1").Cells(Rows.Count, 1).End(xlUp).Row  
lR1 = Sheets("Лист2").Cells(Rows.Count, 1).End(xlUp).Row  
ReDim arrF(1 To lR1 - 1, 1 To 1)  
 
arr = Sheets(1).Range("A2:C" & lR).Value  
arr1 = Sheets(2).Range("A2:A" & lR1).Value  
For i = 1 To UBound(arr1)  
      For j = 1 To UBound(arr)  
        If arr1(i, 1) = arr(j, 1) Then  
           If arr(j, 3) = "жилая" Then arrF(i, 1) = "ИСТИНА"  
           If arr(j, 3) = "нежилая" Then arrF(i, 1) = "ЛОЖЬ"  
         End If  
       Next j  
Next i  
Sheets("Лист2").Range("C2:C" & lR1) = arrF  
End Sub{/post}{/quote}  
 
Ого! Спасибо :)
 
{quote}{login=Kuzmich}{date=31.10.2010 03:20}{thema=Re}{post}Поиск соответствия по номеру квартиры{/post}{/quote}  
 
Псибо Kuzmich :)  
 
С уважением,
 
Дык, пора определиться: Василий - Пахом - Охотник.  
С уважением,  Сергей.  
 
99993 - каре?
Я сам - дурнее всякого примера! ...
Страницы: 1
Читают тему
Наверх