[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『折れ線グラフの色をマクロで設定する』(しのみや)
折れ線グラフを作成し、系列1と系列2の書式設定を設定するマクロの記録を取りました。
凡例で表すと 系列1は -■- (赤) 系列2は -×- (青) このような感じです。
【記述】 ’系列1 Sub Macro1()
With Selection .MarkerStyle = 2 .MarkerSize = 7 End With Selection.MarkerStyle = 1 With Selection.Format.Fill .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Solid End With With Selection.Format.Fill .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Transparency = 0 .Solid End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Transparency = 0 End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Transparency = 0 End With End Sub
'系列2 Sub Macro2()
With Selection .MarkerStyle = 1 .MarkerSize = 7 End With
Selection.MarkerStyle = -4168 Selection.Format.Fill.Visible = msoFalse With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(0, 112, 192) .Transparency = 0 End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(0, 112, 192) End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(0, 112, 192) .Transparency = 0 End With End Sub
系列1を選択し、Macro2を動かした後 Macro1を動かすと マーカーの塗りつぶしがなしになって -□-このようになります。
ひとつ前の設定が残っている状態のような気がするのですが、 検証してもしっかりとつかめなくてハテナです…
どのようにしたらよいでしょうか
< 使用 Excel:Excel2010、使用 OS:Windows10 >
ホントだー。言う事きいてくんないですね。
なんかそもそも[マクロの記録]で生成されたコード自体 「ウソを吐き出している」 とまでは言わないですけど「怪しい」感じがします。 2010特有の現象なのかな? (私も2010ユーザーなので他のバージョンがわからない)
Point単位で個別に設定してもClearFormatsしても 一旦MarkerStyleをxlMarkerStyleAutomaticにしても出てこないです。
塗りつぶし部分をMarkerBackgroundColorとMarkerForegroundColorで操作すれば 近い感じにはなりましたけど、多分正解じゃないですね。
Sub Test1() If TypeName(Selection) <> "Series" Then Exit Sub With Selection .MarkerStyle = xlMarkerStyleSquare .MarkerSize = 7 .Format.Line.ForeColor.RGB = &HFF& .MarkerBackgroundColor = &HFF& .MarkerForegroundColor = &HFF& End With End Sub
Sub Test2() If TypeName(Selection) <> "Series" Then Exit Sub With Selection .MarkerStyle = xlMarkerStyleX .MarkerSize = 7 .Format.Line.ForeColor.RGB = &HC07000 .MarkerBackgroundColorIndex = xlColorIndexNone .MarkerForegroundColor = &HC07000 End With End Sub
(白茶) 2020/12/23(水) 14:35
マクロの記録を頼りにしてましたので… どんくさいもので検証にン時間溶かしました。
いただいた記述で必要な結果が得られました。 しかも見やすくなって助かります。 (しのみや) 2020/12/23(水) 15:50
頂いた記述をもとに、以下のような記述にしました。
Dim StrRGB As String SrRGB = RGB(0, 112, 192)
Select Case Selection.MarkerStyle
Case 2, 1, 3, 8, '◆・■・▲・● With Selection .Format.Line.ForeColor.RGB = StrRGB .MarkerBackgroundColor = StrRGB .MarkerForegroundColor = StrRGB End With
Case -4168, 5, 9, -4118 '×・*・+・− With Selection .Format.Line.ForeColor.RGB = StrRGB .MarkerBackgroundColorIndex = xlColorIndexNone .MarkerForegroundColor = StrRGB End With
Case -4142 'なし With Selection .Format.Line.ForeColor.RGB = StrRGB End With
Case -4105 '自動マーカー
End Select
ここでCase -4105の自動マーカーの場合、 もとのMarkerStyleのまま色を変えるという動きにしたいのです。 しかしもとのMarkerStyleというものが、取ってこれない状態です。 取ってくる方法はありますか? (しのみや) 2020/12/25(金) 11:52
MarkerStyleがxlMarkerStyleAutomaticの時、実際どんな形のマーカーが適用されているのか知りたい と言う事ですよね?
それに寄って、 MarkerForegroundColor(輪郭色)だけ変えれば良いのか、 MarkerBackgroundColor(ベタ色)も変えないといけないのかが判断出来ない。と。
すみませんが私は直接取得する方法は存じません。 (法が有るのか無いのか知りません って意味ですよ)
実際方法が無かったとして、 それでも、たぶん適用される順番は決まってるんでしょうから、 その系列がSeriesCollectionの何番目の系列なのかを数えて判断すれば、 何とかなりそうな気もしますね...
(白茶) 2020/12/25(金) 12:32
ご丁寧にありがとうございます。 感謝です。 (しのみや) 2020/12/25(金) 15:16
「何とかなりそうな」ついでに何とかしてくれそうな関数書いてみました。
Rem 選択中の系列の系列番号を取得する関数 Function SelSeriesId() As Long If TypeName(Selection) <> "Series" Then Exit Function Dim s As Series, i As Long For Each s In Selection.Parent.SeriesCollection i = i + 1 If Selection.Name = s.Name Then Exit For Next SelSeriesId = i End Function
Rem 系列番号に対応する既定マーカースタイルを返す関数(ウチの2010はこの順番だった) Function GetDefaultMarkerStyle(SeriesId As Long) As XlMarkerStyle Select Case (SeriesId - 1) Mod 9 + 1 Case 1: GetDefaultMarkerStyle = xlMarkerStyleDiamond Case 2: GetDefaultMarkerStyle = xlMarkerStyleSquare Case 3: GetDefaultMarkerStyle = xlMarkerStyleTriangle Case 4: GetDefaultMarkerStyle = xlMarkerStyleX Case 5: GetDefaultMarkerStyle = xlMarkerStyleStar Case 6: GetDefaultMarkerStyle = xlMarkerStyleCircle Case 7: GetDefaultMarkerStyle = xlMarkerStylePlus Case 8: GetDefaultMarkerStyle = xlMarkerStyleDot Case 9: GetDefaultMarkerStyle = xlMarkerStyleDash End Select End Function
(白茶) 2020/12/25(金) 15:59
>もとのMarkerStyleのまま色を変えるという動きにしたいのです。 >しかしもとのMarkerStyleというものが、取ってこれない状態です。 >取ってくる方法はありますか?
とる必要があるのかな?
Sub test2()
Dim p As Point
On Error Resume Next Set p = Selection On Error GoTo 0 If p Is Nothing Then Exit Sub
With p .MarkerBackgroundColor = vbBlue .MarkerForegroundColor = vbBlue .Format.Line.ForeColor.RGB = vbBlue
If .MarkerStyle <> xlMarkerStyleAutomatic Then .MarkerStyle = IIf(.MarkerStyle = 1, 2, 1) End If End With End Sub
コピペじゃなく手入力してみてください。
(まっつわん) 2020/12/25(金) 17:27
ありがとうございます。
頂いた記述を理解していたところ、 Selection.PlotOrderというものに気が付いたので、 そちらで系列番号をとってきて振り分ける方法を試しています。 まだ検証中ではありますが、ひとまずこちらで問題なさそう…
Case -4105 '自動マーカー
Select Case (Selection.PlotOrder - 1) Mod 9 + 1
Case 1, 2, 3, 6, 8, 9, 10 '◆・■・▲・●・-
Case 4, 5, 7 '×・*・+・− End Select
(しのみや) 2020/12/28(月) 14:47
With ActiveSheet.Shapes("グラフ 1") For j = 1 To .Chart.FullSeriesCollection.Count With .Chart.FullSeriesCollection(j) Debug.Print .MarkerStyle, .MarkerSize Debug.Print .MarkerForegroundColor, .MarkerBackgroundColor With .Format.Line Debug.Print .ForeColor, .Transparency End With End With Next End With (ふむ〜) 2020/12/28(月) 17:43
ふむ〜さんありがとうございます
頂いた記述をModule1に貼り付けて動かしてみると
For j = 1 To .Chart.FullSeriesCollection.Count ここのところで、 実行時エラー438 オブジェクトはこのプロパティまたはメソッドをサポートしていません。 となりました。
なにか私のやりかたが悪いのでしょうか… (しのみや) 2020/12/29(火) 16:51
Sub marker() Dim j As Integer Dim c As Object, a As Object With ActiveSheet.Shapes("グラフ 1") Set a = .Chart Debug.Print "ChartType"; .Chart.ChartType 'For Each c In .Chart.FullSeriesCollection For Each c In .Chart.SeriesCollection With c Select Case .ChartType Case xl3DLine '3D折れ線 ' 無効 .MarkerStyle .MarkerSize Debug.Print .Name With .Fill Debug.Print "Fill "; .Type, .ForeColor.RGB, .BackColor.RGB End With With .LeaderLines 'Debug.Print "LeaderLines" 'With .Bordor ' Debug.Print " Border "; .LineStyle, .Color, .Weight 'End With With .Format.Line Debug.Print " ForeColor "; .ForeColor.RGB, .ForeColor.Brightness Debug.Print " BackColor "; .BackColor.RGB End With End With Case Else '他の折れ線グラフ Debug.Print "マーカー"; .MarkerStyle, .MarkerSize Debug.Print "マーカー色"; .MarkerForegroundColor, .MarkerBackgroundColor With .Format.Line Debug.Print "ライン"; .ForeColor, .Transparency End With End Select End With Next End With End Sub (ふむ〜) 2020/12/30(水) 20:16
白茶さん ありがとうございます 系列で判断する方法を教えて頂き、規則があることも教えて頂き助かりました。 私では気が付かなくてあきらめていたと思います…
まっつあんさん ありがとうございます グラフの要素をクリックしてから、ステップインで動かしておりまして
選択されているグラフ要素の塗りつぶしを青色にする 選択されているグラフ要素の枠を青色にする 選択されているラインを青色にする
自動マーカーでない場合 マーカースタイルが1であれば、マーカースタイルを2に それ以外は1にする
といった動きだと理解しました…
自動マーカーの場合で、*と×と-の場合塗りつぶされてしまうので、 対処したいという状態でした。
ふむ〜さん ありがとうございます 自動マーカーどうこう関係なしに、グラフのタイプと塗りつぶしの色・枠線・マーカーの色といった 状態を取ってこれるのでしょうか…
系列8までのデータでマーカー付き折れ線でグラフ1を作って、 この記述を動かすとイミディエイトウィンドウに ChartType 65 マーカー -4105 7 マーカー色-1 -1 ライン16777215 -2.147484E+09 こちらが8回繰り返し表示されています。
手動で設定したグラフの系列は正しく入ってきているようです。
すみません。 自動マーカーは手動マーカーと同じようには 取ってこれないのではないかと思っているのです。 私の検証も慣れてなくてアタフタしておりまして、あまり自信がないのですが…
ひとまずなんですが…2020/12/28(月) 14:47のSelection.PlotOrderというので問題なさそうでした。 (しのみや) 2021/01/04(月) 16:51
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.