Я пытаюсь определить функцию Excel в VBA, где я могу указать Apple или Orange, как в =MyFunc("Apple")
, и получить обратно «Том» или «Дик, Гарри». Я могу выяснить, какой Row ищет поисковый запрос, используя Find
, но я не могу понять, как сканировать часть этого строки для «X» (или не пусто) и возвращать значения из верхней строки соответствующий «X».Получить значение из одной строки в указанном столбце
... B ... M N ... CR
___________________________________
3 | | Tom | Dick | Harry
+--------+-------+--------+--------
4 | Apple | X | |
+--------+-------+--------+--------
5 | Orange | | X | X
То, что я получил до сих пор:
Function MyFunc(what As String, Optional sep As String = ", ") As String
Dim rngSearch As Range, rngFound As Range
Dim strResult As String, allNames As Range
Set rngSearch = Worksheets("Sheet1").Range("B:B")
Set allNames = Worksheets("Sheet1").Range("M3:CR3")
Set rngFound = rngSearch.Find(what, LookIn:=xlValues, LookAt:=xlPart)
If rngFound Is Nothing Then
MsgBox "Not found"
Else
MsgBox rngFound.Row
'search that row from Col M to Col CR for "X", add value in Row 3 to strResult if X is found
End If
MyFunc = strResult
End Function
Закрыть дубликат [Конкатенируйте верхние ячейки строк, если столбец имеет ниже 1] (http://stackoverflow.com/questions/28679758/concatenate-top-row-cells-if-column- ниже-has-1/28680713 # 28680713) Если вы не хотите его перерабатывать, используйте as-is like '= conditional_concat (M $ 3: CR $ 3, INDEX (M: CR, MATCH (« apple », B: B , 0), 0)) ' – Jeeped