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

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

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

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

Q&A

解決済

1回答

2111閲覧

VBAで作成したグラフの上にテキストボックスをつけたい

Ame3939

総合スコア2

VBA

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

0グッド

0クリップ

投稿2023/10/31 14:24

実現したいこと

VBAにて、作成したグラフの上にテキストボックスを挿入したいです

前提

VBAにて、作成したグラフの上にテキストボックスを挿入したいです。
テキストボックス自体は挿入、貼り付けが出来るのですが、挿入した後、グラフ全体を動かすとテキストボックスとグラフが離れてしまいます。
また、VBAですが、マクロの記録にて作成したため、.selectなど直接グラフの操作部分も含まれています。

該当のソースコード

VBA

1   With Selection.Format.TextFrame2.TextRange.Characters(1, 5).Font 2 .BaselineOffset = 0 3 .Bold = msoFalse 4 .NameComplexScript = "+mn-cs" 5 .NameFarEast = "+mn-ea" 6 .Fill.Visible = msoTrue 7 .Fill.ForeColor.RGB = RGB(89, 89, 89) 8 .Fill.Transparency = 0 9 .Fill.Solid 10 .Size = 10 11 .Italic = msoFalse 12 .Kerning = 12 13 .Name = "+mn-lt" 14 .UnderlineStyle = msoNoUnderline 15 .Strike = msoNoStrike 16 End With 17 With Selection.Format.TextFrame2.TextRange.Characters(6, 4).Font 18 .BaselineOffset = 0 19 .Bold = msoFalse 20 .NameComplexScript = "+mn-cs" 21 .NameFarEast = "+mn-ea" 22 .Fill.Visible = msoTrue 23 .Fill.ForeColor.RGB = RGB(89, 89, 89) 24 .Fill.Transparency = 0 25 .Fill.Solid 26 .Size = 10 27 .Italic = msoFalse 28 .Kerning = 12 29 .Name = "+mn-lt" 30 .UnderlineStyle = msoNoUnderline 31 .Strike = msoNoStrike 32 End With 33 ActiveChart.ChartArea.Select 34 ActiveChart.Axes(xlCategory).MinorGridlines.Select 35 With Selection.Format.Line 36 .Visible = msoTrue 37 .Weight = 1 38 End With 39 With Selection.Format.Line 40 .Visible = msoTrue 41 .ForeColor.ObjectThemeColor = msoThemeColorBackground1 42 .ForeColor.TintAndShade = 0 43 .ForeColor.Brightness = 0 44 .Transparency = 0 45 End With 46 ActiveChart.Axes(xlValue).MajorGridlines.Select 47 With Selection.Format.Line 48 .Visible = msoTrue 49 .ForeColor.ObjectThemeColor = msoThemeColorBackground1 50 .ForeColor.TintAndShade = 0 51 .ForeColor.Brightness = 0 52 .Transparency = 0 53 End With 54 With Selection.Format.Line 55 .Visible = msoTrue 56 .Weight = 1 57 End With 58 ActiveChart.Axes(xlValue).Select 59 ActiveChart.Axes(xlValue).MinimumScale = -100 60 ActiveChart.Axes(xlValue).MaximumScale = 0 61 ActiveChart.FullSeriesCollection(1).Select 62 With Selection.Format.Line 63 .Visible = msoTrue 64 .ForeColor.RGB = RGB(255, 255, 0) 65 .Weight = 1 66 .Transparency = 0 67 End With 68 69'ここからテキストボックスの作成 70 ActiveChart.ChartArea.Select 71 72 Application.CommandBars("Format Object").Visible = False 73 74 ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 1350.6, 500.4, _ 75 103.2, 19.2).Select 76 With Selection.ShapeRange.Fill 77 .Visible = msoTrue 78 .ForeColor.ObjectThemeColor = msoThemeColorText1 79 .ForeColor.TintAndShade = 0 80 .ForeColor.Brightness = 0 81 .Transparency = 0 82 .Solid 83 End With 84 Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _ 85 "2023/10/31/15:21" 86 Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 16).ParagraphFormat. _ 87 FirstLineIndent = 0 88 With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 16).Font 89 .NameComplexScript = "+mn-cs" 90 .NameFarEast = "+mn-ea" 91 .Fill.Visible = msoTrue 92 .Fill.ForeColor.RGB = RGB(0, 112, 192) 93 .Fill.Transparency = 0 94 .Fill.Solid 95 .Size = 14 96 .Name = "+mn-lt" 97 End With 98 Selection.ShapeRange.ScaleWidth 1.1627906977, msoFalse, msoScaleFromBottomRight 99 Selection.ShapeRange.ScaleHeight 0.875, msoFalse, msoScaleFromTopLeft 100 Selection.ShapeRange.ScaleHeight 1.25, msoFalse, msoScaleFromTopLeft 101 102

試したこと

69行目辺りからテキストボックスの作成です。

テキストボックス挿入の前後のソースコードが関係するのではと思い、グラフのどこを選択してテキストボックスを作成しているか確認しましたが、調べたところ、「ActiveSheet.Shapes.AddTextbox」で出来るとありました。「ActiveSheet.Shapes.AddTextbox」でテキストボックスを作成しているのでグラフとくっつくと思ったのですが、上手くいきませんでした。
また、「ActiveSheet.Shapes.AddTextbox」の引数の値を変更してもテキストボックスの位置が変わるだけで、グラフ上には作成できませんでした。

間違っている箇所、アドバイスなど頂けたらありがたいです。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

作成したグラフの上にテキストボックスを挿入したい

  • ワークシート上に新規テキストボックスを作成し、そのワークシート上に既に作成されているグラフオブジェクトの前面に(重なるようにして)配置されるようにしたい。

  • ワークシート上に既に作成されているグラフオブジェクトの中に新規テキストボックスを埋め込みたい。

どちらの意味でおっしゃっているかによるでしょう。

前者であれば Worksheet オブジェクトの Shapes プロパティ、後者であれば Chart オブジェクトの Shapes プロパティによって参照される Shapes オブジェクト(コレクション)の AddShape メソッドAddTextbox メソッドを呼び出せばよいでしょう。

vba

1Sub Test1() 2 3 Dim wsTarget As Worksheet 4 Dim chtTarget As Chart 5 Dim shpNewTextbox As Shape 6 7 'このブックの1つめのワークシートを参照 8 Set wsTarget = ThisWorkbook.Worksheets(1) 9 10 '参照中のワークシート上にテキストボックスを作成して参照する 11 Set shpNewTextbox = wsTarget.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, 100, 20) 12 13 '参照中のテキストボックスの文字列範囲の設定 14 With shpNewTextbox.TextFrame2.TextRange 15 .Font.Size = 11 16 .Font.Name = "MS ゴシック" 17 .Font.Fill.ForeColor.RGB = vbBlue 18 .Text = "ABC" 19 End With 20 21 Set shpNewTextbox = Nothing 22 23 '参照中のワークシート上の1つめのグラフオブジェクトのグラフを参照する 24 Set chtTarget = wsTarget.ChartObjects(1).Chart 25 26 '参照中のグラフの中にテキストボックスを作成して参照する 27 Set shpNewTextbox = chtTarget.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, 120, 20) 28 29 '参照中のテキストボックスの文字列範囲の設定 30 With shpNewTextbox.TextFrame2.TextRange 31 .Font.Size = 9 32 .Font.Name = "メイリオ" 33 .Font.Fill.ForeColor.RGB = vbRed 34 .Text = Format(Now(), "yyyy/mm/dd hh:nn:ss") 35 End With 36 37 Set shpNewTextbox = Nothing 38 39 Set chtTarget = Nothing 40 Set wsTarget = Nothing 41 42End Sub

投稿2023/11/01 01:15

編集2023/11/01 01:16
sk.exe

総合スコア1070

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

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

Ame3939

2023/11/01 12:13

回答ありがとうございます。 無事解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問