1

На основе значений в первых двух столбцах мне нужно заполнить третий столбец (отмечен желтым цветом).

образ

Возможно ли что-то подобное без использования VB?

1 ответ1

2

РЕДАКТИРОВАТЬ:

Если всегда есть четыре команды с двумя победителями и двумя проигравшими, есть относительно более простое решение:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1&",",LEFT(B1,FIND(",",B1)),""),MID(B1,FIND(",",B1)+1,LEN(B1))&",","")&",",",,","")

Да, это возможно только с помощью формулы массива. Хотя это не совсем просто.

Ниже приведено общее решение, которое работает с любым количеством участников и команд-победителей:

Скриншот рабочего листа

Массив введите (Ctrl+Shift+Enter) следующую формулу в C2 и скопируйте-вставьте / заполните в оставшуюся часть столбца таблицы (не забудьте удалить { и }):

{=
TEXTJOIN(
  ",",
  TRUE,
  IF(
    MMULT(
      --(
        TRIM(MID(SUBSTITUTE(A2&",",",",REPT(" ",LEN(A2)+1)),(ROW(INDEX(C:C,1):INDEX(C:C,(LEN(A2)+1)/2))-1)*(LEN(A2)+1)+1,LEN(A2)+1))
        =TRANSPOSE(TRIM(MID(SUBSTITUTE(B2&",",",",REPT(" ",LEN(B2)+1)),(ROW(INDEX(D:D,1):INDEX(D:D,(LEN(B2)+1)/2))-1)*(LEN(B2)+1)+1,LEN(B2)+1)))
      ),
      ROW(INDEX(C:C,1):INDEX(C:C,1+LEN(B2)-LEN(SUBSTITUTE(B2,",",""))))
    ),
    "",
    TRIM(MID(SUBSTITUTE(A2&",",",",REPT(" ",LEN(A2)+1)),(ROW(INDEX(C:C,1):INDEX(C:C,(LEN(A2)+1)/2))-1)*(LEN(A2)+1)+1,LEN(A2)+1))
  )
)}

Обратите внимание, что TEXTJOIN() доступен только в Excel 2016. В более ранних версиях Excel требуется UDF с полизаполнением. (См. Этот пост для основного.)

Объяснение:

скоро будет

На данный момент, тем не менее, мы надеемся, что следующая частично оцененная версия формулы в C2 может помочь:

{=
TEXTJOIN(
  ",",
  TRUE,
  IF(
    MMULT(
      --(
        {"A";"B";"C";"D"}
        ={"A","C"}
      ),
      {1;2}
    ),
    "",
    {"A";"B";"C";"D"}
  )
)}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .