Можно ли найти значение не равное единице в столбце и получить все позиции в одном поле? - PullRequest
0 голосов
/ 26 мая 2019

Мне нужно найти значение не равное 1 в столбце A и получить все позиции в одном поле.
Я хочу получить все не равные 1 позиции в B11.
Я хочу использовать формулу Excel и не использовать vba или другой код.Как я могу сделать ?Возможно ли?

enter image description here

1 Ответ

2 голосов
/ 26 мая 2019

Поскольку вы работаете с 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 превзойдет вашу цель.

...