質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

1383閲覧

風向を色で表したいです

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/03/01 08:42

編集2018/03/01 09:19

時間ごとに風向、風速のデータがそれぞれあり、エクセルで以下のようなグラフを作りたいです。
http://ariake-yatsushiro.jp/bui/NO3/data/no3_wind100.jpg

方角を360度表記にして、その値によってセルの色を変化させ、その色を取得してプロットの色を設定するように考えました。ただ0度から359度にかけて、色のグラデーションのかけ方がわかりません。

どなたかご教授願います。よろしくお願い致します。
Excel2016 Windows8.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/01 08:47

Excel?のバージョン情報、OSのバージョン情報など。
ttyp03

2018/03/01 08:49

そもそもこの風向きのグラフ(?)は実現できているのでしょうか?
KSwordOfHaste

2018/03/01 08:52 編集

グラデーションとは「色が滑らかに変化していく様」のことだと思うのですが、課題はグラフの色を「風向きが変化する様子を補完し滑らかに色を変化させる」ことなのでしょうか?それとも特定の「向き」を特定の色へ変換する方法でしょうか?
退会済みユーザー

退会済みユーザー

2018/03/01 08:51

失礼しました。Excel2016 Windows8.1です
退会済みユーザー

退会済みユーザー

2018/03/01 08:57

特定の風向きを色へと変換したいと考えています。
guest

回答2

0

ベストアンサー

折れ線グラフだとすると同じ系列の色を区間ごとに変えるのはウィザードではできないようですがVBAでならできるんでしょうか・・・そのあたりのグラフの描画については自分にはノウハウがないので他の方へお譲りしたいと思います。

方向による色の計算のみコメントしてみます。

リンク先の色の付け方を再現すると仮定し、その色が方向によりどういうRGB成分になっているか調べると以下のように見えました。

R成分: 南西で最大、北東で最小
G成分: 南東で最大、北西で最小
B成分: 0

そこで風向きを北を0度として時計回りの角度(単位degree)で表現した場合、次のような計算式でRGB値(ここではVBAのRGB関数で求まるLong値)が計算できそうです。

text

1Const PI As Single = 3.14159 2 3Sub ColorTest() 4 Dim deg As Integer 5 Dim cx, cy, radius, c, s, x, y As Single 6 Dim rad As Single 7 cx = 200: cy = 200: radius = 100 8 For deg = 0 To 360 Step 5 9 rad = PI * deg / 180 10 c = CSng(Cos(rad)) 11 s = CSng(Sin(rad)) 12 x = cx + radius * s 13 y = cy - radius * c 14 ActiveSheet.Shapes.AddLine(cx, cy, x, y).Select 15 With Selection.ShapeRange.Line 16 .Weight = 2.5 17 .ForeColor.RGB = DirColor(deg) 18 End With 19 Next 20End Sub 21 22 23Function DirColor(ByVal dir As Single) As Long 24 Dim r, g As Integer 25 r = ColorComponentOfDirection(dir, 225#) 26 g = ColorComponentOfDirection(dir, 135#) 27 DirColor = RGB(r, g, 0) 28End Function 29 30Function ColorComponentOfDirection(dir As Single, baseDir As Single) As Integer 31 Dim diff As Single 32 diff = Abs(dir - baseDir) Mod 360 33 If diff > 180 Then diff = 360 - diff 34 ColorComponentOfDirection = Int((180 - diff) / 180 * 255) 35End Function

イメージ説明

グラフの書き方がわからなかったため、上の例ではシート上に色付きのシェイプ(線分)を生成するようなものになっています。問題の色はDirColor関数で計算しています。引数は角度(0~360)です。

投稿2018/03/01 10:54

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2018/03/01 11:31

ちなみにリンク先の配色はポピュラーなものなんでしょうか?自分なら北風は青っぽく、南風は赤っぽくするイメージを持ちますが・・・東と西がこまっちゃいますね。
退会済みユーザー

退会済みユーザー

2018/03/01 13:25

返信遅くなりまして申し訳ありません。 とても勉強になります。ありがとうございます。 系列ではなくデータ要素(データポイント)ごとに、お教え頂いた関数を適用すれば求めるグラフが描画できそうです。 教えていただいて、自分ではたどり着けそうになかったので本当に勉強になりました。 配色に関しては、特にポピュラーというものではないと思います。 西風が重要な意味を持つとき、この場合赤なので、グラフにしたとき目立ってパラメーターとして見やすいということになります。 このたびは重ねて感謝申し上げます。早速試してみたいと思います。
KSwordOfHaste

2018/03/01 13:27

> 西風が重要な意味を持つ なるほど納得しました。
退会済みユーザー

退会済みユーザー

2018/03/02 00:36

今回教えていただいた関数の中で真西の風の色を赤色になるようにするにはどう関数を変更したら良いでしょうか? 合わせてご教授頂きたいです。よろしくお願いいたします。
KSwordOfHaste

2018/03/02 00:51

この配色法はR,G成分のみ用いて360度方向のいかなる方向も「同じ色にはならない」という工夫が行われています。「真西の風の色を赤色」の「赤色」の意味が「R=255,G=0,B=0」という意味なら「そのようにはできない配色法」ということになります。 一方「一番赤っぽい部分が北西なので今の配色を反時計回りに45度ずらしたい」ということでしたらDirColor関数の中を次のようにして基準角度を45度ずらせば達成できます。 r = ColorComponentOfDirection(dir, 180#) g = ColorComponentOfDirection(dir, 90#)
退会済みユーザー

退会済みユーザー

2018/03/02 01:15

そうなんですね...わかりました。 例えば真西の色を「R=255,G=0,B=0」、真南の色を「R=255,G=255,B=0」、 真東の色を「R=0,G=255,B=0」、真北の色を「R=0,G=0,B=255」となるようにグラデーションをかけるのは難しいものなんでしょうか? 少し考えてみます。
KSwordOfHaste

2018/03/02 01:39 編集

> 難しいものなんでしょうか? 難しくはありません。西を赤、南を黄色にしたい場合それに挟まれた区間を赤から黄色にゆるやかに補間すればよいです。自分の回答にある処理とは少し異なったものになりますが考え方は同様です。一般化すると「角度がR0->R1の区間で、R,G,B各値をそれぞれR0->R1, G0->G1, B0->B1へ滑らかに補完する」と考えます。角度の区間は「その区間内では同じ変化の仕方になるよう」に選びます。西をRGB(255,0,0),南をRGB(255,255,0)にするなら西から南にかけた区間ではR=255,B=0,G=0~255に角度によって滑らかに変化させると考えればよいです。
退会済みユーザー

退会済みユーザー

2018/03/02 01:49

なるほどです。ありがとうございます。 西から南、南から東、東から北、北から西の区間に条件分けして、それぞれR、G、B値を変化させる関数を設ければよいということですね。 挑戦してみます。
guest

0

色の決定方法は普通に計算でできますが、Excelグラフで表現できるかは、わかりません。

http://www.sofgate.com/design/ct_gradation.html

NEWSの、それぞれに対して色を決めてあとは、等比計算で中間色を決めればよいかと思います。

系列ごとに違う線を引くっていう擬似的なものは、できますが・・・・
(Excel2016の系列の最大=255なので、データ量も255まで)

イメージ説明

投稿2018/03/01 09:51

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/01 13:30

返信遅くなりまして申し訳ありません。 こういう方法もあるのですね。勉強になります。 ありがとうございます。 リンク先も参考にさせていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問