EXCEL

2017-11-26 8 views
-1

でVBAを持つトランスポーズ私はこのようなエクセルでいくつかのデータを持っている:EXCEL

1A 
1B 
1C 
2A 
2B 
2C 
3A 
3B 
3C 

私はこれ欲しい:

1A 2A 3A 
1B 2B 3B 
1C 2C 3C 

をそして、これはVBAで私の式であるが、私は間違ったデータを持っています。

Public Sub TransposePaste() 


'Value we want to step by 
Dim stepVal As Long 
stepVal = 3 


'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 

End Sub 

アイデアと助け?

+0

こちらも追加です。 'ws'変数は必要ありません。自由な 'sheet1'変数をうまく使ったことがあります - それをどこでも使用してください。将来的に別のシート(sheet1ではなく)を使用する可能性がある場合は、 'ws'を使用する必要があります – CallumDA

+0

この投稿はhttps://stackoverflow.com/questions/47480022/excelと似ています-vba-transpose-variable-column-range-to-variable-rows/47480406?noredirect = 1#comment81916286_47480406 –

答えて

0

ただ、この変更:これに

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

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

またOption Explicitを使用し、それらのij変数を宣言します!


私は少し違っていました。メモリ内に配列を構築してから、ワークシートが完成したらワークシートにダンプすることをお勧めします。このようなもの:

Option Explicit 

Public Sub Test() 
    Dim v As Variant, output As Variant 
    Dim col As Long, i As Long, j As Long 

    col = 3 

    v = Sheet1.Range("A1:A9").Value 'input range 
    ReDim output(1 To Int(UBound(v, 1)/col), 1 To col) 

    For i = 1 To UBound(output) 
     For j = 1 To col 
      output(i, j) = v((i - 1) * col + j, 1) 
     Next j 
    Next i 

    With Sheet1.Range("C1") 'output range 
     .Resize(UBound(output, 1), UBound(output, 2)).Value = output 
    End With 
End Sub 
関連する問題