Сейчас формула анализирует в таблице W4:Z8 - взаимосвязь между основными столбцами (желтыми) и дополнительными столбцами (оранжевыми). Закономерность - это когда 1 появляется либо в той же строке оранжевого столбца, где стоит 1 в желтом столбце. Либо смещена на 1-2 строки выше или ниже. Проблема в том, что если 1 оранжевого столбца смещена более чем на 2 строки, то формула ее уже не видит. Сейчас я подсветил фиолетовыми прямоугольниками - где размещены 1 в дополнительном столбце, но формула уже не видит эту закономерность.
Сейчас действует правило Если закономерность идет в предыдущих двух строках - то "-1" Если закономерность проявляется в той же строке - то "1" Если закономерность идет в последующих двух строках - то "2"
Как поменять формулу, чтобы в ячейках - показывались число - на сколько строк отстоит единица от нужной строки (максимум 30) ? Если закономерность идет в предыдущих ячейках - то "-1" если отстоит на 1 строку вверх (до - 30 если 1 отстоит на 30 строк вверх) Если закономерность проявляется в той же строке - то "0,5" Если закономерность идет в последующих ячейках - то "1" если 1 отстоит на 1 строку вниз (до +30 если 1 отстоит на 30 строк вниз)
Добрый вечер. Помогите поменять формулу.
Сейчас формула анализирует в таблице W4:Z8 - взаимосвязь между основными столбцами (желтыми) и дополнительными столбцами (оранжевыми). Закономерность - это когда 1 появляется либо в той же строке оранжевого столбца, где стоит 1 в желтом столбце. Либо смещена на 1-2 строки выше или ниже. Проблема в том, что если 1 оранжевого столбца смещена более чем на 2 строки, то формула ее уже не видит. Сейчас я подсветил фиолетовыми прямоугольниками - где размещены 1 в дополнительном столбце, но формула уже не видит эту закономерность.
Сейчас действует правило Если закономерность идет в предыдущих двух строках - то "-1" Если закономерность проявляется в той же строке - то "1" Если закономерность идет в последующих двух строках - то "2"
Как поменять формулу, чтобы в ячейках - показывались число - на сколько строк отстоит единица от нужной строки (максимум 30) ? Если закономерность идет в предыдущих ячейках - то "-1" если отстоит на 1 строку вверх (до - 30 если 1 отстоит на 30 строк вверх) Если закономерность проявляется в той же строке - то "0,5" Если закономерность идет в последующих ячейках - то "1" если 1 отстоит на 1 строку вниз (до +30 если 1 отстоит на 30 строк вниз)kNNeR
последняя заполненная в основных - 32 строка, в дополнительных - 34 вопрос - как на этом "примере" проверять работу формул? второй вопрос - нужна именно формула или рассматриваются альтернативные варианты?
последняя заполненная в основных - 32 строка, в дополнительных - 34 вопрос - как на этом "примере" проверять работу формул? второй вопрос - нужна именно формула или рассматриваются альтернативные варианты?прохожий2019
Что-то не видно энтузиазма у формулистов. Может PQ устороит?
[vba]
Код
let l={-30..30}, ft=(t)=>[ a = Table.ToColumns(t), b = List.Transform(a, each List.PositionOf(_,1,Occurrence.All)), c = Table.FromList(b, Splitter.SplitByNothing(),{"Списки"}), d = Table.AddIndexColumn(c,"Index",1,1)][d], fl=(x,y)=>[ a = List.Accumulate(l,{},(i,j)=> if List.ContainsAll(List.Transform(y,each _-j),x) then i&{j} else i), b = List.Transform(a,Text.From), c = Text.Combine(b,"; ")][c], base = ft(Excel.CurrentWorkbook(){[Name="основа"]}[Content]), add = ft(Excel.CurrentWorkbook(){[Name="дополнение"]}[Content]), tbl = Table.AddColumn(base,"tmp",each add), exp = Table.ExpandTableColumn(tbl, "tmp", {"Списки", "Index"}, {"tmp.Списки", "tmp.Index"}), fun = Table.AddColumn(exp, "Закономерность", each fl([Списки],[tmp.Списки])), select = Table.SelectColumns(fun,{"Index", "tmp.Index", "Закономерность"}), to = [ a = Table.TransformColumnTypes(select, {"tmp.Index", type text}), b = Table.Pivot(a, List.Distinct(a[tmp.Index]), "tmp.Index", "Закономерность")][b] in to
[/vba]
Что-то не видно энтузиазма у формулистов. Может PQ устороит?
[vba]
Код
let l={-30..30}, ft=(t)=>[ a = Table.ToColumns(t), b = List.Transform(a, each List.PositionOf(_,1,Occurrence.All)), c = Table.FromList(b, Splitter.SplitByNothing(),{"Списки"}), d = Table.AddIndexColumn(c,"Index",1,1)][d], fl=(x,y)=>[ a = List.Accumulate(l,{},(i,j)=> if List.ContainsAll(List.Transform(y,each _-j),x) then i&{j} else i), b = List.Transform(a,Text.From), c = Text.Combine(b,"; ")][c], base = ft(Excel.CurrentWorkbook(){[Name="основа"]}[Content]), add = ft(Excel.CurrentWorkbook(){[Name="дополнение"]}[Content]), tbl = Table.AddColumn(base,"tmp",each add), exp = Table.ExpandTableColumn(tbl, "tmp", {"Списки", "Index"}, {"tmp.Списки", "tmp.Index"}), fun = Table.AddColumn(exp, "Закономерность", each fl([Списки],[tmp.Списки])), select = Table.SelectColumns(fun,{"Index", "tmp.Index", "Закономерность"}), to = [ a = Table.TransformColumnTypes(select, {"tmp.Index", type text}), b = Table.Pivot(a, List.Distinct(a[tmp.Index]), "tmp.Index", "Закономерность")][b] in to
kNNeR, дело-то не во внешнем виде, а в структуре данных, удобной для обработки. У вас есть формула, есть скрипт - адаптируйте под свои задачи, если хотите чтобы все сделали за вас - обратитесь в раздел "работа", может там найдется больше желающих
kNNeR, дело-то не во внешнем виде, а в структуре данных, удобной для обработки. У вас есть формула, есть скрипт - адаптируйте под свои задачи, если хотите чтобы все сделали за вас - обратитесь в раздел "работа", может там найдется больше желающихпрохожий2019
Сообщение отредактировал прохожий2019 - Пятница, 04.09.2020, 19:28