Как подсчитать n-й подряд вхождение слова в списке в Excel? - PullRequest
0 голосов
/ 03 августа 2020

Я хотел бы получить номер строки, содержащей еще один экземпляр слова в столбце, где n - предопределенная константа, например 5.

Самый близкий результат к тому, который я хотел (даже если получен косвенно), это следующее:

=SUMPRODUCT((INDIRECT(CONCATENATE("A1:A",J9))="pear")*(INDIRECT(CONCATENATE("W4:W",J9))<INDIRECT(CONCATENATE("X4:X",J9))))

, в котором я использую функцию ДВССЫЛ () для обобщения интересующего номера строки, но данные должны быть обновлены вручную в ячейке, взятой в качестве ссылки (J9 в пример) каждый раз, когда список изменяется, что не лучший вариант (хотя лучше, чем вручную изменять номер строки для каждой отдельной формулы, в которой он используется!).

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

      A
   _______
1  orange
2  apple
3  apple
4  pear
5  pineapple
6  orange
7  pear
8  apple
   .....

Ожидаемый результат для n = 2 и «груша» в качестве слова для поиска будет равен 7. Можно ли сделать что-то подобное в excel?

Ответы [ 2 ]

3 голосов
/ 03 августа 2020

Используйте AGGREGATE:

=AGGREGATE(15,7,ROW(A1:INDEX(A:A,MATCH("zzz",A:A)))/(A1:INDEX(A:A,MATCH("zzz",A:A))="pear"),2)

Измените "pear" на ячейку, которая имеет желаемое значение, а 2 в конце на ячейку, которая имеет требуемый порядковый номер.

введите описание изображения здесь

0 голосов
/ 03 августа 2020

Рассмотрим следующую функцию, определяемую пользователем:

Option Explicit

Public Function Locate(rng As Range, valu As String, times As Long) As Long
    Dim kount As Long, r As Range
    kount = 0
    For Each r In rng
        If r.Value = valu Then
            kount = kount + 1
            If kount = times Then
                Locate = r.Row
                Exit Function
            End If
        End If
    Next r
End Function

Например:

enter image description here

User Defined Functions (UDFs) are very easy to install and use:

  1. ALT-F11 brings up the VBE window
  2. ALT-I ALT-M opens a fresh module
  3. paste the stuff in and close the VBE window

If you save the workbook, the UDF will be saved with it. If you are using a version of Excel later then 2003, you must save the file as .xlsm rather than .xlsx

To remove the UDF:

  1. bring up the VBE window as above
  2. clear the code out
  3. close the VBE window

To use the UDF from Excel:

=Locate(A1:A100,"pear",2)

To learn more about macros in general, see:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

и

http://msdn.microsoft.com/en-us/library/ee814735 (v = office.14) .aspx

, а подробные сведения об UDF см. В:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

Чтобы это работало, должны быть включены макросы!

...