重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

いつもお世話になります

今、グラフを含んだエリアをコピーして
別のBookの任意のシートに張り付け、その後いろいろと操作したと思いますが
貼り付け先のChartのIndex番号の取得の方法が分かりません

Windows("A.xlsx").Activate
OrgRng = Selection.Address
Range(OrgRng).Select
Selection.Copy

  Windows("B.xlsx").Activate
(任意のシート、位置を事前に選択)
  ActiveSheet.Paste
    ・
    ・


この時に任意のシートには別なグラフも複数有るものとします
張り付けたグラフを処理するためにIndex番号が必要となると思いますが
どのように取得して良いか、検討中です

お分かりになりましたら是非ご教示、お願い申し上げます

A 回答 (2件)

一つお詫びしておきます。

以前のエクセルでは同じ名称のグラフをコピーした時は勝手にグラフ名の最後の番号が変更されユニークな名称になっていたと認識していましたが Excel 2013 ではそのままの名前になっていました。
仕方がないのでコピー後のグラフ名を指定する事も出来るようにしました。
応用がききやすい様にユーザー定義関数として作成しました。戻り値はIndex番号になります。グラフの削除が無ければそのまま使えます。グラフ名は指定する事でユニークな物にすることも出来ます、省略した場合は元のグラフ名のままになります。
引数は日本語なので判ると思いますが判らない所が有りましたら聞いて下さい。
グラフのコピーは複数を一度に行わないで下さい。

Sub Sample()

Dim インデックス As Long

' グラフ名を指定する場合
' インデックス = ChartCopy("A.xlsx", "Sheet1", "A1:M40", "B.xlsx", "Sheet1", "A1", "グラフ①")
' グラフ名を省略する場合
 インデックス = ChartCopy("A.xlsx", "Sheet1", "A1:M40", "B.xlsx", "Sheet1", "A1")
 MsgBox (インデックス)

End Sub

Function ChartCopy(元ブック名 As String, 元シート名 As String, コピー範囲 As String, 先ブック名 As String, 先シート名 As String, 貼付位置 As String, Optional グラフ名 As String = "") As Long

Dim グラフ As ChartObject
Dim グラフ辞書 As Object

 Windows(先ブック名).Activate
 Sheets(先シート名).Select
 Set グラフ辞書 = CreateObject("Scripting.Dictionary")
 For Each グラフ In ActiveSheet.ChartObjects
  グラフ辞書.Add グラフ.Index, グラフ.Name
 Next
 Windows(元ブック名).Activate
 Sheets(元シート名).Select
 Range(コピー範囲).Copy
 Windows(先ブック名).Activate
 Range(貼付位置).Select
 ActiveSheet.Paste
 Application.CutCopyMode = False
 For Each グラフ In ActiveSheet.ChartObjects
  If グラフ辞書.Exists(グラフ.Index) = False Then
   ChartCopy = グラフ.Index
   If グラフ名 <> "" Then
    グラフ.Name = グラフ名
   End If
   Exit For
  End If
 Next
 Set グラフ辞書 = Nothing

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

ありがとうございます

今すぐやってみます
本当にありがとうございます
まずは、お礼まで

お礼日時:2019/12/03 13:45

Index番号は別のグラフを削除すると変わってしまう可能性があるので、その場で使う以外では意味が無いと思います。

考え方としては張り付けた時に勝手につけられるグラフの名前を使う方が良いと思います。数日かかっても良ければグラフの名前やグラフのIndex番号を取得するものを作成してみます。お待ちいただけますか?
    • good
    • 0
この回答へのお礼

わー!、ありがとうございます
待ってます、是非よろしくお願いいたします

本当にありがとうございます

お礼日時:2019/12/03 09:34

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