- ベストアンサー
塗潰されたセルの色の数字を抽出して並べる方法を知りたい
- 5×5マスの4つの中で同じ色で塗潰されたセルの数字を左から右に昇順に並べる方法を知りたい。
- 5×5マスの4つの中で同じ色で塗り潰されたセルの数字を抽出し、昇順に並べる方法を教えてください。
- Excel 2016を使用して、5×5マスの4つの中で同じ色の塗り潰されたセルの数字を抽出し、左から右に昇順に並べる方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
済みません。この通りに作るのが面倒で、適当に自分でデータを作りました。 その時、全ての色が使われているデータを作ってしまいました。 使われてない色があっても大丈夫なように直しました。 Option Explicit ' Sub Macro1() Dim Cell As Range Dim ColorTbl As String Dim ColorStr As String Dim Row As Long Dim Index As Integer Dim Colu As Long ' [N:XFD].ClearContents Application.ScreenUpdating = False ' For Each Cell In [M1:M4] ColorTbl = ColorTbl & Chr(Cell.Interior.ColorIndex) Next Cell ' For Row = 1 To Cells(Rows.Count, "A").End(xlUp).Row Step 13 ' For Each Cell In Cells(Row, "A").Resize(11, 11) ColorStr = Chr(Cell.Interior.ColorIndex) Index = InStr(ColorTbl, ColorStr) - 1 ' If Index >= 0 Then Colu = _ Cells(Row + Index, Columns.Count).End(xlToLeft).Column + 1 Colu = WorksheetFunction.Max(Colu, 14) Cells(Row + Index, Colu) = Cell End If Next Cell ' For Index = 0 To 3 Colu = Cells(Row + Index, Columns.Count).End(xlToLeft).Column ' If Colu > 12 Then Set Cell = Cells(Row + Index, "N").Resize(, Colu - 13) ' With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Cell .SetRange Cell .Orientation = xlLeftToRight .Apply End With End If Next Index, Row End Sub
その他の回答 (1)
- SI299792
- ベストアンサー率47% (772/1616)
Option Explicit ' Sub Macro1() Dim Cell As Range Dim ColorTbl As String Dim ColorStr As String Dim Row As Long Dim Index As Integer Dim Colu As Long ' [N:XFD].ClearContents Application.ScreenUpdating = False ' For Each Cell In [M1:M4] ColorTbl = ColorTbl & Chr(Cell.Interior.ColorIndex) Next Cell ' For Row = 1 To Cells(Rows.Count, "A").End(xlUp).Row Step 13 ' For Each Cell In Cells(Row, "A").Resize(11, 11) ColorStr = Chr(Cell.Interior.ColorIndex) Index = InStr(ColorTbl, ColorStr) - 1 ' If Index >= 0 Then Colu = _ Cells(Row + Index, Columns.Count).End(xlToLeft).Column + 1 Colu = WorksheetFunction.Max(Colu, 14) Cells(Row + Index, Colu) = Cell End If Next Cell ' For Index = 0 To 3 Colu = Cells(Row + Index, Columns.Count).End(xlToLeft).Column Set Cell = Cells(Row + Index, "N").Resize(, Colu - 13) ' With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Cell .SetRange Cell .Orientation = xlLeftToRight .Apply End With Next Index, Row End Sub
補足
いつも大変お世話になっております。 回答を頂きましたソースを実行した所、 縦に3つある(5×5マスが4つの)うち、 一番目の5×5マスが4つの塗潰されたセルの数字は右に並んだ後、 「Microsoft Visual Basic for Applications 400」のエラーが出て止まります。 どこが悪いのでしょうか?
お礼
修正頂いたソースで実行確認問題なくできました。 ありがとうございました。