Excel 2013 - несколько чисел в ячейке в виде текстовой строки, необходимо определить, если они меньше определенного значения - PullRequest
0 голосов
/ 26 апреля 2019

Мне дали большое количество данных (и я не могу вернуться и попросить их предоставить их более полезным способом).Он содержит несколько фигур в одной ячейке, разделенных точкой с запятой.

  A
 +-------------------------+
1|Sats                     |
 +-------------------------+
2|92; 89; 94; 99; 100      |
 +-------------------------+
3|95; 98; 96               |
 +-------------------------+
4|99                       | 
 +-------------------------+
5|88; 95                   |
 +-------------------------+
6|99; 95; 98; 98; 100; 95  |
 +-------------------------+
7|94; 92; 91; 93           |
 +-------------------------+

Каким-то образом мне нужно определить, содержит ли ячейка число меньше 94. Просто да / нет, к счастью, мне не нужен более глубокий анализ, чем этот.

Или, альтернативно, перечислить наименьшее число в каждой ячейке.Все, что может показать, если число меньше 94.

К сожалению, количество различных показаний в каждой ячейке не ограничено - в противном случае, я бы вложил формулы, проверяющие первую, вторую, третью и т. Д. Запись.

У кого-нибудь есть идеи?Это полностью поставило меня в тупик.

Ответы [ 5 ]

1 голос
/ 26 апреля 2019

Исходя из этого ответа , вы можете использовать приведенную ниже формулу массива (не забудьте Ctrl + Shift + Enter !) в ячейке B2 для возврата TRUE или FALSE, если ваш список чисел содержит число меньше 94:

 =SUM(--(1*TRIM(MID(SUBSTITUTE(A2,";",REPT(" ",99)),(ROW(OFFSET($A$1,,,LEN(A2)-LEN(SUBSTITUTE(A2,";",""))+1))-1)*99+((ROW(OFFSET($A$1,,,LEN(A2)-LEN(SUBSTITUTE(A2,";",""))+1)))=1),99))<94))>0

Затем вы можете просто перетащить это вниз в столбец B, и это должно сработать, однако вам может потребоваться заменить пробелы между разделителями ;, чтобы в каждой ячейке был один непрерывный список, например, 92;89;...

1 голос
/ 26 апреля 2019

Для этого вы можете создать UDF.

создать новый модуль в VBA (Alt + F11)

Тогда используйте следующий код:

Public Function ParseAndSum(source As String) As Integer
       Dim tmp() As String, i As Integer
       tmp = Split(source, ";")
       For i = LBound(tmp) To UBound(tmp)
       ParseAndSum = Val(tmp(i)) < 94
       Next i
End Function

В B2 используйте формулу:

=ParseAndSum(H19)<0

Если в строке A2 в строке есть значение ниже 94, он вернет TRUE, иначе вернет FALSE

0 голосов
/ 26 апреля 2019

Я почти уверен, что у вас есть функция FILTERXML в 2013 году.

Вы можете использовать это для разбиения строки, а затем проверить ее в массиве :

=OR(FILTERXML("<t><s>"&SUBSTITUTE(A2,";","</s><s>")&"</s></t>","//s")<94)

Поскольку это формула массива, вам необходимо «подтвердить» ее, удерживая нажатой ctrl + shift при нажатии , введите . Если вы сделаете это правильно, Excel поместит фигурные скобки {...} вокруг формулы, как показано в строке формул

enter image description here

0 голосов
/ 26 апреля 2019

Поместите этот столбец в C, затем выберите этот столбец, используйте Data-> Text для столбцов и разделите их точкой с запятой, это разделит на D, E, F ...

После этого в столбце B напишите = MIN (C1: Z1), или вы можете указать более большое число ячеек.

Затем в столбце A напишите = IF (C1> 94, «YES», «NO»). затем отфильтруйте по столбцу А.

0 голосов
/ 26 апреля 2019

Один из способов - использовать PowerQuery (если вы один из 2013 или более поздних версий).Для этого выберите ваши данные, перейдите в Данные> Из таблицы / диапазона.Откроется окно Power Query.Перейдите в «Преобразование»> «Разделить столбец»> «Разделителем».Вы можете обрезать результат, чтобы удалить пробелы, нажав Формат> Обрезать.

...