2016-03-04 27 views
0

我需要在Excel中轉​​置或將鋸齒陣列轉換爲多列,並且遇到一些困難。我的數據如下:Excel Transpose - Jagged Array

Round A1 A2 A3 A4 A5 
1  1 2 3 
2  4  5 
3  6   7 
4  8  9 

所以我需要拉平這個地方我去的每一行,每一組的序列號只有一個列轉換爲一個單獨的一個被標記每行

SeqNum A1 A2 A3 A4 A5 
1  1 
2  2 
3   3 
4  4 
5    5 
6 6 
7    7 
8  8 
9   9 

我編輯了示例中的數字以使其更清晰。基本上我想將每行有多個條目的第一個表放到第二個只有每行1個條目的表中。

我有以下的算法,我想在Excel中

實施
int numOfTotalElements = 0; 
List<int> flattened = new List<int>(); 
int numRows = matrix.length; 
for(int i=0; i<matrix.length; i++){ 
    for(int j=0; j<matrix[i].length; j++){ 
    flattened.add(matrix[i][j]) 
    }//end cols 
}// end rows 

foreach(int i in flattened){ 
    System.Console.WriteLine(i); 
} 
+1

有* '有一些困難' 之間有很大的區別* * *'爲某人爲我做我的工作釣魚'*。任何人在本論壇尋求代碼是**預期**顯示原始努力,而不僅僅是一個需求列表。除了其他所有內容之外,您的個人資料顯示了您收到答案後放棄您的問題的歷史記錄(請參閱[this](http:// stackoverflow.com/help/someone-answers))。你的問題很有趣,這是一個恥辱,你沒有付出一些努力。 – Jeeped

+0

Jeeped,沒有人在這裏釣魚,我不是很擅長VBA,否則這是一個需要解決的問題。你怎麼知道我沒有工作?也許,你是感恩的網絡釣魚者。如果你不想回答這個問題,你也不需要嘗試和講課。下一次將自己的意見留給自己,並回答問題或繼續。 –

+1

我投票結束這個*'gimme teh codez'*請求作爲題外話,因爲它明顯不足以作爲[SO](http://goo.gl/whPhMk)問題,並且不會對未來有任何益處觀衆。 OP還沒有表現出對平臺的基本知識。除了要求和樣本數據清單之外,沒有顯示出原始的努力。這個問題在[SO](http://goo.gl/whPhMk)上對每個問題的衡量都是毫無價值的。 – Jeeped

回答

0

看看這些人得到你,你試圖去。

Option 1:

Sub expandFlatten() 
    Dim c As Long, i As Long, j As Long 
    Dim vals As Variant, nuvals As Variant 

    With Worksheets("sheet2") 
     With .Cells(1, 1).CurrentRegion 
      vals = .Cells.Value2 
     End With 
     c = UBound(vals, 2) + 2 
     .Cells(1, c).CurrentRegion.Clear 
     .Cells(1, c).Resize(UBound(vals, 1), UBound(vals, 2)) = vals 
     With .Cells(1, c).CurrentRegion 
      .Cells(1, 1) = "SeqNum" 
      .Offset(1, 1).ClearContents 
      .Cells(2, 1).Resize(Application.Max(.Parent.Cells(1, 1).CurrentRegion), 1) _ 
       .DataSeries Rowcol:=xlColumns, Type:=xlLinear, Step:=1 
     End With 
     With .Cells(1, c).CurrentRegion 
      ReDim nuvals(1 To .Rows.Count - 1, 1 To .Columns.Count - 1) 
      For i = LBound(vals, 1) + 1 To UBound(vals, 1) 
       For j = LBound(vals, 2) + 1 To UBound(vals, 2) 
        If Not IsEmpty(vals(i, j)) And IsNumeric(vals(i, j)) Then 
         nuvals(vals(i, j), j - 1) = vals(i, j) 
        End If 
       Next j 
      Next i 
      .Offset(1, 1).Resize(UBound(nuvals, 1), UBound(nuvals, 2)) = nuvals 

     End With 
     .Activate 
     .Cells(1, 1).Select 
    End With 
End Sub 

Option 2:

重新創建列標題標籤和一個數字序列向下右側(高達MAX(B:F))後,將在P2這個標準公式,

=IFERROR(INDEX(B:B, MATCH($O2,B:B, 0)), "") 

向右和向下填充。


expandFlatten
原始數據expandFlatten()INDEX(...,MATCH(...


+0

這裏可能並不重要,但我會建議將所有單元格內容加載到內存數組中(使用'vals = Range(「A2」).Resize(5,6).Value2')並緩存所有'將UBOUND()'語句轉換爲變量。 – ja72

+0

Jeeped,我相信你的解決方案作品2號作品。選項1我沒有測試,因爲我不知道VBA,所以我不能修改它。不過,我會嘗試一下,因爲無論如何你都會付出努力。再次感謝。現在我該如何標記爲已回答。 –

+0

John,如果你有興趣整理你的問題隊列,請點擊我在這個問題的原始評論中提供的鏈接。友善的建議:雖然承認答案是「接受的答案」,但這是一個嚴格的自願行動,它確實會增加你在這個社區的聲望,並且可能會從考慮花時間的人的角度以更有利的角度來看待你未來的問題回覆。 – Jeeped