[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ChartObjectsの並び替え』(ぷすぷす)
シート内の複数のグラフを指定したタイトル名順に横一列に並べたい。
例えば
グラフが3種類あってタイトル名がNo1,No2、No3とあるとして
左からNo2,No3,No1の順に横一列に並べるVBAを教えて欲しい。
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
(簡単に) 2023/03/07(火) 15:30:33
(老婆心) 2023/03/07(火) 15:39:20
例えばの話...
Sub Chart_List() Dim co As ChartObject, v(), i As Long ReDim v(0 To ActiveSheet.ChartObjects.Count, 1 To 2) v(0, 1) = "Name" v(0, 2) = "Title" For Each co In ActiveSheet.ChartObjects i = i + 1 v(i, 1) = co.Name v(i, 2) = co.Chart.ChartTitle.Text Next With [A20].Resize(i + 1, 2) '←場所適当です .Value = v .AutoFilter End With End Sub Rem ================================================================== Rem この間にAutoFilter.Rangeを希望の順に並べ替えておく Rem ================================================================== Sub Chart_Sort() Dim co As ChartObject, i As Long, xpos As Single With ActiveSheet.AutoFilter.Range For i = 2 To .Rows.Count Set co = ActiveSheet.ChartObjects(.Cells(i, 1).Value) co.Top = 0 co.Left = xpos xpos = xpos + co.Width Next End With End Sub
(白茶) 2023/03/07(火) 16:17:13
A20(B20)から下方に名前とタイトルがソートされて表示されます。
>Rem この間にAutoFilter.Rangeを希望の順に並べ替えておく
思うに、昇順と降順に並び替えできますが
No1,No2、No3とあるとしてNo2,No3,No1の順のようにはどうやったら並び替えられるのですか?
話が見えていないので間違っているならアドバイスお願いします。
(ぷすぷす) 2023/03/07(火) 17:32:36
あー・・・いやいや
>No2,No3,No1の順 がどういった順番なのか分かんないから、自分で順番決めちゃってね。って事です。
並び順の法則がどっかにあるなら、その情報をくっ付けてソートすればよし。 無いなら自分で連番等の情報を書き加えてからソートしてもよし。 (ていう意味では、もう1列用意しとくべきですかね)
最終的には「希望の順に並んだ[Name]列」が欲しいだけです。
(白茶) 2023/03/07(火) 18:25:11
No1,No2,No3は、タイトル名を簡易に命名しただけで
タイトル_1,タイトル_5,タイトル_10でも良い名前です。
これをタイトル_5、タイトル_10、タイトル_1などのように
希望の任意の順番に並べたく名前自体には規則性や法則はありません。
順番と言う言葉がソートを想定される言葉なのが
悪かったようで任意にと言った方が正確です。
「もう1列用意しとくべきですかね」
ですが、ここに「希望の順に並んだ[Name]列」を記載すると言う意味でしょうか?
ChartTitle.Textでタイトルを抜き出してコピペして
「希望の順に並んだ[Name]列」を作成すると言う手段も思いつきましたが
達人さんならもっと他の方法を御存知ではないかと相談しました。
(ぷすぷす) 2023/03/07(火) 19:10:01
> 「もう1列用意しとくべきですかね」 > ですが、ここに「希望の順に並んだ[Name]列」を記載すると言う意味でしょうか?
「並び順」そのものを書き込む為の列を... ってつもりだったんですけどね。
Sub Chart_List() Dim co As ChartObject, v(), i As Long ReDim v(0 To ActiveSheet.ChartObjects.Count, 1 To 3) v(0, 1) = "Name" v(0, 2) = "Title" v(0, 3) = "Sort" '←もう1列用意しとくの部分 For Each co In ActiveSheet.ChartObjects i = i + 1 v(i, 1) = co.Name v(i, 2) = co.Chart.ChartTitle.Text Next With [A20].Resize(i + 1, 3) '← .Value = v .AutoFilter End With End Sub
の実行結果が仮に↓こうだった場合、
__|___A____|_____B_____|___C____ 20|Name |Title |Sort 21|Chart 1 |タイトル_1 | 22|Chart 2 |タイトル_5 | 23|Chart 3 |タイトル_10|
__|___A____|_____B_____|___C____ 20|Name |Title |Sort 21|Chart 1 |タイトル_1 | 2 22|Chart 2 |タイトル_5 | 1 ← B列の情報から「任意の並び順」を判断出来る「人」が判断すれば 23|Chart 3 |タイトル_10| 3 C列に順番を付ける事ができるので、
__|___A____|_____B_____|___C____ 20|Name |Title |Sort ← 付番後にC列で表全体をソートすれば 21|Chart 2 |タイトル_5 | 1 22|Chart 1 |タイトル_1 | 2 23|Chart 3 |タイトル_10| 3 ↑ ココの情報を使ってChart_Sortが実行出来る。という事です。
付番する作業に際しては何度かに分けてちょっとずつソート結果を確認しながら進める事も出来ますし、 この部分の作業だけ他人に外注するなり、関数等で別表から並び順を取得するなり、 「任意」である以上、もうその辺はお好きにどうぞ。って感じです。(達人さんか否かは関係ありません)
(白茶) 2023/03/07(火) 20:01:34
もう1列用意して並び順を任意に指定しこれを利用してNAMEをソートするのですね。
私に取っては目からウロコの手法です。
(コピペする手間を考えると雲泥の差です。)
このような手法を知っていると賢者さんの引き出しの多さですね。
他でも応用が効くので活用させていただきます。
お世話になり感謝いたします。
(ぷすぷす) 2023/03/08(水) 08:09:07
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.