我不是一个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将是我想要新数据的位置。
答案 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等)