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

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

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

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

Q&A

解決済

3回答

9935閲覧

VBAでグラフの凡例を任意の場所に設定する方法xlLegendPositionCustomの使い方を教えてください。

King_of_Flies

総合スコア382

VBA

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

0グッド

0クリップ

投稿2017/10/05 04:16

編集2017/10/05 05:25

お疲れ様です。
Takkoです。

下記サイトに書かれているような、

https://msdn.microsoft.com/ja-jp/library/office/ff196251.aspx

xlLegendで指定できるポジションの位置なのですが、
なぜxlLegendPositionCorner という右上隅のオプションがあるのにもかかわらず、
左上のオプションがないのでしょう。

また下記サイトを参考にして任意の場所に凡例を追加したい場合、
実装するとなるとこうなるのでしょうか?

http://excel.style-mods.net/tips_vba/tips_vba_6_08.htm

' グラフの凡例の位置を設定
ActiveSheet.ChartObjects(1).Chart.Legend.Position = xlLegendPositionCustom

任意の場所という割には、ポジションを入力する場所がないと思うのですが、
どう指定すればよいのでしょうか。

よろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

凡例の場所指定について、Chart.Legend.PositionxlLegendPositionCustomを設定することはできません。
凡例のオフセットをChart.Legend.LeftおよびChart.Legend.Topによって指定すると、
Chart.Legend.Positionの値がxlLegendPositionCustomとなります。

要は、Chart.Legend.Positionと(Chart.Legend.LeftおよびChart.Legend.Top)が排他の関係にあるということです。

投稿2017/10/05 05:39

編集2017/10/05 06:07
sazi

総合スコア25206

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

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

King_of_Flies

2017/10/05 05:42

なるほど 理解しました。 つまりはカスタムして任意の場所に凡例の位置を指定すると自動でxlLegendPositionCustomになるだけで、 ユーザがxlLegendPositionCustomを使用して、任意の箇所に設定するわけではないのですね。 なんかこいつだけ使うためのオプションではなく、 勝手に設定されるオプションていうような感じですね。
sazi

2017/10/05 06:17 編集

補足すると、Chart.Legend.Positionを設定しても、.Leftや.Topの値はクリアされません。 .Leftや.Topの値が有効なものかどうかの判定などを行う場合の考慮だと思われます。
King_of_Flies

2017/10/05 05:46

つまり、kikukikuさんの提示してくださったスタックオーバーフローの回答者の使い方で正しいということですよね?
sazi

2017/10/05 05:47

任意の場所に設定するという場合はそれしかないですね。
King_of_Flies

2017/10/05 06:00 編集

ありがとうございました。 またわからないことがありましたらよろしくお願いします。
guest

0

Excel2013 を使っています

xlLegendで指定できるポジションの位置なのですが、

なぜxlLegendPositionCorner という右上隅のオプションがあるのにもかかわらず、
左上のオプションがないのでしょう

エクセルの仕様ですね

実際にグラフのデザインオプションを確認してみると、凡例に対する位置の指定は上下左右+右上の5つしか選択がありません

任意の場所に凡例を追加したい場合

ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SetElement (msoElementLegendRight) '右に出す

任意の場所という割には、ポジションを入力する場所がないと思うのですが、

どう指定すればよいのでしょうか。

ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.Legend.Select Selection.Left = 50 Selection.Top = 100

これらはネットで調べたわけでなく、「マクロ記録」を使って実際に凡例についての操作を行って吐き出されたコードです

VBAの場合「マクロではどうすればよいのだろう」と思った時、「マクロ記録」を使ってみるのも案外解決が早いものです
是非お試しください

投稿2017/10/05 05:13

takito

総合スコア3111

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

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

King_of_Flies

2017/10/05 05:17

問題解決ありがとうございます。 マクロの記録で実行できたので、質問自体の解決は致しました。 ただ、リファレンスのxlLegendPositionCustom ←こいつの使用例が見つけられず、 とても気になっています。
guest

0

検証していないので動作するかわかりませんが、
下記記事を見つけました。
https://stackoverflow.com/questions/18495821/using-excel-xllegendposition-xllegendpositioncustom-in-c-sharp

投稿2017/10/05 04:57

kikukiku

総合スコア514

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

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

King_of_Flies

2017/10/05 05:10

サイトを見る限りだと、xlLegendPositionCustom の使用方法がわからなかったので、 chart.Legend.Left = 375; chart.Legend.Top = 450;のようにして、 任意の場所に凡例の位置を強制するような作りになっているみたいですねw xlLegendPositionCustom ←こいつどうやって使うんだ・・・w
kikukiku

2017/10/05 05:20

xlLegendPositionCustomに設定した上で、LeftとTopを設定する使い方と思ったのですが、動作しないのかな?
King_of_Flies

2017/10/05 05:23

いえ。 翻訳すると先ほどのサイトで回答を提示しているひとの言っている内容は下記に要約されます。 凡例を任意の場所に設定するために使用する、xlLegendPositionCustomの使い方はわかりませんでしたが、chart.Legend.Left = 375; chart.Legend.Top = 450;このようにすると、凡例の位置を強制的に設定できますよ。と。 結果的に確かに、私の質問事項である凡例の設定はクリアできたのですが、 結局のところxlLegendPositionCustom ←これはどう使うの?っていうのがサイトではわかりません。
kikukiku

2017/10/05 05:34

なるほど。不明ですね。
King_of_Flies

2017/10/05 05:44

どうやら、最新の回答が答えに行き着いているみたいです。 chart.Legend.Left = 375; chart.Legend.Top = 450;をすると勝手にxlLegendPositionCustom が設定されるようです。 知らずに使っていました的なオチですね。w
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問