如何在Excel中的新工作表中将列转置为矩阵?

时间:2019-02-28 12:07:29

标签: excel

我不是一个Excel用户,但是一个客户坚持要使用它。

我在一列的1728个单元中有数据。我想将其转换为新工作表中的64x27矩阵。我找到了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;

其中“位置”将是原始数据的行号,horiz和vert将是我想要新数据的位置。

4 个答案:

答案 0 :(得分:3)

在单元格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)。从上到下/从左到右填充。

答案 1 :(得分:1)

您可以创建一个宏来为您完成

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

运行宏之后,选择要转置的单元格,键入多少行并选择输出单元格

答案 2 :(得分:1)

我会使用INDEX()

=INDEX(ThreePeople!$A:$A,ROWS($1:1)+1+(COLUMNS($A:A)-1)*64)

答案 3 :(得分:1)

= INDEX(newsheet!$ A:$ A,ROW(A1)* 64-64 + COLUMN(A1))
填写公式64右27向下 (a1 = 1,a2 = 2等)