- ベストアンサー
Excel VBAでセルの整列
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例えば、A1:B9に表があるとして。 Sub macro() Dim C As Range For Each C In Range("B2:B9") If C.Interior.ColorIndex <> xlColorIndexNone Then C.Cut Range("B" & C.Offset(, -1).MergeArea.Row + C.Offset(, -1).MergeArea.Rows.Count).Insert Shift:=xlDown End If Next C End Sub
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
どうも、位置がはっきり決まっていないような気がしますし、途中で変えましたと言われるもの嫌なので、 *左上隅 ここの場所で、設定してください。現在は色はひとつの設定しかありません。 '// Sub ColorSortPrg() Dim LastRow As Long Dim i As Long, j As Long, k As Long Dim StRng As Range, st As Long, cl As Long Set StRng = Range("A1") '*左上隅 st = StRng.Row + 1 cl = StRng.Column LastRow = Cells(Rows.Count, StRng.Column).End(xlUp).Row Application.ScreenUpdating = False For j = st To LastRow k = Cells(j, cl).MergeArea.Rows.Count For i = 1 To k With Cells(j, cl) If .Cells(i, 2).Interior.ColorIndex <> xlColorIndexNone Then .Cells(i, 3).Value = 2 Else .Cells(i, 3).Value = 1 End If End With Next i sColorSort Cells(j, cl).MergeArea.Offset(, 1).Resize(k, 2) Cells(j, cl).MergeArea.Offset(, 2).Resize(k, 1).ClearContents j = Cells(j, cl).Row + Cells(j, cl).MergeArea.Rows.Count - 1 Next Application.ScreenUpdating = True End Sub Private Sub sColorSort(rng As Range) rng.Sort Key1:=rng.Cells(1, 2), _ Order1:=xlAscending, _ Header:=xlNo End Sub