Поскольку вы работаете с Excel-2007, к сожалению, вы не сможете использовать новые функции TEXTJOIN()
и CONCAT()
(или запрос мощности). Однако с помощью функции, подобной CONCATENATE()
, вы можете проявить творческий подход, это, скорее всего, будет означать, что в какой-то момент вам придется выполнять «ручной труд». Кто хочет заниматься физическим трудом? ;)
Так что в этом случае я бы предпочел пойти по пути UDF
. Ниже проверенного примера:
Function GetPos(RNG As Range, VAL As Double) As String
Dim CL As Range, ARR() As String, X as double
X = 1
For Each CL In RNG
If CL.Value <> VAL Then
ReDim Preserve ARR(X)
ARR(X) = CL.Address(False, False)
X = X + 1
End If
Next CL
If IsEmpty(ARR) Then
GetPos = "No hits"
Else
GetPos = Join(ARR, ",")
GetPos = Right(GetPos, Len(GetPos) - 1)
End If
End Function
Этот критерий принимает два критерия: диапазон и числовое значение, указывающее, какими ячейками в вашем диапазоне НЕ должно быть. Он вернет строковое значение.
Позвоните с вашего рабочего листа через =GETPOS(A1:A10,1)
, и он должен вернуть A2,A7,A9
EDIT
Если вы хорошо используете вспомогательный столбец, вы можете сделать это так:
Формула в B1
:
=IF(A1<>1,"A"&ROW()&",","")
Формула в B11
:
=LEFT(B1&B2&B3&B4&B5&B6&B7&B8&B9&B10,SUM(LEN(B1:B10))-1)
Введите через Ctrl Shift Введите
Примечание. Если вы не хотите использовать вспомогательный столбец, вам придется использовать TRANSPOSE()
для «загрузки» массива текстовых значений, но это требует ручного труда, и IMO превзойдет вашу цель.