プロが教えるわが家の防犯対策術!

こんにちは。
Excel2013で、複数のシートがある中で、その内のいくつかをダイレクトに指定して、内容が同じ処理を行いたいと思っています。
下記のコードで一応処理はできますが、同じ内容がかなりダブってしまうので、何とかまとめたいと考えています。
どのようにすれば、まとめることができるのでしょうか?
下のコードは、"Sheet1"と"Sheet3"にあるグラフのタイトルに”TEST”と入力するものです。
また、もし"Sheet1"と"Sheet3"に別のタイトルをつける場合も、共通の所はまとめることができるでしょうか?

Dim chartobj As ChartObject

Set chartobj = ActiveWorkbook.Sheets("Sheet1").ChartObjects(1)
With chartobj .Chart
.HasTitle = True
.ChartTitle.Text = "TEST"
End With

Set chartobj = ActiveWorkbook.Sheets("Sheet3").ChartObjects(1)
With chartobj .Chart
.HasTitle = True
.ChartTitle.Text = "TEST"
End With

宜しくお願いします。

質問者からの補足コメント

  • 市役所でのパソコン相談では無理だと思われます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/09/17 16:11

A 回答 (3件)

1例ですが、1つのプロシージャ(今回はSetTitleとしました)を作成し、それを呼び出す方法があります。


第1パラメータに、シート名
第2パラメータに、タイトル
を指定します。

'本体側
Public Sub test()
Call SetTitle("Sheet1", "TEST1")
Call SetTitle("Sheet3", "TEST3")
End Sub

'作成したプロシージャ側
Private Sub SetTitle(ByVal sheet_name As String, ByVal title As String)
Dim chartobj As ChartObject

Set chartobj = ActiveWorkbook.Sheets(sheet_name).ChartObjects(1)
With chartobj.Chart
.HasTitle = True
.ChartTitle.Text = title
End With

End Sub
    • good
    • 0
この回答へのお礼

試してみました。
動作には、問題ありません。
少しは、すっきり分かりやすくなったように思います。

どうもありがとうございました。

お礼日時:2018/09/17 19:55

ご質問者の狙いである以下の2点を考慮してVBAを作成してみました。


1.シートをダイレクトに指定する
2.シートごとのグラフに異なるタイトルをつける可能性がある

シート番号をInputBoxで入力させてシートをダイレクトに指定するとともに、そのシートのグラフのタイトル名も入力で指定する方法をとっています。
ただし、以下の点は手抜きです。
1.シート番号は数字ですが、「文字型」変数を宣言してInputBoxで入力させている。
2.数字以外のものが入力された場合、総シート数を超えた数値を入力した場合のエラーチェックがない。
3.入力完了の判別はシート番号を入力しなかったことをもって判別している。
4.入力後の入力者による正誤判定および入力ミスの訂正方法が用意されていない。

Public Sub main()
Dim i As Integer
Dim sheet_name As String
Dim sheet_number As String
Dim chart_title As String

Do
sheet_number = InputBox("シート番号を入力")
If sheet_number = "" Then Exit Do
retry:
chart_title = InputBox("Sheet" & sheet_number & "のチャートのタイトルを入力")
If chart_title = "" Then GoTo retry
sheet_name = "sheet" & sheet_number
Call Set_Chart_title(sheet_name, chart_title)
Loop

End Sub


Private Sub Set_Chart_title(ByVal sheet_name As String, ByVal chart_title As String)
Dim chartobj As ChartObject

Set chartobj = ActiveWorkbook.Sheets(sheet_name).ChartObjects(1)
With chartobj.Chart
.HasTitle = True
.Charttitle.Text = chart_title
End With

End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。動作には、問題ありませんでした。

お礼日時:2018/09/21 01:35

市役所などの自治体が行っているパソコン相談で相談したほうが良いと思います。

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A