Как перенести столбец в матрицу на новом листе в Excel? - PullRequest
0 голосов
/ 28 февраля 2019

Я не большой пользователь Excel, но один клиент настаивает, чтобы я его использовал.

У меня есть данные в 1728 ячейках в столбце.Я хочу преобразовать его в матрицу 64х27 на новом листе.Я нашел функцию OFFSET и попытался

=OFFSET(ThreePeople!A2:A1729,64,27)

, но это дало ошибку (! VALUE), и запрос "помощи по этой ошибке" не помог.

Что я делаю неправильно?

РЕДАКТИРОВАТЬ: очевидно, OFFSET является неправильной функцией.Сожалею.

Я хочу матрицу с 64 строками и 27 столбцами.Ячейка A2 в столбце переместится в ячейку A1 на новом листе, затем:

от A3 до A2 ..... от A28 до A27, от A65 до A64, от A66 до B2 ..... и т. Д..

Я сделал это в SAS с помощью следующего кода:

 horiz = mod(location-1, 27);
 vert = int(location/27) + 1;

, где "location" будет номером строки исходных данных, а horiz и vert будут теми местами, где я хочуновые данные.

Ответы [ 4 ]

0 голосов
/ 28 февраля 2019

= ИНДЕКС (новостной лист! $ A: $ A, ROW (A1) * 64-64 + COLUMN (A1))
заполнить формулу 64 справа и 27 вниз (a1 = 1, a2 = 2 и т. Д.)

0 голосов
/ 28 февраля 2019

Поместите любую формулу ниже в ячейку A1:

Чтобы получить 27x64, используйте эту формулу:

=OFFSET(ThreePeople!$A2,COLUMNS(ThreePeople!$A2:A2)-1+(ROWS($1:1)-1)*64,0)

Перетащите ее вячейка AA1, а затем перетащите этот диапазон на 27 строк вниз.Это заполнение слева направо / сверху вниз.

Чтобы получить 64x27, используйте эту формулу:

=INDEX(ThreePeople!$A$2:$A$1729,ROW(A1)+(64*(COLUMNS($A$1:A$1)-1)))

Перетащите его вниз в ячейкуA64 затем перетащите диапазон в столбец 27 (AA).Это заполняет сверху вниз / слева направо.

0 голосов
/ 28 февраля 2019

Я бы использовал INDEX():

=INDEX(ThreePeople!$A:$A,ROWS($1:1)+1+(COLUMNS($A:A)-1)*64)
0 голосов
/ 28 февраля 2019

вы можете создать макрос, который бы сделал это для вас

Sub SplitColumn()

Dim rng As Range
Dim InputRng As Range
Dim OutRng As Range
Dim xRow As Integer
Dim xCol As Integer
Dim xArr As Variant
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8)
xRow = Application.InputBox("Rows :", xTitleId)
Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
Set InputRng = InputRng.Columns(1)
xCol = InputRng.Cells.Count / xRow
ReDim xArr(1 To xRow, 1 To xCol + 1)
For i = 0 To InputRng.Cells.Count - 1
    xValue = InputRng.Cells(i + 1)
    iRow = i Mod xRow
    iCol = VBA.Int(i / xRow)
    xArr(iRow + 1, iCol + 1) = xValue
Next
OutRng.Resize(UBound(xArr, 1), UBound(xArr, 2)).Value = xArr
End Sub

После этого вы запустите макрос, выделите ячейки, которые хотите транспонировать, введите количество строк и выберите выходную ячейку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...