Возвращаемое значение в последовательных ячейках, если предыдущая ячейка равна значению - PullRequest
0 голосов
/ 07 января 2020

У меня есть столбец (назовите его столбцом A) Ws и Ls, соответствующих выигрышам и проигрышам, а также несколько пустых ячеек между ними. В соседнем столбце (назовите его столбцом B) я пытаюсь использовать условное форматирование, чтобы либо вернуть значения, как они есть в столбце A, либо, если в строке 2 последовательных L, я хочу, чтобы следующие 10 последовательных ячеек были пустыми затем вернитесь к тому, чтобы взять все, что есть в столбце А.

Я чувствую, что я довольно хорошо разбираюсь в условном форматировании, но это меня совершенно озадачило, и я не могу придумать ничего, что даже близко.

Вот пример того, как я хочу, чтобы это выглядело:

enter image description here

Как вы можете видеть, иногда две последовательные буквы L идут вплотную, и иногда они появляются с пробелом между ними, но в любом случае мне нужен один и тот же результат (т. е. 10 последовательных пустых ячеек, следующих сразу за второй буквой L)

Спасибо заранее за помощь!

Ответы [ 4 ]

2 голосов
/ 11 января 2020

Лично я стараюсь избегать использования функции OFFSET, потому что она нестабильна, но в этом случае это не должно иметь значения, поскольку целью OP является использование Conditional Formatting.

Имейте в виду, что значение ячейки не может быть изменено с помощью Conditional Formatting.

Предполагая, что данные начинаются с A2, введите эту формулу в B2 и скопируйте до последней строки с данными:

Использование функции CONCAT:

= IF( ROWS( $2:2 ) <= 2, T( $A2 ),
 IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ),
 IF( "LL" <> RIGHT( CONCAT( OFFSET( B2, -1, 0,
 - IF( ROWS( 1:$2 ) > 10, 10, ROWS( 1:$2 ) ) ) ), 2 ), T( $A2 ), 1 ) ) )

Использование функции TEXTJOIN:

= IF( ROWS( $2:2 ) <= 2, T( $A2 ),
 IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ),
 IF( "LL" <> RIGHT( TEXTJOIN( "", 1, OFFSET( B2, -1, 0,
 - IF( ROWS( 1:$2 ) > 10, 10, ROWS( 1:$2 ) ) ) ), 2 ), T( $A2 ), 1 ) ) )

Приведенная выше формула генерирует счетчик от 1 до 10 после нахождения комбинации «LL». Затем вы должны добавить Conditional Formatting, чтобы применить тот же цвет к шрифту и интерьеру, когда выполнены следующие критерии:

= ISNUMBER( B2 )

Шрифт и цвет интерьера различаются для отображения значений формул.

Функция OFFSET используется для установки диапазона 10 строк над ячейкой, который будет оцениваться условным форматом. Обратите внимание, что диапазон создается с использованием уже оцененных значений, а не исходных значений (т. Е. Используйте столбец B вместо A)

OFFSET( A2, -1, 1,
 - IF( ROWS( B1:B$2 ) > 10, 10, ROWS( B1:B$2 ) ) )

Эта часть позволяет избежать ненужных сравнений. :

IF( ROWS( B1:B$2 ) < 3, T( A2 ), … )

Использование функции T позволяет избежать значения zero, когда ячейка пуста:

T( A2 )

Эта часть инициирует и завершает счетчик:

IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ), …

Функция TEXTJOIN объединяет диапазон, генерируемый функцией OFFSET.

РЕДАКТИРОВАТЬ: ПЕРЕСМОТРЕННЫЕ ФОРМУЛЫ

Вы также можете попробовать следующее Нет летучих Формулы:

Использование функции CONCAT:

= IF( ROWS( $2:2 ) <= 2, T( $A2 ),
 IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ),
 IF( "LL" <> RIGHT( CONCAT( B1  : INDEX( B:B,
 ROW() - IF( -1 + ROWS( $2:2 ) > 10, 10, -1 + ROWS( $2:2 ) ) ) ), 2 ), T( $A2 ), 1 ) ) )

Использование функции TEXTJOIN:

= IF( ROWS( $2:2 ) <= 2, T( $A2 ),
 IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ),
 IF( "LL" <> RIGHT( TEXTJOIN( "", 1, B1:INDEX( B:B,
 ROW() - IF( -1 + ROWS( $2:2 ) > 10, 10, -1 + ROWS( $2:2 ) ) ) ), 2 ), T( $A2 ), 1 ) ) )

Использование функции CONCATENATE:

= IF( ROWS( $2:2 ) <= 2, T( $A2 ),
 IF( AND( SUM( B1 ) > 0, SUM( B1 ) < 10 ), SUM( 1, B1 ),
 IF( "LL" <> RIGHT( CHOOSE( IF( ROWS( 2:$4 ) > 10, 10, ROWS( 2:$4 ) ),
 CONCATENATE( B$2, B$3 ),
 CONCATENATE( B$2, B$3, B$4 ),
 CONCATENATE( B$2, B$3, B$4, B$5 ),
 CONCATENATE( B$2, B$3, B$4, B$5, B$6 ),
 CONCATENATE( B$2, B$3, B$4, B$5, B$6, B$7 ),
 CONCATENATE( B$2, B$3, B$4, B$5, B$6, B$7, B$8 ),
 CONCATENATE( B$2, B$3, B$4, B$5, B$6, B$7, B$8, B$9 ),
 CONCATENATE( B$2, B$3, B$4, B$5, B$6, B$7, B$8, B$9, B$10 ),
 CONCATENATE( B$2, B$3, B$4, B$5, B$6, B$7, B$8, B$9, B$10, B$11 ),
 CONCATENATE( INDEX(B:B,ROW()-10),
 INDEX(B:B,ROW()-9), INDEX(B:B,ROW()-8), INDEX(B:B,ROW()-7),
 INDEX(B:B,ROW()-6), INDEX(B:B,ROW()-5), INDEX(B:B,ROW()-4),
 INDEX(B:B,ROW()-3), INDEX(B:B,ROW()-2), INDEX(B:B,ROW()-1) ) ), 2 ), T( $A2 ), 1 ) ) )
0 голосов
/ 07 января 2020

Для этого нужны дополнительные столбцы. Я добавил столбец для каждого шага, чтобы было легче следовать, но вы можете объединять разделы.

Формулы:

enter image description here

Результаты:

enter image description here

Рабочий пример: https://1drv.ms/x/s! AiTFgUFVzyzVgZxHPpALDGxkYd6lCA

Объяснение для столбца:

A. Data
B. Concatenate last 10 rows
C. Length of concatenated value
D. Check if last two values in concatenated value are LL
E. Current row must be equal to L
F. Both conditions must be TRUE
G. Add 10 if TRUE if previous not equal to 0 or reduce by 1
H. Data shown only for rows where previous check is 0
0 голосов
/ 10 января 2020

Пусть ячейка B12 имеет следующую формулу: =IF(ISERR(SEARCH("LL",TEXTJOIN("",false,A1:A11))),A12,"")

Перетащите копию этой формулы вверх и вниз column B

enter image description here

0 голосов
/ 07 января 2020

1) Установите каждую ячейку в столбце B равной аналогу столбца A (в B1 введите = A1 и перетащите)

2) Выберите столбец диапазона B, не выбирайте между B1 и B11. В поле условного форматирования введите эту формулу

= SUMPRODUCT (- (A1: A10 = "L"), - (A2: A11 = "L"))

3) Установить форматирование до белого шрифта без фона

4) Перетащите форматирование вверх и вниз, чтобы охватить весь столбец.

...