2013-07-01 140 views
0

我在Excel數據格式如下重新排列列的行數據

Resource  2/2/2013 2/3/2013 2/4/2013 
    Name1   9   9   9 
    Name2   9   9   9 
    Name3   9   9   9 

我有上述數據轉換成這樣的:

Resource Date  Hours 
Name1  2/2/2013  9 
Name1  2/3/2013  9 
Name1  2/4/2013  9 
Name2  2/2/2013  9 
Name2  2/3/2013  9 
Name2  2/4/2013  9 
Name3  2/2/2013  9 
Name3  2/3/2013  9 
Name3  2/4/2013  9 

是否有任何功能excel可以做到這一點。我只能找到row to columns函數,它不會幫助我,因爲它只會提供transpose數據,並且不會創建上面的多個條目。

即使通過VBA,最好的方法是什麼?

回答

1

這裏是一個VBA解決方案:

Sub Example() 
    Dim Resources() As String 
    Dim rng As Range 
    Dim row As Long 
    Dim col As Long 
    Dim x As Long 

    ReDim Resources(1 To (ActiveSheet.UsedRange.Rows.Count - 1) * (ActiveSheet.UsedRange.Columns.Count - 1), 1 To 3) 

    'Change this to the source sheet 
    Sheets("Sheet1").Select 

    'Read data into an array 
    For row = 2 To ActiveSheet.UsedRange.Rows.Count 
     For col = 2 To ActiveSheet.UsedRange.Columns.Count 
      x = x + 1 
      Resources(x, 1) = Cells(row, 1).Value ' Get name 
      Resources(x, 2) = Cells(1, col).Value ' Get date 
      Resources(x, 3) = Cells(row, col).Value ' Get value 
     Next 
    Next 

    'Change this to the destination sheet 
    Sheets("Sheet2").Select 

    'Write data to sheet 
    Range(Cells(1, 1), Cells(UBound(Resources), UBound(Resources, 2))).Value = Resources 

    'Insert column headers 
    Rows(1).Insert 
    Range("A1:C1").Value = Array("Resource", "Date", "Value") 

    'Set strings to values 
    Set rng = Range(Cells(1, 3), Cells(ActiveSheet.UsedRange.Rows.Count, 3)) 
    rng.Value = rng.Value 
End Sub 

原文:

Original Data

結果:

enter image description here

+0

謝謝@Ripster該做的工作 – mayur2j

+0

唯一關心的是它的複製相同工作表中的數據而不是在「目的地表」中。這是奇怪的,因爲我正在給出正確的'表名',但最後它只是選擇了'dest sheet',並且所有數據都只在源表單中進行了處理。 – mayur2j

+0

這不應該發生。它適用於我。您是否試過單步執行代碼並試圖找到停止按預期工作的行? – Ripster

1

我想知道是否有可能沒有VBA,它似乎是。 但有一些推定,特別是你是transformin的地區是矩形的。

然後,你可以使用QUOTIENT MOD功能(它可以合併「助手列C-E」在一起,但爲了更清晰的解釋我給他們展示)。

enter image description here

在A9我有列數的值(也可能是由其他功能得到) - 只是有點普通。

然後我使用INDIRECT()函數以這種方式:

  • 細胞G9:=INDIRECT("R"&2+D9&"C1";FALSE)
  • 細胞H9:=INDIRECT("R1C"&2+E9;FALSE)
  • 細胞I9:=INDIRECT("R"&2+D9&"C"&2+E9;FALSE)

然後只需將它下。