簡體   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