2016-12-29 6 views
1

Excelで大量のデータを再フォーマットすることに関する質問があります。現在のところ、データは次のように「ブロック」値でソートされた4つの列になっています。私が好きな何列の値でデータセットを再フォーマットする

enter image description here

関数を作成することです(あるいはマクロ)、それらの値を切り出され、データをソートし、2の「ブロック」の値を、対応するすべてのデータを取ることができ、かつブロック1に対応する "F635平均"値の隣にそれらを貼り付けます。私はブロック3についてもそのプロセスを繰り返すことができます。結果は次のようになります。もちろん

enter image description here

を、私は手動でそれをしたが、ブロック番号は20 +する拡張するとき、それは面倒です。私はこれを行うためのマクロを作成しようとしましたが、動作させるように見えませんでした(それを保存しなかった、そうでなければ私のコードを投稿する...)。

ご協力いただければ幸いです。前もって感謝します。

答えて

0

彼らはあなたの例に表示されるあなたの「ブロック」の値が、私はこれが動作すると思います、順番に既に存在する場合は、次の

Sub FunnySort() 
    Dim ws As Worksheet 
    Dim row, lastRow, newRow, newCol, block, oldBlock As Integer 
    Dim fromCell, toCell As Range 

    Set ws = Sheets("Sheet1") 
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).row 

    oldBlock = ws.Range("B2").Value2 
    newCol = 1 

    For row = 3 To lastRow 
    block = ws.Cells(row, 2).Value2 

    If block = oldBlock And newCol = 1 Then 
     ' same initial block -- don't do anything 
    Else 
     If block <> oldBlock Then 
     newRow = 2 
     newCol = newCol + 5 
     oldBlock = block 
     End If 

     Set fromCell = ws.Cells(newRow, newCol) 
     Set toCell = ws.Cells(newRow, newCol + 4) 

     ws.Range(fromCell, toCell).Value2 = ws.Range("A" & row & ":E" & row).Value2 
     newRow = newRow + 1 
     ws.Range("A" & row & ":E" & row).Clear 
    End If 
    Next row 
End Sub 

それが順序でない場合は、それが追加するのは簡単です。

また、これは、「ブロック」値が数値をスキップする(つまり3から5になる)場合、ブロックの列もスキップしないことを前提にしています。あなたの例から、私はあなたが望む行動を教えられませんでした。スキップしたい場合は、それを組み込むだけでも簡単です。

関連する問題