Не могу найти информацию в сети, поэтому прошу помощи. Все решения, которые я нахожу, находятся на Python. Мне нужно решение в таблицах Google.
У меня есть последовательная информация, которую необходимо обновить на основе значений в другом столбце.
образец:
dog 1
dog 1
dog 1
cat 2
cat 2
cat 2
cat 2
cat 2
3
3
4
4
4
5
5
6
7
7
7
7
7
7
8
результат мне нужен:
dog 1
dog 1
dog 1
cat 2
cat 2
cat 2
cat 2
cat 2
dog 3
dog 3
cat 4
cat 4
cat 4
dog 5
dog 5
cat 6
dog 7
cat 7
dog 7
dog 7
dog 7
dog 7
cat 8
Vlookup — не решение, потому что у меня очень длинный список. Пожалуйста, порекомендуйте решение без использования функции «ISODD». Потому что были бы случаи с текстовыми значениями.
Вы имеете в виду, что вам просто нужно чередовать «собаку» и «кошку»?
@pilchard сделал мой образец более конкретным.
Хорошо, это просто проверка на четность: =if (ISODD(INDIRECT(ADDRESS(ROW(), COLUMN()+1))), "dog", "cat")
. Обязательно будет дубликат
@pilchard Прости, дорогой друг. Я допустил ошибку. Я еще раз поменял образец)
@pichard Можете ли вы сделать свою формулу более конкретной? Где мне писать «ссылки на ячейки», например A2, B2.
Код, который я опубликовал, просто смотрит на столбец справа от любой ячейки. Если вы хотите использовать конкретные ссылки на ячейки, то это будет =if (ISODD(B1), "dog", "cat")
, если числовые данные находятся в столбце B
и начинаются со строки 1
.
Тогда вам нужно будет изменить свое условие в операторе if
. см. документацию: Документы Google: функция ЕСЛИ
@pichard Тогда будут сотни утверждений «если».
Вот как работает электронная таблица
Покажите, что вы пробовали, а что не работает. Stackoverflow не является службой кодирования. Также не меняйте условия вопроса, поскольку это сводит на нет любое обсуждение.
почему? i.sstatic.net/GPHkMkoQ.png
Вместо кошки есть собака. Ошибка. @player0
Вот один из подходов, который вы можете опробовать:
=let(Σ,unique(tocol(A:A,1)),Λ,counta(Σ),choosecols(scan(,B1:index(B:B,match(,0/(B:B<>""))),lambda(a,c,let(x,c<>iferror(offset(c,-1,)),
if (and(x,+a+1<=Λ),{+a+1,chooserows(Σ,+a+1),c},if (and(x,+a+1>Λ),{1,chooserows(Σ,1),c},{+a,chooserows(Σ,+a),c}))))),2,3))
Альтернатива (это работает ТОЛЬКО в том случае, если, скажем, 1
или 23
не будут где-то повторяться снова)
=map(B1:index(B:B,match(,0/(B:B<>""))),lambda(Σ,let(Λ,unique(tocol(A:A,1)),hstack(chooserows(Λ,mod(countunique(B1:Σ)-1,rows(Λ))+1),Σ))))
Учитывая отсутствие подробностей в ФП и неоднократные изменения в вопросе без каких-либо попыток фактически описать действующую логику, я думаю, что голосование за закрытие подробностей уместно.
Спасибо за альтернативный ответ. Оно работает.
используйте VLOOKUP
:
=INDEX(IFNA(VLOOKUP(B:B, {TOCOL(UNIQUE(B:B), 1), ARRAY_CONSTRAIN(TOCOL(
REDUCE(, SEQUENCE(ROUNDUP(COUNTUNIQUE(B:B)/COUNTA(A:A))),
LAMBDA(x, y, {A:A; x})), 1), COUNTUNIQUE(B:B), 1)}, 2, )))
Пожалуйста, не путайте теги
Google Sheets
с тегамиExcel
, читайте описание тега.