Страницы: 1
RSS
Поиск необходимого значение (города) по 2 и более условиям
 
Доброго времени суток, уважаемые форумчане. Всех с наступившей весной! Вылезла тут проблемка, хотелось бы узнать решаема ли она. Итак: есть таблица 3 на 7 строк, в первом столбце страны, в втором - условие, в третьем столицы. Требуется, используя ИНДЕКС, найти значение в 3 столбце, НО при выполнении условия. Формулой или кодом неважно (при наличии формулы в код я надеюсь и сам смогу обратить). Без учета условия формула более чем понятная  =ИНДЕКС(A1:C7;ПОИСКПОЗ(F1;A1:A7;0);3). А вот можно ли дополнительно выставить условие я не знаю
P.S.Заранее спасибо всем откликнувшимся
 
Цитата
OlegO написал:
ИНДЕКС с дополнительным условием
а если не индекс
Лень двигатель прогресса, доказано!!!
 
Сергей, то все уже - решения нет))
Изменено: Mershik - 02.03.2021 10:00:08
Не бойтесь совершенства. Вам его не достичь.
 
Если честно, то все равно, лишь бы был рабочий аналог в VBA (просто сейчас это решается циклом, хотелось бы заменить чисто из эстетики ;) )
 
Цитата
OlegO написал:
Если честно, то все равно,
но при этом вы теме дали конкретное название)
Тема: Поиск необходимого значение (города) по 2 и более условиям
Код
=ПРОСМОТР(2;1/(($A$1:$A$7=$F$1)*($B$1:$B$7=$F$2));$C$1:$C$7)
Изменено: Mershik - 02.03.2021 10:07:17
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Mershik написал:
дали конкретное название
Так-то да, Вы правы. Просто подумалось о таком варианте решения, но годится (да и то не жизненно важно) любой другой отличный от цикла
 
OlegO,
Цитата
OlegO написал:
просто сейчас это решается циклом,
Цитата
OlegO написал:
любой другой отличный от цикла
это что значит? о каких циклах?
Не бойтесь совершенства. Вам его не достичь.
 
Сейчас, в реальном файле, поиск необходимого значения осуществляется (успешно) через цикл. Исключительно для самообразования я попытался найти альтернативное решение, вдруг в следующий раз оно будет единственным?
 
OlegO, мда...не понятно ничего) ну формулы помогли (они кстати скорее всего так же работают на циклах)
Не бойтесь совершенства. Вам его не достичь.
 
OlegO, из названия темы должна быть понятна ЗАДАЧА. Предложите новое - модераторы поменяют.
 
Юрий М, посмотрите в #5 может подойдет
Цитата
Mershik написал:
Тема: Поиск необходимого значение (города) по 2 и более условиям
Не бойтесь совершенства. Вам его не достичь.
 
Mershik, вот напрасно я наверное стал пояснять подробности о циклах и прочих решениях не через ИНДЕКС :oops: . Ситуация проще на самом деле, просто хотелось узнать о возможности альтернативного решения (про то что некоторые формулы "внутри себя" работают как циклы я в курсе), чисто для сокращения строк кода. При этом мне кажется, что наличие нескольких вариантов решения одной задачи, всяко лучше чем одно, но если его нет, значит нет и вопрос закрыт.
 
OlegO,
Цитата
Mershik написал:
ну формулы помогли
?
Не бойтесь совершенства. Вам его не достичь.
 
Спасибо, Mershik за Ваш вариант, формула выдает правильный ответ, может, если нетрудно, покажете как то же самое кодом написать?
 
Мой вариант замены рабочей формулы от Mershik  =ПРОСМОТР(F2;1/(($A$1:$A$7=$F$1)*($B$1:$B$7=$F$2));$C$1:$C$7) на код выглядит так:
Код
q=Application.Lookup(2, 1 / (Range("A1:A7") = Range("F1")) * Range("B1:B7") = Range("F2"), Range("C1:C7"))
но выдает ошибку несовпадения типов. Что сейчас написано те так? Подскажите пожалуйста
Изменено: OlegO - 02.03.2021 11:08:32
 
Цитата
OlegO написал:
Lookup
Кажется это ВПР имею ввиду в VBA
Изменено: Mershik - 02.03.2021 11:32:39
Не бойтесь совершенства. Вам его не достичь.
 
Вы ошибаетесь, Mershik ВПР это VLookup. Не получается почему-то напрямую переписать Вашу формулу в код ,и как место ошибки выявить не пойму
 
OlegO, а точно - мой косяк) проще сделать загнать в массив и сделать цикл и все
так например
Код
Sub mrshkei()
Dim arr, i As Long, lr As Long
lr = Cells(Rows.Count, 1).End(xlUp).Row
arr = Range("A1:C" & lr)
x1 = Range("F1"): x2 = Range("F2")
For i = LBound(arr) To UBound(arr)
    If arr(i, 1) = x1 And arr(i, 2) = x2 Then Range("H1") = arr(i, 3): Exit Sub
Next i
End Sub
Изменено: Mershik - 02.03.2021 11:53:42
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
Mershik написал:
загнать в массив и сделать цикл
дык так и сделано, все работает и считает правильно, но вот сидит теперь мысль об адаптации Вашего формульного варианта и не убегает 8-0  
 
В модуль листа
Код
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("F1:F2")) Is Nothing Then
Dim iLastRow As Long
Dim FoundContry As Range
Dim FAdr As String
Dim j As Integer
    Application.EnableEvents = False
   iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
If WorksheetFunction.CountIf(Range("A1:A" & iLastRow), Range("F1")) >= Range("F2") Then
  Set FoundContry = Columns("A").Find(Range("F1"), , xlValues, xlWhole)
  If Not FoundContry Is Nothing Then
     FAdr = FoundContry.Address
     j = 1
   Do
     If j = Range("F2") Then
       Range("H1") = FoundContry.Offset(, 2)
       Exit Do
     End If
      Set FoundContry = Columns("A").FindNext(FoundContry)
      j = j + 1
   Loop While FoundContry.Address <> FAdr
  End If
Else
  MsgBox "Количество стран в столбце А меньше чем в условии"
End If
 End If
    Application.EnableEvents = True
End Sub
 
Спасибо и Вам, Kuzmich за ваш вариант. Но это тоже цикл, а вот помочь мне с адаптацией формулы (рабочей!) Вы бы не могли?
 
Цитата
помочь мне с адаптацией формулы
Нет, к сожалению, я не формулист
 
Цитата
Kuzmich написал:
я не формулист
тогда уж не переводчик с формульного ;)  
Страницы: 1
Наверх