繁体   English   中英

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

[英]How do I transpose a column to a matrix in a new sheet in 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将是我想要新数据的地方。

将以下任一公式放在单元格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)。 这从上到下/从左到右填充。

您可以创建一个宏来为您做

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

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

我会使用INDEX()

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM