2012-11-30 102 views
-1

我有一列數據大約有800條記錄。每個18個單元格都是一個記錄。我需要一個腳本,它能夠每隔18個單元格動態地將它們轉換爲一行,或者甚至可以通過編寫excel公式來將列中的每18條記錄轉置爲一行。將單列轉置爲多行

+0

嗨,歡迎SO。我們喜歡幫助人們,但我們必須看到你所嘗試過的。這證明你有問題,並不是爲了得到一些複製粘貼代碼。 – rcdmk

+1

如果你的數據以A1開始,那麼在B1中輸入:'= IF(MOD(ROW(),18)= 1,OFFSET($ A1,COLUMN() - 2,0),「」)'將公式填入填滿18列,然後再覆蓋800行。 –

+0

蒂姆的想法是一個優雅的,應該工作,但我承認,我不願意使用基於公式的解決方案,如800行涉及這樣的事情。取決於你的電腦的速度,但我發現,如果你投入大量精力,像Excel這樣的查找式公式往往會在Excel中磨合。如果你走這條路,我會傾向於做一次計算,複製公式塊並粘貼爲值。 –

回答

1

您可能會被問到「您嘗試過了些什麼」,因爲您最好是對此有所懷疑,並詢問何時卡住而不是要求提供完整的解決方案。剛纔說過,我可以爲您提供一些提示,幫助您入門。

要在VBA中執行此操作,您需要執行一個循環,該循環從第一個單元格開始,獲取由該單元格和隨後的18行組成的範圍,然後將其粘貼到(可能)工作簿中的另一個工作表中,從一列到一行。循環將抵消19個單元格並重新開始。

看看,我在此線程答曰: Unable to write a Macro for Excel VBA to copy a specific cell value to the next blank rows

這會給你的語法做一個循環是有點類似你的。

要獲得執行粘貼/轉置的語法,請手動執行並使用宏錄製器記錄您的操作。這可以在Developer選項卡上找到。 (如果您沒有可見的開發人員選項卡,請轉至文件 - >選項 - >自定義功能區並打開開發人員選項卡。)

試試看,如果您發現不能使其工作只需再次發佈你的卡住的地方的細節。

0

您可以使用此VBA代碼來實現此目的。

Public Sub TransposePaste() 
    'Value we want to step by.... 
    Dim stepVal As Long 
    stepVal = 18 
'Declare start row variable (-1) 
Dim row As Long 
row = 0 

'Declare the column the data is coming from 
Dim col As Long 
col = 1 

'Declare and set worksheet 
Dim ws As Worksheet 
Set ws = Sheet1 

'end row of the data 
Dim endRow As Long 


endRow = ws.Cells(ws.Rows.Count, col).End(xlUp).row 

'cycle to end of data end of data... 
For i = 1 To endRow Step stepVal 

'increment row each time 
row = row + 1 

    'cycle through the columns outputting the data 
    For j = 1 To stepVal 

    Sheet1.Cells(row, j).Value = Sheet1.Cells(i + j - 1, col).Value 

    Next j 
Next i 

末次