更新
我已經測試VBA方法下面,它失敗(我)由於列限制,所以除非你有一個64位版本(或可能是一個比2003年晚的版本)的Excel,你將無法使用列。我修改了VBA版本來使用行而不是列,它工作正常。
我在這裏做兩個版本的演示:https://dl.dropbox.com/u/14854735/ptdata.xls
VBA方法(易/快速)
以下是未經測試。創建要處理的工作簿的副本,打開代碼編輯器並將以下代碼粘貼到新的代碼模塊(而不是工作簿或工作表代碼部分)中。
Const ROW_HEADER = 1 ' No Row Header - Set to 0
Const COL_HEADER = 1 ' No Column Header - Set to 0
Sub FormatDocument()
' This sub assumes the following
' Your source worksheet has column headers (row 1)
' Your source worksheet has row headers (column 1)
' So your data is bound by the range $B$2:$BL$49
' See above constants if this is not the case
' Your source sheet must be the active sheet when you run this sub (unless you edit below)
Dim Source As Worksheet
Dim Destination As Worksheet
Dim Pass As Integer
Dim CYear As Integer
Dim CMonth As Integer
Dim Column As Integer
Set Source = Thisworkbook.ActiveSheet ' If possible change this to the name of the source sheet
For Pass = 1 To 4
Set Destination = ThisWorkbook.Worksheets.Add
Column = 1
For CYear = (63 + ROW_HEADER) To (1 + ROW_HEADER) Step -1
For CMonth = 0 To 11
Destination.Cells(Column, 1).Value = Source.Cells(COL_HEADER + Pass + (CMonth * 4), CYear).Value
' NOTE: I've switched the row and column
' It will now use many rows and a single column
' Destination.Cells(1, Column).Value = Source.Cells(COL_HEADER + Pass + (CMonth * 4), CYear).Value
Column = Column + 1
Next
Next CYear
Next Pass
End Sub
公式法
下式應粘貼到您的目的地片材(S)和跨複製到所有必需的細胞(修改它取所需的值類型之後)。這基本上是將一個二維數組(數據)映射到一維數組上。
=INDIRECT(ADDRESS(((((COLUMN()-1)-(12*INT((COLUMN()-1)/12))))*4)+2,64-INT(COLUMN()/12),1,TRUE,"SourceSheet"))
我已經更新了配方,並如預期,現在應該工作,但是仍然被列數限制(Jan1950-Apr1971是像我一樣能得到)
這段代碼也應採取列和行標題,如果你不需要它們,那麼+1+n
變成+0+n
和64-INT(COLUMN()/12)+1
變成64-INT(COLUMN()/12)+0
。 提示未來的問題:如果您試圖自己制定解決方案(實際的代碼或公式,而不僅僅是大綱),則應將其包含在您的問題中。所以我們可以看到你已經自己去了:)
非常感謝您的快速回復。試過這些後,他們似乎沒有工作,但我正在與他們搞亂。在我嘗試太多並給出結果/問你問題之前,我想問問......這兩種不同的方法還是都需要使用?我對excel的大部分都是新手,所以我不確定。此外,我很樂意向您發送圖片,但我無法發佈照片。我認爲這將是一個非常簡單的宏(或公式),我只是不太瞭解語法。有沒有辦法給我發送圖片? – user1574832 2013-03-03 02:32:52
它的兩種不同的方法,我想說,但現在看不到。 VBA一個更容易使用。您的數據是否包含列和/或行標題,還是純粹數據?該代碼假定範圍B2:BL49覆蓋您的數據,不包括行1和列A,因爲它們是標題。您可以發佈指向文件/圖片的鏈接,數據排列方式的示例會有所幫助,以確保我的理解正確。 – NickSlash 2013-03-03 05:51:41
以下是一些圖像鏈接。再次感謝您的幫助,我認爲您非常親密,嵌套的循環只需要切換一下。 VBA迭代似乎沒有正常工作。它正確地從右向右開始(1950),但不是抓取行中的所有值,而是抓取列中的每一個四分之一,然後轉移到下一列。以下是該工具現在正在做什麼以及需要做什麼的另一個鏈接。這應該更有意義。我刪除了標題,但是黃色標題將幫助您瞭解每行和每列。 – user1574832 2013-03-03 15:16:55