2015-06-26 5 views
0

У меня есть 100 + листы финансовых данных, и я создаю мастер-лист со всеми данными компаний на одном всеобъемлющем листе. У меня почти все, но проблема в том, что компании иногда перечисляют доход на одну акцию как много разных вещей (может быть общий объем продаж на акцию, общий объем продаж на ADR, чистые операционные доходы на акцию и т. Д.).MATCH() одно из нескольких значений в Excel?

Дело в том, что ни один из них не указан вместе, на каждом листе всегда будет только один из них.

Есть ли способ использовать функцию MATCH со списком значений, и если один из них существует в указанном массиве, укажите мне номер строки?

Например:

позволяет говорить sheet1 имеет значение «Чистая операционная выручка на акцию», и я хочу использовать функцию матча, не глядя и того, чтобы указать. Вместо этого я просто хочу перечислить некоторые значения, и если MATCH найдет ОДИН из них, дайте мне эту строку?

+0

Будут ли эти столбцы («Всего продаж на акцию», «общий объем продаж на ADR», и т.д.) будет только столбцы с «Пер» в них? Если это так, вы можете найти формулу для любого столбца с «per» вместо целой строки. – BruceWayne

+1

Во-первых, вы можете использовать массив в качестве входного значения для значения поиска в Match (убедитесь, что вы поймали ошибки). Таким образом, это один из вариантов (например, в формуле, такой как '{= MIN (IFERROR (Match ({1,2,3}, A1: A10,0)," "))}'). Во-вторых, вы также можете использовать подстановочные знаки, чтобы вы могли попробовать что-то вроде '= Match (« Всего продаж за * », A1: A10,0)'. Два метода могут быть объединены: '{= MIN (IFERROR (Match (« Всего продаж за * »,« Чистая операционная выручка за * »}, A1: A10,0),« »))}. И, конечно, если вы хотите использовать VBA, вы можете использовать оператор Like (или функцию Match Match) для достижения аналогичного результата. –

+0

Чтобы перейти к следующему комментарию: намного лучший и более строгий подход состоит в том, чтобы составить список всех показателей, которые используют компании, а затем для того, чтобы вы назначили (называли их сопоставление) желаемой конечной метрике/категории. Затем ваши запросы сравнивают фразу компании с вашим картографированием. Таким образом, вы на 100% уверены в том, что происходит. –

ответ

1

Одним из вариантов является простое объединение нескольких операторов MATCH вместе с различными строками, которые вы хотели бы протестировать. Верните значение первого, которое не возвращает ошибку (#N/A).

Например:

=IFERROR(MATCH("Total Sales Per Share", FinancialData!A1:A100,0), 
     MATCH("Total Sales Per ADR", FinancialData!A1:A100,0)) 

Если вы готовы использовать массивы, следующий код будет работать, но по-прежнему будет довольно многословным. Обратите внимание, что таблица LookupTerms будет содержать массив терминов поиска, и FinancialData будет содержать массив, в котором Вы ищете термы:

{=MIN(IFERROR(Match(LookupTerms!A1:A10, FinancialData!A1:A100, 0), ""))} 

Другим вариантом было бы использовать VBA в своем ответе. Следующий код позволит вам указать диапазон условий поиска и массив поиска. Он рассмотрит условия поиска первого термина, найденного в массиве lookup, и вернет индекс этого совпадения.

Function MatchMultiple(lookup_terms As Range, lookup_array As Range) As Double 
    Dim result As Variant 
    Dim lookup_term As Range 

    For Each lookup_term In lookup_terms.Cells 
     If Not IsEmpty(lookup_term.Value) Then 
      result = WorksheetFunction.Match(lookup_term, lookup_array, 0) 

      If Not IsError(result) Then 
       MatchMultiple = result 
       Exit Function 
      End If 
     End If 
    Next 

    MatchMultiple = CVErr(xlErrNA) 
End Function 

Добавьте эту функцию в модуль, а затем вызвать его следующим образом:

=MatchMultiple(LookupTerms!A1:A10, FinancialData!A1:A100) 
+0

ахх это хорошая идея. я дам этот снимок и посмотрю, работает ли это и сообщит –

+0

+1 хорошая функция. Если N (поисковый массив) * N (поисковые термины) велико, то было бы более эффективным (изменение почти производительности O (N)) для создания словаря того или иного (вероятно, массива поиска) и выполнения хеш-запросов (просто создайте коллекцию: 'On Error Resume Next: для каждого элемента в lookup_array: lookupCollection.Add item, item.value: Next', то просто проверьте каждый термин поиска, чтобы узнать, существует ли он в коллекции:' Для каждого элемента в lookup_term: Set foundRng = lookupCollection (item.Value): Если err.Number = 0, то MsgBox («Found it!»): Next'. –

+0

, используя этот VBA, где бы я определил эти lookup_terms, и смогу ли я включить это в функция hlookup? Листы, которые вытягивают, имеют несколько лет, поэтому мне нужен индекс «Всего продаж на акцию» в моем hlookup, чтобы вернуть значение для этого конкретного года. –