Как сравнить массив ячеек с некоторыми значениями и вернуть true, если найдено хотя бы 1 значение - PullRequest
0 голосов
/ 11 февраля 2020

Я был на собеседовании и получил тест для сравнения некоторых ячеек, содержащих строку чисел, с 4 другими числами, и если хотя бы одно из этих 4 чисел отображается в строке 1 или 2, если ложно.

Я пробовал некоторые формулы, например, сравнивать 2 строки или каждое число, но я не мог понять это. Они хотели, чтобы в каждой ячейке в столбце Col2 была формула.

Упражнение было таким: 1005 *

Col1

A2 = 9,10,11,22,33

A3 = 10,34,55

A4 = 40, 78, 41, 26

Я сделал лист Google для большей ясности: https://docs.google.com/spreadsheets/d/1GYnCQfjM2N-yLLQgHf2QRdaSLl14VB2liAJmv_SUXpE/edit?usp=sharing

Каждая строка в Col1 была строкой с выбранными опциями из опроса, и если какой-либо из них был 9, 10, 11, 12, тогда Col2 должен содержать True или False или в этом случае 1 или 2. Вы можете думать как числа в строке как выбранные опции: option1, option2, et c.

Я получал ложные ответы из-за чисел, содержащих 9, обозначенных как 9.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Вот формула, которая будет работать в Excel 2013 +.

=IF(COUNT(FILTERXML("<t><s>" & SUBSTITUTE(SUBSTITUTE($A1," ",""),",","</s><s>") & "</s></t>","//s[.>=9 and .<= 12]"))>0,1,2)

Она разделяет значения через запятую и возвращает только те из них, которые соответствуют критериям.

Если у вас есть В более ранней версии Excel вам понадобится другая формула:

=IF(OR(ISNUMBER(FIND("," & {"9","10","11","12"} & ",",SUBSTITUTE(","&A1&","," ","")))),1,2)

Эта последняя формула

  • добавляет и добавляет строку с запятой, чтобы гарантировать, что каждая запись
  • "очищает" строку, удаляя все пробелы
  • использует константу массива (также с запятой и добавленной запятой) для поиска различного содержимого
  • Использует ISNUMBER функция, чтобы увидеть, нашли ли мы совпадение

enter image description here

0 голосов
/ 11 февраля 2020

Это не проверено, но что-то вроде этого должно работать.: 100100

sub test_ints ()
dim cl as range
dim ary as integer()
dim ans as boolean

set cl = rang(A2:A4)

for each i in cl
ary() = split(i.value)
 for j = 1 to UBOUND(len(ary))
   if ary(j) = 9 OR ary(j) = 10 OR ary(j) = 11 OR ary(j) = 12 then
     ans = true
      exit sub
   else
     ans = false
   end if
  next j
next i
end sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...