Страницы: 1
RSS
Поиск на соседнем листе числа или текста по определенному значению
 
Добрый день! Помогите, пожалуйста, подкорректировать формулу. В свое время встала задача поиска значений с другого листа по номеру этого листа. Сделал тогда формулу: с помощью формул ИНДЕКС и ДВССЫЛКА по номеру листа на нем искалось значение из одного фиксированного столбца и выводилось значение из другого фиксированного же столбца. Теперь данные на листах поменялись таким образом, что столбы перестали быть фиксированными, и теперь искомый текст может располагаться в диапазоне столбцов, а значения которые нужно вернуть находятся справа от искомого текста на некотором нефиксированнном расстоянии (первое число или текст справа от него). Помогите, пожалуйста, переделать формулу, чтобы поиск производился не в определенных столбцах, а в диапазоне. По этому тексту, конечно, сложно понять, но в примере постарался все расписать
 
Валерий Анисомов, чем вам ВПР не подходит?
 
ВПР не ищет значения по номеру листа, и колонки получаются нефиксированными
 
наименования "Итого по п.4", "Итого по п.5" и т.д. ниже могут повторятся? если да, то в том же столбце, в котором встретился первый раз, или может встречаться в разных столбцах?

Лучше фрагмент из настоящего файла.
Изменено: adike - 27.08.2018 14:41:09
 
Код
Public Function iFind(ByVal WathFindText$, ByVal WathFindColumns As Range, ByVal ValueFindColumns As Range) As Variant
    Dim r As Range
    Dim row&
    For Each r In WathFindColumns
        If r.Value = WathFindText$ Then
            row& = r.row
            Exit For
        End If
    Next
    For Each r In ValueFindColumns
        If r.row = row& And r.Value <> "" Then
            iFind = r.Value
            Exit For
        End If
    Next
End Function
Разместить в модулях

формула для ячейки (название листа сцепить думаю не составит труда ;))
Код
=iFind(C9;'123'!G12:I17;'123'!N12:Q17)
Изменено: ivanok_v2 - 27.08.2018 14:49:47
 
Цитата
Помогите, пожалуйста, переделать формулу,
Я формулами не умею. Вот попробуйте макрос, запускать с листа Пример
Код
Sub iValue()
Dim i As Long
Dim iLastRow As Long
Dim FoundCell As Range
Dim j As Integer
   iLastRow = Cells(Rows.Count, "B").End(xlUp).Row
   Range("D9:D" & iLastRow).ClearContents
  For i = 9 To iLastRow
   With Worksheets(CStr(Cells(i, "B")))
    Set FoundCell = .Cells.Find(Cells(i, "C"), , xlValues, xlWhole)
     If Not FoundCell Is Nothing Then
        j = 0
      Do
        j = j + 1
      Loop While IsEmpty(.Cells(FoundCell.Row, FoundCell.Column + j))
        Cells(i, "D") = .Cells(FoundCell.Row, FoundCell.Column + j)
     End If
   End With
  Next
End Sub

 
Цитата
adike написал:
наименования "Итого по п.4", "Итого по п.5" и т.д. ниже могут повторятся? если да, то в том же столбце, в котором встретился первый раз, или может встречаться в разных столбцах?
Наименования не повторяются, на каждом листе встречается только 1 раз; из реального файла будет очень непонятный фрагмент, слишком там все раскидано, нет форматирования и т.д.

ivanok_v2, Kuzmich Огромное спасибо за макросы!
Но было бы здорово, если бы формулой  :)  
 
Цитата
Валерий Анисомов написал:
Но было бы здорово, если бы формулой
Вам мед, так ложкой ))
 
К сожалению макрос не очень удобен   :(  
 
вариант с доп столбцом
 
Исправил. Работает в диапазоне A1:Z30.
Изменено: Wiss - 27.08.2018 17:48:41
Я не волшебник, я только учусь.
 
Wiss, работает! Только даже расширить диапазон не могу. Не подскажите как его увеличить до, например, A1:Z2000?
Изменено: Валерий Анисомов - 27.08.2018 18:56:41
 
Странно, ответ не отправился. Вероятно, можно $Z$30 во всей формуле поменять на нужное значение, если не поможет, то целиком с формулой разбираться придётся там из-за необходимости использовать двссыл совсем дурдом происходит, но все промежуточные этапы я постарался сохранить.
Я не волшебник, я только учусь.
 
Разобрался, надо было после смены диапазона жать Ctrl+Shift+Enter. Еще раз спасибо всем за помощь!
Страницы: 1
Наверх