2017-01-19 15 views
0

Я попытался найти формулу Google Spreadsheet, которая будет транспонировать строки, скажем, 5-столбцового массива по диагонали, как это (при условии, что данные, например, A1: E20)Переместить строку данных в диагональ в Google Таблице

А1

А2 В1

А3 В2 С1

А4 B3 С2 D1

А5 B4 С3 D2 Е1

A6 B5 C4 D3 E2

A7 B6 C5 D4 E3 ...

Я нашел решения противоположной задачи (от диагонали к строке или столбце - большое спасибо за помощь), но не для вот этот.

Ваша помощь очень ценится!

+0

Вы, вероятно, нашли «решение для oppos ite problem "в этом сообщении: http://stackoverflow.com/questions/41741320/transpose-diagonal-to-row-in-google-spreadsheet? Если предоставленный ответ отвечает на ваш вопрос (в этом сообщении), вы можете хотя бы принять ответ? – JPV

+0

Правильно, JPV! К сожалению, я не знал, что есть функция ответа на прием. Я добавил благодарный ответ, но он, очевидно, был удален. В любом случае проблема решена, спасибо! – nickros

ответ

0

Вот еще один способ, который восходит к вашему оригиналу напишите

=iferror(if(columns($A1:A1)>rows(A$1:A1),"",index(A$1:A$5,rows(A$1:A1)-columns($A1:A1)+1)),"") 

enter image description here

+0

Это похоже на то, спасибо Тому! – nickros

0

Edit:

Я удалил свой старый комментарий, потому что я неправильно понял ваш вопрос. Следующий код работает для всех ячеек, вам просто нужно перетащить их в размер. Код предполагает начальную строку из одного и столбец из 11, но может быть скорректирован на любое значение.

=if((row()-(column()-11))>0,indirect(char(column()-10+64)&row()-(column()-11)),"") 

Edit 2:

Таким образом, чтобы сделать это полностью переменным, вам нужно только знать расстояние между вашей верхней левой ячейкой исходных данных и верхней левой ячейкой нового блока. Назовое число столбцов разности «дй» число строк разностного «ау»

=if(((row()-dy)-(column()-dx))>0,indirect(char(column()-dx+65)&(row()-dy)-(column()-dx)),"") 

просто заменить дЙ и д с номерами, или ссылками на ячейки, и вперед!

Edit 3:

Последний один я обещаю, это один фиксирует пустую ячейку в верхнем ряду (хотя я только получаю один)

=if(((row()-dy+1)-(column()-dx))>0,indirect(char(column()-dx+64)&(row()-dy+1)-(column()-dx)),"") 
+0

Спасибо! Это работает, но у меня есть проблема с настройкой формулы, если она помещена в другом месте на листе. Особенно, если массив транспонированных ячеек должен начинаться в другой строке, чем исходные данные. – nickros

+0

Еще раз спасибо! Я попробовал второе редактирование, и теперь он позволяет свободно размещать новый блок. Но у меня все еще есть проблемы. Изменив «dx + 65» на «dx + 64», я получил его на работу, однако данные в новом блоке были сдвинуты на 3 строки относительно его верхней левой ячейки, где размещена формула.Однако я могу жить с этим. – nickros

+0

незначительная коррекция –