У меня есть функция, в которой я указываю нужное поле и номер строки заголовка, и он возвращает столбец.Например, =findField("Region",1)
вернул бы номер столбца, содержащий заголовок "Регион".Это работало хорошо, пока я не столкнулся с отчетом, содержащим повторяющиеся имена в строке заголовка.Например, вместо 1-го и фамилии в обоих полях будет указано «Имя», поэтому мне нужно было указать вхождение, которое я хотел, как в =findField("Name",1,2)
для 2-го вхождения.Я придумал решение, но у него есть 2 проблемы.Во-первых, если поле находится в первом столбце, оно не будет работать должным образом.Например, если столбцы A и B имеют «Имя», то =findField("Name",1,1)
вернет второе поле вместо первого, а =findField("Name",1,2)
обернет и вернет 1-е, что не то, что я хочу.Вторая проблема заключается в том, что она оборачивается вокруг, что я бы предпочел, чтобы она вообще не делала.Я придумал следующее:
Function findField2(fieldName As String, Optional rowStart As Long = 0, Optional occurrence As Long = 1)
Dim Found As Range, lastRow As Long, count As Integer, myCol As Long
If rowStart = 0 Then rowStart = getHeaderRow()
myCol = 1
For count = 1 To occurrence
Set Found = Rows(rowStart).Find(what:=fieldName, LookIn:=xlValues, lookat:=xlWhole, After:=Cells(rowStart, myCol))
If Found Is Nothing Then
MsgBox "Error: Can't find '" & fieldName & "' in row " & rowStart
Exit Function
Else
myCol = Found.Column
End If
Next count
lastRow = Cells(Rows.count, Found.Column).End(xlUp).Row
findField2 = Found.Column
Что мне нужно сделать, чтобы поле было в столбце A?Установка 0 для myCol не работает.Первоначальная функция поиска была основана на https://www.mrexcel.com/forum/excel-questions/629346-vba-finding-text-row-1-return-column.html, и я настраивал ее в соответствии со своими потребностями.
Спасибо, Бен