- ベストアンサー
Excelで2次元カラーマップのグラフを描く方法
- Excelを使用して2次元のデータをカラーマップグラフに表示する方法を教えてください。
- 2次元のデータをExcelのX軸とy軸の2次元平面にマッピングし、データの値に応じた色で表示する方法を教えてください。
- Excelの使用経験があるのですが、2次元カラーマップのグラフを作成する方法がわかりません。どのようにすれば実現できるのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
xl2003以前をお使いの方の為に、7~8年前のxl2000用のコードを引っ張り出して来ました。#1さんご指摘の色設定部が長いので、別途投稿します。選択範囲のセルの最大・最小を求め、間をレインボーカラーで38段階に分けて色塗りします。何故38?色設定の都合だけから決めたのだと思います。中途半端ですよね... Sub test() Dim i As Long, j As Long Dim my_color_no As Long Dim max_no, min_no As Double Dim data_area As Range, mycell As Range Application.ScreenUpdating = False If TypeName(Selection) <> "Range" Then Exit Sub If Selection.Cells.Count = 1 Then Exit Sub Set data_area = Selection '色設定部 別途投稿 'この間に挿入してください。 '色設定部終わり max_no = Application.WorksheetFunction.Max(data_area) min_no = Application.WorksheetFunction.Min(data_area) With data_area For i = 1 To .Columns.Count For j = 1 To .Rows.Count Set mycell = Range(Cells(.Row + j - 1, .Column + i - 1), Cells(.Row + j - 1, .Column + i - 1)) If Application.WorksheetFunction.IsNumber(mycell.Value) = True Then my_color_no = Int((mycell.Value - min_no) / ((max_no - min_no) / 37)) + 1 'インデックスの17~55を使用しているため、オフセットをかける my_color_no = my_color_no + 17 With mycell.Interior .ColorIndex = my_color_no .Pattern = xlSolid .PatternColorIndex = xlAutomatic End With End If Next j Next i End With Application.ScreenUpdating = True End Sub
その他の回答 (2)
- mitarashi
- ベストアンサー率59% (574/965)
#2です。色設定部を投稿します。カラーインデックス18以降を使用しているのは、普通の白黒青赤位はそのまま残したかったのだと思います。 ActiveWorkbook.Colors(18) = RGB(145, 47, 253) ActiveWorkbook.Colors(19) = RGB(121, 47, 253) ActiveWorkbook.Colors(20) = RGB(96, 47, 253) ActiveWorkbook.Colors(21) = RGB(72, 47, 253) ActiveWorkbook.Colors(22) = RGB(47, 47, 253) ActiveWorkbook.Colors(23) = RGB(47, 72, 253) ActiveWorkbook.Colors(24) = RGB(47, 96, 253) ActiveWorkbook.Colors(25) = RGB(47, 121, 253) ActiveWorkbook.Colors(26) = RGB(47, 145, 253) ActiveWorkbook.Colors(27) = RGB(47, 170, 253) ActiveWorkbook.Colors(28) = RGB(47, 194, 253) ActiveWorkbook.Colors(29) = RGB(47, 219, 253) ActiveWorkbook.Colors(30) = RGB(47, 243, 253) ActiveWorkbook.Colors(31) = RGB(47, 253, 253) ActiveWorkbook.Colors(32) = RGB(47, 253, 219) ActiveWorkbook.Colors(33) = RGB(47, 253, 194) ActiveWorkbook.Colors(34) = RGB(47, 253, 170) ActiveWorkbook.Colors(35) = RGB(47, 253, 145) ActiveWorkbook.Colors(36) = RGB(47, 253, 121) ActiveWorkbook.Colors(37) = RGB(47, 253, 96) ActiveWorkbook.Colors(38) = RGB(47, 253, 70) ActiveWorkbook.Colors(39) = RGB(47, 253, 47) ActiveWorkbook.Colors(40) = RGB(72, 253, 47) ActiveWorkbook.Colors(41) = RGB(96, 253, 47) ActiveWorkbook.Colors(42) = RGB(121, 253, 47) ActiveWorkbook.Colors(43) = RGB(145, 253, 47) ActiveWorkbook.Colors(44) = RGB(170, 253, 47) ActiveWorkbook.Colors(45) = RGB(195, 253, 47) ActiveWorkbook.Colors(46) = RGB(219, 253, 47) ActiveWorkbook.Colors(47) = RGB(243, 253, 47) ActiveWorkbook.Colors(48) = RGB(253, 243, 47) ActiveWorkbook.Colors(49) = RGB(253, 219, 47) ActiveWorkbook.Colors(50) = RGB(253, 194, 47) ActiveWorkbook.Colors(51) = RGB(253, 170, 47) ActiveWorkbook.Colors(52) = RGB(253, 145, 47) ActiveWorkbook.Colors(53) = RGB(253, 121, 47) ActiveWorkbook.Colors(54) = RGB(253, 96, 47) ActiveWorkbook.Colors(55) = RGB(253, 47, 47)
- keithin
- ベストアンサー率66% (5278/7941)
Excel2007以降では,条件付き書式の新しい機能で「カラースケール」を使い,添付図のような具合にただ操作するだけで塗り分けが出来ます。勿論色遣い等も自由に指定できます。 ぶっちゃけマクロで苦労するより,どこかで新型を利用してしまった方が手早く確実な結果を得られます。 2003までのエクセルしか利用できない時は,やはりマクロの出番になります。 マクロ自体はどうという事なくて,単純に個々の値をカテゴリーに割り振って該当するセルの色を塗っていくだけです。 問題はむしろマクロの技術的な部分ではなく,どの色に塗るのかの色遣いを準備するのが実にメンドクサイことにあります。 エクセルのセルの塗り色は実際とても沢山の色が出せますが,「1つのブックの中で使えるセルの塗り色」は(塗らないを含めて)58色しか使えません。 sub sample1() dim i for i=0 to 57 cells(i+1,"A")=i cells(i+1,"A").interior.colorindex = i next i end sub 標準では,このマクロで塗り分けた色の種類と番号から,希望のカテゴリー数の色を例えば5色とか10色選び出し,値のカテゴリーに応じてその色を上述マクロと同じ手順で塗り込んでいくように作成すれば,出来上がりです。 あるいはツールメニューのオプションの色で,カラーパレットに割り付ける色をご自分で変更して設計し,対応する番号によって塗り分けるような仕込みも出来ます。この場合,その発色(と番号の対応)は当該の設定を行ったブックでしか有効ではない点だけ注意が必要です。
お礼
早速のご回答ありがとうございます。 新しいExcelなら標準装備の機能でできるのですね。 残念ながら私が使っているExcelは古いので、マクロのお世話になることにします。 ありがとうございました。
お礼
具体的なコードを教えて頂きありがとうございます。 Excelのマクロは完全な素人なので、上手く行くか心配しましたが、無事目的が達成できました。 大変助かりました。ありがとうございます。