2017-08-04 81 views
0

任何人都可以幫助您將Excel表格中的數據轉換爲垂直列表嗎?將表格數據轉換爲Excel中的垂直列表

我試過使用一個宏,但它一直在跳起來,我不知道我要去哪裏錯了。

我正在下載一個大型數據表,但這些數據需要放在工作表上另一個宏的列表中。有了多少數據,手動執行它是不切實際的,所以我想知道是否有快速的方法。

在此先感謝!

+0

沒有太多的錯誤描述基於哪些嘗試解決您的情況,但你[試過](https://stackoverflow.com/questions/20541905/convert-matrix-to-3-column-表反向樞轉逆透視-弄平正常/ 20543651#20543651)? – pnuts

+0

如果您知道宏,然後嘗試對數據範圍進行計數並將其用於轉置。 – Shrikant

+0

表單中有多少列數據?你能展示一下牀單的外觀嗎? –

回答

1

你可以在一個公式中做到這一點。假設你有一個電子表格,其中看起來像這樣(我已經把僞數據表示該單元的位置,這樣就可以看到它結束了):

Spreadsheet with 8 columns and 15 rows

在另一個小區(或另一片)把下面的公式:

=OFFSET($A$1,INT((ROW(1:1)-1)/8),(COLUMN(A:A)-1)+MOD(ROW(1:1)-1,8)) 

,兩個8的公式中有沒有因爲片具有8列,如果它有或多或少你會改變這8對您的電子表格中的列數。

然後您將該公式拷貝下來,你會得到這樣的:

Sheet with formula in

它的工作原理,因爲它使用的偏移公式,得到一個單元的使用行和列的參考內容。

INT((ROW(1:1)-1)/8) 

這部分可以確保行數不從1移動到2等,直到8行新配方已經建立,使房間爲8列被複制。

(COLUMN(A:A)-1)+MOD(ROW(1:1)-1,8) 

這部分帶柱和1增加爲每行下來,我們去,直到我們到達第8列時,MOD函數返回到0,我們開始一個新的數據行上的原片。

0

有些東西謊言這應該爲雅做的伎倆。

Sub TransposeThis() 

Set Rng = Sheets("sheet1").Range("B2:B6") 'Input range of all fruits 
Set Rng_output = Sheets("sheet2").Range("B2") 'Output range 

For i = 1 To Rng.Cells.Count 
    Set rng_values = Range(Rng.Cells(i).Offset(0, 1), Rng.Cells(i).End(xlToRight)) 'For each fruit taking the values to the right which need to be transposed 

    If rng_values.Cells.Count < 16000 Then 'To ensure that it doesnt select till the right end of the sheet 
     For j = 1 To rng_values.Cells.Count 
       Rng_output.Value = Rng.Cells(i).Value 
       Rng_output.Offset(0, 1).Value = rng_values.Cells(j).Value 
       Set Rng_output = Rng_output.Offset(1, 0) 'Shifting the output row so that next value can be printed 
     Next j 
    End If 
Next i 

End Sub 

前:

enter image description here

後:

enter image description here

或者,如果你只是想一切都轉成一個單一的載體,這聽起來有點不可思議,但可能需要這樣的東西,你可以試試下面的腳本。

Sub TryThis() 
    Dim rRow   As Range 
    Dim nCol   As Long 
    Dim iOfs   As Long 

    Application.ScreenUpdating = False 
    With Sheet1.Range("A1:E20") 
    nCol = .Columns.Count 
    For Each rRow In .Rows 
     rRow.Copy 
     Sheet2.Range("A2").Offset(iOfs).PasteSpecial Transpose:=True 
     iOfs = iOfs + nCol 
    Next rRow 
    End With 
    Application.ScreenUpdating = True 
End Sub