- 締切済み
セルの色で並び替えをするには
Excel2003を使用し、セルの色で並び替えをする際の VBAの組み方かプログラムを教えて下さい。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- chibita_papa
- ベストアンサー率60% (127/209)
なぜ、CreateObjectとしてるかよく分かりませんが たぶん、別のEXCELを立ち上げる必要が有るのだろうと言うことにして、 Const xlAscending = 1 Const xlYes = 1 Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set objWorkbook = objExcel.Workbooks.Open("hogehoge.xls") Set objWorksheet = objWorkbook.Worksheets("Sheet1") i = 2 Do Until objExcel.Cells(i, 1) = "" intColor = objExcel.Cells(i, 2).Interior.ColorIndex Select Case intColor Case 3 intSortOrder = 4 Case 4 intSortOrder = 1 Case 6 intSortOrder = 2 Case 41 intSortOrder = 3 End Select objExcel.Cells(i, 3) = intSortOrder i = i + 1 Loop objWorksheet.Range("A1:C" & i - 1).Sort Key1:=objWorksheet.Range("C2"), Order1:=xlAscending, Header:=xlGuess
- chibita_papa
- ベストアンサー率60% (127/209)
EXCEL2003では標準でセルの色でソートは出来ません。 VBAでやるとしたら 列を挿入し Public Function GetColorIndex(ByVal r As Range) As Integer GetColorIndex = r.Interior.ColorIndex End Function でファンクションプロシージャを作成し、カラーインデックスを取得 カラーインデックスでソート 例えば 赤 1 黄色2 青 3 でソートするとしたら、 別途テーブルを作成し VLOOKUPをかませれば好きなようにソートできます。
- imogasi
- ベストアンサー率27% (4737/17069)
エクセル2003までは セルの色は順序というものはない。ColorIndexでやるとしても、それが常識とか一般的でではない。 だからどういう順序だとなる。 やるにしても作業列に色に先後の順序のコードをVBAで一旦作ってその作業列でソートすることになる。 ソートは「セルの値」でやるのが基本。そのことが割ってないのだろうと思う。色をあらわす文字を何処かの列につくり(これならVBAでやれてやさしいかも)、ユーザー設定リストなどを使うことをj考えては。ツールーオプションーユーザー設定リストで赤、黄、緑、青・・・など定義) 質問表現振りからして、本格的にやるのは、質問者にはVBAでは難しすぎるのでは。 ーー 参考 2007以後 条件付書式などが複雑に拡充された。 http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-sort.html の終わりの方を見ること。 「セルの色による並べ替え」の項。 これはマイクロソフトがそのようなプログラムを組んだために出来るものだ。 外にはGoogleで「エクセル2007 色でソート」などで照会したらよい。
お礼
回答ありがとうございます。
お礼
回答ありがとうございます。
補足
Excel2003でセルの色でソートすることができないのは把握しております。 もし、VBAで組めるのであればその記述方法を教えてほしいと思い質問しました。 ウェブ上で下記の記述がありましたが、「intSortOrder」がダメなようで、実行できない状態です。 よろしければ、問題箇所を教えていただけますでしょうか? Const xlAscending = 1 Const xlYes = 1 Set objExcel = CreateObject("Excel.Application") objExcel.Visible = True Set objWorkbook = objExcel.Workbooks.Open("ファイル場所") Set objWorksheet = objWorkbook.Worksheets("Sheet1") i = 2 Do Until objExcel.Cells(i, 1) = "" intColor = objExcel.Cells(i, 2).Interior.ColorIndex Select Case intColor Case 3 intSortOrder = 4 Case 4 intSortOrder = 1 Case 6 intSortOrder = 2 Case 41 intSortOrder = 3 End Select objExcel.Cells(i, 3) = intSortOrder i = i + 1 Loop