#google-sheets #google-sheets-formula
Вопрос:
Попытка создать формулу массива, ссылающуюся на предыдущую строку. Продолжайте получать ошибку #REF:
Circular dependency detected. To resolve with iterative calculation, see File > Spreadsheet Settings.
Видел много других постов с аналогичным вопросом, но ни один из них, казалось, не решил его для меня.
Пользователь вводит данные в колонку A, а в колонке B должно отображаться начало/занято/конец. Например.
|A | B |
|---------------|------------- |
|[heading A] | [heading B] |
|start | start |
|something | busy |
|something else | busy |
|end | end |
|something | |
|something else | |
|start | start |
|something | busy |
|end | end |
|start | start |
|end | end |
|... | ... |
Попробовал в B2 и получил ошибку круговой ссылки:
=arrayformula(if((A2:A="start") (A2:A="end"),A2:A, if((A1:A="start") (B1:B="busy"),"busy","") ))
=arrayformula(if((A2:A="start") (A2:A="end"),A2:A, if((A1:A="start") (offset(B2:B,-1,0)="busy"),"busy","") ))
Это отображается busy
в первой строке после начальных строк (из-за A1:A="start"
теста), но не для других «занятых» строк (так что: indirect("B"amp;row(B2:B)-1)="busy"
тест не работает).
=arrayformula(if((A2:A="start") (A2:A="end"),A2:A, if((A1:A="start") (indirect("B"amp;row(B2:B)-1)="busy"),"busy","") ))
Для этого, когда я заменяю ""
на "B"amp;row(B2:B)-1
, он отображает косвенную ссылку на ячейку, как я и ожидал, например, в B4
нем отображается «B3».
Предложения, как заполнить начальные/занятые/конечные значения с помощью arrayformula?
Ответ №1:
Попробуйте это в камере B1
:
=arrayformula({"[Heading B]";if(A2:A="start","start",if(A2:A="end","end",if(COUNTIFS(A2:A,"start",ROW(A2:A),"<="amp;ROW(A2:A))=COUNTIFS(A2:A,"end",ROW(A2:A),"<="amp;ROW(A2:A)),,"busy")))})
Примечания:
Я проверяю наличие следующих условий:
А) последовательность слова «начать»
=arrayformula(if(A2:A<>"",COUNTIFS(A2:A,"start",ROW(A2:A),"<="amp;ROW(A2:A)),))
Б) последовательность слова «конец»:
=arrayformula(if(A2:A<>"",COUNTIFS(A2:A,"end",ROW(A2:A),"<="amp;ROW(A2:A)),))
В) являются ли А) и Б) одинаковыми для каждой строки. Там, где они одинаковы, элемент является либо «концом», закрывающим «начало», либо «чем-то другим», что нам нужно игнорировать.
COUNTIFS(A2:A,"start",ROW(A2:A),"<="amp;ROW(A2:A))
= COUNTIFS(A2:A,"end",ROW(A2:A),"<="amp;ROW(A2:A))
D) Окончательная логика идентифицирует «что-то еще «после» конца » и использует его:
=arrayformula(if(A2:A="start","start",if(A2:A="end","end",if(xxx,,"busy"))))
где xxx — является ли пункт C) выше истинным.
Комментарии:
1. да, это работает! Совсем другой маршрут, чем я ожидал. С нетерпением жду заметок. Легко ли объяснить, почему более очевидный маршрут терпит неудачу?
2. Ваша начальная формула в col B ссылается на col B, так что это вызовет круговую проблему.
3. отличная работа! Таким образом, ключевой частью, по-видимому, является
countifs
ограничение диапазона, на который нужно смотреть. Все еще не уверен, что именно было причиной круговой ссылки.4. Да, если количество запущенных строк «начало» равно количеству запущенных строк «конец», это либо «конец», закрывающий «начало», либо условие «что-то», которое вы хотите игнорировать.: -)