2016-03-30 6 views
-1

私は1つのExcelの表にこれらの列があります。スプリットごとに5列

1,2,3,4,5,6,7,8,9,10... 
1a,2a,3a,4a,5a,6a,7a,8a,9a,10a... 
... 

と私は別のものにこれらの列をコピーするには、ファイルとスプリットを得意と別の行

1,2,3,4,5 
6,7,8,9,10 
1a,2a,3a,4a,5a 
6a,7a,8a,9a,10a 
にすべての5番目の列を
+0

どのコードを試しましたか?私たちはあなたを助けることができるようにそれを更新する –

答えて

2

私は、分離したいデータが最初の行にだけあると仮定しています。その場合は、以下を参考にすべきである:

Sub columnsInRows() 

     Dim rngData As Range 
     Dim intDelimiter As Integer 
     Dim arrRows As Variant 
     Dim cell As Range 
     Dim counter As Integer 
     Dim row As Integer 


     row = 1 
     intDelimiter = 5 

     Worksheets("Table1").Activate 

     Set rngData = Worksheets("Table1").UsedRange 

     ReDim arrRows(rngData.Cells.Count - 1) 

     For Each cell In rngData.Rows.Cells 
      arrRows(counter) = cell.Value 
      counter = counter + 1 
     Next 

     Worksheets("Table2").Activate 

     For counter = 0 To UBound(arrRows) 
      Cells(row, counter Mod intDelimiter + 1).Value = arrRows(counter) 
       If (counter + 1) Mod intDelimiter = 0 Then 
        row = row + 1 
       End If 
     Next 
     Worksheets("Table2").UsedRange.NumberFormat = "#,##0.00" 

    End Sub 
+0

thx、それは良いが、私のデータは複数の行に... aproxです。 200であり、小数点以下2桁に丸められた数値形式です。たとえば、103,57の場合は10に変換されます。357 408 171 688 – Peter

+0

これで上のコードが更新されました。今すぐ正しく動作するかどうかを教えてください。 – LMM9790

+0

この解決策はより良いと簡単に思われる... thx – Peter

1

これがすべてを行います:非常に迅速に

Sub evyfifth() 
    Dim ws As Worksheet 
    Dim ows as Worksheet 
    Dim rngarr() As Variant 
    Dim oarr() As Variant 
    Dim lastclm As Long 
    Dim lastrw As Long 
    Dim i&, j&, x&, y&, clms& 

    clms = 5 

    Set ws = Sheets("Sheet16") 'Change to the sheet of data 
    Set ows = Sheets("Sheet17") ' Change to output sheet 

    With ws 
     lastclm = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column 
     lastrw = .Cells.Find("*", , , , xlByRows, xlPrevious).Row 
     rngarr = .Range(.Cells(1, 1), .Cells(lastrw, lastclm)).Value 
     ReDim oarr(1 To Application.RoundUp(lastrw * (lastclm/clms), 0), 1 To clms) 
     x = 1 
     For i = 1 To UBound(rngarr, 1) 
      y = 1 
      For j = 1 To UBound(rngarr, 2) 
       If y < clms Then 
        oarr(x, y) = rngarr(i, j) 
        y = y + 1 
       Else 
        oarr(x, y) = rngarr(i, j) 
        y = 1 
        x = x + 1 
       End If 
      Next j 
     Next i 

    End With 
    ows.Range("A1").Resize(UBound(oarr, 1), clms).Value = oarr 



End Sub 

とします。

+0

素晴らしい...ありがとう – Peter