2013-11-12 3 views
0

У меня есть два столбца, как список ниже на листе.Excel Копирование данных

Что бы я хотел сделать, это вывести значение из второго столбца, но только если соответствующее значение 1-го столбца соответствует указанному мной. Это я мог бы сделать с Vlookup, но мне также хотелось бы указать номер строки из массива, который соответствует 1-му столбцу.

Например, если я установил значение «2» и номер строки в «2», это дало бы мне значение 14, так как оно соответствовало первому значению в столбце 1 и создало массив, а затем дало мне вторую строку от этого массива, который равен 14.

Любые идеи?

1 10 
1 11 
1 12 
2 13 
2 14 
2 15 
3 16 
3 17 
3 18 
+0

ли что второй столбец сортируется? – Orbling

+1

Первый столбец отсортирован по возрастанию, второй столбец - фактически текст, однако функция OFFSET, INDEX, MATCH работает. – user2984343

+0

Рад это услышать. Второй столбец не нужно сортировать по отражению, поскольку вы вытаскиваете только номер строки. Существует модификация, если вам понадобилась * kth * -маленькая запись, если первая группа все еще была отсортирована. Если на вопрос полностью ответят на ваше удовлетворение, тогда лучше всего отметить его как такового, чтобы препятствовать тому, чтобы кто-то тратил на него время. – Orbling

ответ

1

If ваши данные сортируются так, как у вас есть в этом примере, т.е. по первому столбцу по возрастанию, затем по второму столбцу. Затем вы можете использовать комбинацию OFFSET(), INDEX() и MATCH().

=OFFSET(INDEX(second_column,MATCH(lookup_a,first_column,0)),entry_row-1,0) 

Это первый получает адрес ячейки с INDEX(..., MATCH()) первой ячейки, соответствующей ваше значение поиска, то функция OFFSET() стучит, что вниз, сколько строк вы хотите в этой группе. Конечно, это полностью зависит от того, как отсортировано, как описано.

Lookup two rows with <code>OFFSET()</code>

Если вы хотели ей -smallest записи в несортированном втором столбце (но по-прежнему сгруппировано на первый столбце), то вы можете использовать:

=SMALL(OFFSET(second_column,MATCH(lookup_a,first_column,0)-1,0,MATCH(lookup_a,first_column,1)-MATCH(lookup_a,first_column,0)+1,1),entry_row) 

Это имеет то преимущество, возврата #N/A, если вы выйдете за пределы вашего выбора. Окружающий его IFERROR(...., "").

В качестве альтернативы, используя первый способ неупорядоченных данных второго столбца и просто проверить смещение, чтобы увидеть, если она сохраняет значение поиска, вы можете использовать:

=IF(OFFSET(OFFSET(INDEX(second_column,MATCH(lookup_a,first_column,0)),entry_row-1,0),0,-1)=lookup_a,OFFSET(INDEX(second_column,MATCH(lookup_a,first_column,0)),entry_row-1,0),"") 
+1

+1 Для предотвращения UDF. –

+0

Это хорошо работает, однако в моем фактическом списке данных количество записей варьируется.Возможно ли вернуть функцию нулевое значение, если OFFSET вытаскивает значение из следующего массива, а не из указанного мной? – user2984343

+0

Да, вы могли бы проверить, что смещение не вышло за пределы. – Orbling

1

Ответ Selecting the second result of a “Find” with VBA может быть продлен на ваш случай, используя в качестве входных данных числа появления которого вы ищете.

И это адаптация Excel Lookup nth Occurrence/Instance:

Function FindNth(Table As Range, Val1 As Variant, Val1Occrnce As Integer, ResultCol As Integer) 
'Finds the Nth value in the first Column of a table that has a stated value on the same row in another Column. 
    Dim i As Integer 
    Dim iCount As Integer 
    Dim rCol As Range 

    iCount = 0 
    For i = 1 To Table.Rows.Count 
    If (Table.Cells(i, 1) = Val1) Then 
     iCount = iCount + 1 
    End If 

    If iCount = Val1Occrnce Then 
     FindNth = Table.Cells(i, ResultCol) 
     Exit For 
    End If 
    Next i 
End Function 

Вот результат использования функции определяется пользователем (формула бар показывает формулу в ячейке G3):

enter image description here

+0

+1 Для общего случая, поскольку это не требует, чтобы числа находились в порядке. – Orbling

 Смежные вопросы

  • Нет связанных вопросов^_^