[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『グラフの最右の値だけ表示』(夏の陣)
折れ線グラフの最新(最右)のデータラベルの値だけを、表示するマクロを作成しま したが、Points(19)の部分が変動するようにしないと、最新の値は表示しないように 思うのですが、如何でしょうか?
他にも 表示位置や、フォントも変更するようにしています。 ご指導よろしくお願いします。
Sub test() ActiveSheet.ChartObjects("グラフ 20").Activate ActiveChart.SeriesCollection(1).DataLabels.Delete ActiveChart.SeriesCollection(1).Points(19).ApplyDataLabels ActiveChart.SeriesCollection(1).Points(19).DataLabel.Position = xlLabelPositionAbove ActiveChart.SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange.Font.Size = 14
End sub
< 使用 Excel:Excel2007、使用 OS:Windows7 >
Sub test2()
With ActiveSheet.ChartObjects("グラフ 20").Chart.SeriesCollection(1) If .HasDataLabels Then .DataLabels.Delete With .Points(.Points.Count) .HasDataLabel = True .DataLabel.Position = xlLabelPositionAbove .DataLabel.Format.TextFrame2.TextRange.Font.Size = 14 End With End With
End Sub
(マナ) 2015/08/20(木) 22:56
マナさんありがとうございます。 回答いただいたコードを試してみました。 マクロはエラーも無く終了しますが、グラフは何も 変わりませんでした。なぜでしょうか?
(夏の陣) 2015/08/21(金) 06:19
Sub test3()
With ActiveSheet.ChartObjects("グラフ 20").Chart.SeriesCollection(1) .HasDataLabels = False With .Points(.Points.Count) DoEvents .HasDataLabel = True DoEvents .DataLabel.Position = xlLabelPositionAbove .DataLabel.Format.TextFrame2.TextRange.Font.Size = 14 End With End With
End Sub
(マナ) 2015/08/21(金) 20:12 修正21:14
マナさんありがとうございます。 再度やってみました。 一旦、各ポイントの値だけの表示がされ、そして削除されて、 その後、最新のデータも何も現れません。 (夏の陣) 2015/08/21(金) 22:20
Sub Test4()
With ActiveSheet.ChartObjects("グラフ 20").Chart.SeriesCollection(1) .HasDataLabels = False With .Points(.Points.Count) .HasDataLabel = True Application.Wait Now + TimeValue("0:00:01") .DataLabel.Position = xlLabelPositionAbove .DataLabel.Format.TextFrame2.TextRange.Font.Size = 14 End With End With
End Sub
(マナ) 2015/08/21(金) 22:51
マナさん結果同じでした。 もう一度よく考えてみます。 ありがとうございました。 (夏の陣) 2015/08/21(金) 23:33
Sub test5()
With ActiveSheet.ChartObjects("グラフ 20").Chart.SeriesCollection(1) .HasDataLabels = False With .Points(.Points.Count) .HasDataLabel = True .Select .DataLabel.Position = xlLabelPositionAbove .DataLabel.Format.TextFrame2.TextRange.Font.Size = 14 End With End With
End Sub
(マナ) 2015/08/22(土) 10:04
Sub test6()
With ActiveSheet.ChartObjects("グラフ 20").Chart.SeriesCollection(1) .HasDataLabels = False With .Points(.Points.Count) .HasDataLabel = True .DataLabel.Position = xlLabelPositionAbove .DataLabel.Font.Size = 14 End With End With
End Sub
(マナ) 2015/08/22(土) 10:21
マナさん、色々と考えていただき、ありがとうございます。 test4もtest5も、何も表示されませんでした。 (夏の陣) 2015/08/22(土) 19:07
Sub test7() Dim n As Long
ActiveSheet.ChartObjects("グラフ 20").Activate n = ActiveChart.SeriesCollection(1).Points.Count ActiveChart.SeriesCollection(1).DataLabels.Delete ActiveChart.SeriesCollection(1).Points(n).ApplyDataLabels ActiveChart.SeriesCollection(1).Points(n).DataLabel.Position = xlLabelPositionAbove ActiveChart.SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange.Font.Size = 14
End Sub
(マナ) 2015/08/22(土) 19:24
Sub test8() Dim n As Long
With ActiveSheet.ChartObjects("グラフ 20").Chart.SeriesCollection(1) n = .Points.Count .HasDataLabels = False .Points(n).ApplyDataLabels .Points(n).DataLabel.Position = xlLabelPositionAbove .DataLabels.Format.TextFrame2.TextRange.Font.Size = 14 End With
End Sub
Sub test9()
With ActiveSheet.ChartObjects("グラフ 20").Chart.SeriesCollection(1) .HasDataLabels = False With .Points(.Points.Count) .HasDataLabel = True .DataLabel.Position = xlLabelPositionAbove End With .DataLabels.Format.TextFrame2.TextRange.Font.Size = 14 End With
End Sub
Sub test10()
With ActiveSheet.ChartObjects("グラフ 20").Chart.SeriesCollection(1) .HasDataLabels = False With .Points(.Points.Count) .ApplyDataLabels .DataLabel.Position = xlLabelPositionAbove End With .DataLabels.Format.TextFrame2.TextRange.Font.Size = 14 End With
End Sub
(マナ) 2015/08/22(土) 20:00
マナさん、付き合っていただき、ありがとうございます。 test8.9.10同じ現象でした。
気になるのが二つあります。 ?@test7の変数nが、こちらでマクロを動かすとn=31になっています。 nはグラフのポイントだと思いますが。 ?Aマクロスタート以前のグラフの状態は、最新のデータが表示されており、 アクティブにはなっていません。 マナさんの設定とこのへんが食い違っているでしょうか?
(夏の陣) 2015/08/23(日) 08:02
1)test7でも、表示されなかったということですか 2)nはポイント数です。31個ではないということですか 3)対象のグラフ名は、グラフ 20で間違いありませんか 4)ステップ実行を試していただけますか
(マナ) 2015/08/23(日) 09:37
マナさん、ありがとうございます。
1)test7でも、表示されなかったということですか 表示されませんでした。
2)nはポイント数です。31個ではないということですか
nはどのようにして抽出してるんでしょうか? 横軸に日付けがあり、今日は22日だから、ポイント22に ならないといけないのではないでしょうか?
3)対象のグラフ名は、グラフ 20で間違いありませんか 20で間違いありませんでした。
4)ステップ実行を試していただけますか ステップ実行とは、どういう意味ですか? 勉強不足でわかりません。 ご教示お願いします。 (夏の陣) 2015/08/23(日) 12:43
グラフのデータ範囲は1ヶ月用に設定してあって、 日々データを入力していくと、グラフが伸びていくのですね。
Sub test11() Dim i As Long
With ActiveSheet.ChartObjects("グラフ 20").Chart.SeriesCollection(1) .HasDataLabels = False For i = .Points.Count To 1 Step -1 If Not IsEmpty(.Values()(i)) Then With .Points(i) .HasDataLabel = True .DataLabel.Position = xlLabelPositionAbove .DataLabel.Font.Size = 14 End With Exit For End If Next End With
End Sub
(マナ) 2015/08/23(日) 14:17
マナさん、ありがとうございます。 きちんとと思いどりおりに表示されました。 最初の説明が足らなかったです。すみませんでした。
申し訳ありませんが、もう一問お付き合いください。 提示したグラフ名は20のみですが、グラフが一つの シートにグラフ名が20から30まで続きであります。 回答頂いたものを列記したら良いかもしれませんが ループしたら良いと思うのですが、要領を得ません。 よろしく、おねがいします。
(夏の陣) 2015/08/23(日) 17:01
対象とするかどうかを名前で判断するなら、名前の付け方を工夫すればよいと思います。 他には、グラフのタイプやセル位置で判断することでもよいです。
Sub test12() Dim co As ChartObject Dim i As Long
For Each co In ActiveSheet.ChartObjects If co.Name Like "グラフ 2[0-9]" Or co.Name Like "グラフ 30" Then With co.Chart.SeriesCollection(1) .HasDataLabels = False For i = .Points.Count To 1 Step -1 If Not IsEmpty(.Values()(i)) Then With .Points(i) .HasDataLabel = True .DataLabel.Position = xlLabelPositionAbove .DataLabel.Font.Size = 14 End With Exit For End If Next End With End If Next
End Sub
(マナ) 2015/08/23(日) 19:29
マナさん、すべてのグラフ対象ということなら、グラフ名の確認は不要 ということですが、 回答いただいた、If co.Name Like "グラフ 2[0-9]" Or co.Name Like "グラフ 30" Then の部分、特にグラフ 2[0-9]がわかりません。 どこまでもお手数ですが教えてください。
(ジョン) 2015/08/23(日) 22:56
以下は、マクロを実行したくないグラフも同じシートにある場合の話です。 その場合は、グラフ名が○○ならば実行とか、××でないならば実行 とするなど、対象のグラフかどうか判断させる必要があるので その例が >If co.Name Like "グラフ 2[0-9]" Or co.Name Like "グラフ 30" Then です。 と書いていて気付きました。2個めのLikeは=でよかったです。 If co.Name Like "グラフ 2[0-9]" Or co.Name = "グラフ 30" Then で、質問のグラフ 2[0-9]ですが、 [0-9]は、0〜9の数字1文字という意味です。 なので、グラフ 20〜29になります。 グラフ 2# でもよいです。
ただ、グラフ ○とか、エクセルが勝手につけた名前をそのまま使わずに、 私ならば判断しやすい名前に変更します。 対象とするグラフの名前をすべて、例えば「夏の陣」としてみてください。 その場合のコードは、 If co.Name = "夏の陣" Then とすればよいので、簡単です。
(マナ) 2015/08/24(月) 19:31
マナさん、If co.Name Like "グラフ 2[0-9]" Or co.Name Like "グラフ 30" Thenの意味 よくわかりました。 仕事柄グラフをよく使うので、これから先、活用させていただきます。 最後まで、お付き合いいただき、ありがとうございました。
(夏の陣) 2015/08/24(月) 19:59
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.