Еще один способ постановки проблемы:
|| (последовательные |) не допускаются, а также те, которые содержат только два или более пробелов *.
- Если существует
| | (один пробел между ними) в проверяемом тексте, ему должно предшествовать любое количество не | текст, с | или другой | | непосредственно перед этим, и за ним должно немедленно следовать любое количество не | текст с последующим | или другой | | ,
- Если нет
| | тогда либо не должно быть | или ровно два | ,
Условие 1. технически явно исключено в вопросе ("любое количество текста" может означать, что нет или допускается только пробел), но из примеров можно сделать вывод, что это является целью ОП.
С измененными условиями, как указано выше, решение, основанное только на формулах, становится легко очевидным, как показано на следующем листе:

Это формула, введенная в B2:B11:
=IF(CHOOSE(MIN(3,1+LEN(A1)-LEN(SUBSTITUTE(A1,"|",""))),TRUE,FALSE,AND(LEN(A1)-LEN(SUBSTITUTE(A1,"|",""))-(LEN(A1)-LEN(SUBSTITUTE(A1,"| |","")))/3*2=2,LEN(TRIM(MID(A1,FIND("|",A1)+1,FIND("|",A1,FIND("|",A1)+1)-FIND("|",A1)-1)))>0)),"ok","wrong")
Объяснение:
Предварительно подтвержденный вариант формулы выглядит следующим образом:
=
IF(
CHOOSE(
MIN(3,1+LEN(A1)-LEN(SUBSTITUTE(A1,"|",""))),
TRUE,
FALSE,
AND(
LEN(A1)-LEN(SUBSTITUTE(A1,"|",""))-(LEN(A1)-LEN(SUBSTITUTE(A1,"| |","")))/3*2=2,
LEN(TRIM(MID(A1,FIND("|",A1)+1,FIND("|",A1,FIND("|",A1)+1)-FIND("|",A1)-1)))>0
)
),
"ok",
"wrong"
)
Три вышеприведенных условия могут быть изменены следующим образом:
[a] Должно быть еще 2 | чем те, которые приходятся на | | с (первый и последний).
а также
[b] Если таковые существуют | , должно быть как минимум два из них, и первые два из них должны быть разделены хотя бы одним непробельным символом.
Формула для [а]:
LEN(A1)-LEN(SUBSTITUTE(A1,"|",""))-(LEN(A1)-LEN(SUBSTITUTE(A1,"| |","")))/3*2=2
Формула для внутри- | Текстовая часть проверки [b]:
LEN(TRIM(MID(A1,FIND("|",A1)+1,FIND("|",A1,FIND("|",A1)+1)-FIND("|",A1)-1)))>0
Другая часть [b] (то есть, что не может быть только один |) обрабатывается функцией CHOOSE() , которая также заботится о том случае, когда | (требуется, поскольку этот крайний случай вызывает ошибки в формуле [b] и неверный результат для формулы [a]).
Первый аргумент функции CHOOSE() ,
MIN(3,1+LEN(A1)-LEN(SUBSTITUTE(A1,"|","")))
наносит на карту возможные количества | s к индексам 1 , 2 и 3 например так: [0,1,2,3,4,…] → [1,2,3,3,3,…] , и, таким образом, функция возвращает TRUE для счетчика 0 , FALSE для счетчика 1 и результат функции AND() для всех остальных счетчиков.
* Условие не позволяет два или более внутри- | пробелы можно ослабить с помощью функции TRIM() .