[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『凡例の表示』(てんぶ)
シートにあるすべてグラフにおいて、凡例を昇順に表示するマクロを実行したいです。
よろしくお願いします。
< 使用 Excel:unknown、使用 OS:unknown >
こういうことでしょうか。
Sub test() Dim sortedlist As Object Dim chartobj As ChartObject Dim serCol As SeriesCollection Dim ser As Series Dim k As Long Dim s As String
Set sortedlist = CreateObject("System.Collections.SortedList")
For Each chartobj In ActiveSheet.ChartObjects Set serCol = chartobj.Chart.SeriesCollection
'系列の名前をsortedlistに昇順に持つ sortedlist.Clear For Each ser In serCol sortedlist.Add ser.Name, "" Next
'PlotOrderを上記の順序に設定する For k = 0 To sortedlist.count - 1 s = sortedlist.getkey(k) serCol.Item(s).PlotOrder = k + 1 Next Next End Sub
なお、系列の表示を変えずに凡例だけ順序を変えることはできないように思います。 (γ) 2020/05/21(木) 21:26
sortedlist.Add ser.Name, ""
の部分で「項目は既に追加されています。」とエラー表示が出てきます・・・。
これはどのように対処したらよろしいのでしょうか...?
(てんぶ) 2020/05/22(金) 09:45
系列名が同一というのは想定しにくいですが、 If Not sortedlist.ContainsKey(ser.Name) Then sortedlist.Add ser.Name, "" End If とでもしてみてください。 (γ) 2020/05/22(金) 10:04
Sub test() Dim aryl As Object Dim cho As ChartObject Dim sers As SeriesCollection Dim n As Long Dim k As Long
Set aryl = CreateObject("system.collections.arraylist")
For Each cho In ActiveSheet.ChartObjects Set sers = cho.Chart.SeriesCollection n = sers.Count If n > 1 Then For k = 1 To n aryl.Add sers(k).Name Next aryl.Sort For k = 1 To n sers(aryl(k - 1)).PlotOrder = n Next aryl.Clear End If Next
End Sub
並び順が希望通りかどうかはわかりません。
(マナ) 2020/05/22(金) 20:24
例えば、1月〜12月みたいなのは、11月が先頭になります。
(マナ) 2020/05/22(金) 20:32
マナさんのコードでは
sers(aryl(k - 1)).PlotOrder = nでコードが無効と表示されてしまいます。
何度もお手数おかけして恐縮ですが、どのようなエラーが生じてしまっているのかよろしくお願いしますm(__)m
(てんぶ) 2020/05/26(火) 10:21
それを提示できませんか
(マナ) 2020/05/26(火) 11:24
Dim ch As ChartObject Dim ser As Series
For Each ch In ActiveSheet.ChartObjects For Each ser In ch.Chart.FullSeriesCollection ser.IsFiltered = ser.Name = "" Next Next End Sub
こちらになります。
(てんぶ) 2020/05/26(火) 11:33
Sub test2() Dim aryl As Object Dim cho As ChartObject Dim sers As FullSeriesCollection Dim n As Long Dim k As Long
Set aryl = CreateObject("system.collections.arraylist")
For Each cho In ActiveSheet.ChartObjects Set sers = cho.Chart.FullSeriesCollection n = sers.Count
If n > 1 Then For k = 1 To n If Not sers(k).IsFiltered Then aryl.Add sers(k).Name End If Next n = aryl.Count If n > 1 Then aryl.Sort For k = 1 To n sers(aryl(k - 1)).PlotOrder = n Next End If aryl.Clear End If Next
End Sub
(マナ) 2020/05/26(火) 11:53
sers(aryl(k - 1)).PlotOrder = n やはりこの部分でパラメータが無効ですと表示されてしまいます... (てんぶ) 2020/05/26(火) 14:07
(マナ) 2020/05/26(火) 18:21
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.