• ベストアンサー

Excel VBAで、グラフを特定のセルに移動させたい。

VBA初心者です。 エクセルのワークシート上のグラフ(例えば"グラフ1")を、特定のセル(例えばB4)に移動(もしくはカットペースト)させたいのですが、記述方法を教えて頂けないでしょうか。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.3

#2です。 「アクティブなChartObjectsのナンバーを取得する方法」はなかなか複雑になります。。。。 前提として以下のことを知っておいたほうがよいと思うので記入します。 【前提】 グラフには2種類のオブジェクトが存在します。 今回使用した「ChartObject」と「Chart」です。 違いは「埋め込みグラフ専用」か「シート&埋め込み両用」かの違いです。 またそれとは別に現在選択中のグラフを取得する方法として「ActiveChart」がありますが、これは「Chart」を戻り値とします。 以上の前提を踏まえて「アクティブなChartObjectsのナンバーを取得する方法」について記入します。 【取得方法】 Dim i As Long Dim lngGetIndex As Long '初期化 lngGetIndex = -1 '埋め込みグラフを繰り返しチェックし、アクティブグラフかどうかを判別 For i = 1 To ActiveSheet.ChartObjects.Count '同一オブジェクトの場合はインデックスを取得して処理を抜ける If ActiveSheet.ChartObjects(i).Chart Is ActiveChart Then lngGetIndex = i Exit For End If Next 一応以上の方法でアクティブなグラフのインデックスを「lngGetIndex」に取得できます。 (未選択の場合は「-1」が「lngGetIndex」に設定されています)

mumu001
質問者

お礼

度々のお返事ありがとうございます。 非常に丁寧に回答して頂いたおかげで、たいへん勉強になりました。なにぶん初心者なもので、また質問することがあると思いますが、よろしくお願いします。本当にありがとうございました。

その他の回答 (2)

  • takkunnet
  • ベストアンサー率74% (32/43)
回答No.2

シート内にグラフが1つしかないなら ActiveSheet.ChartObjects(1).Left = ActiveSheet.Range("B4").Left ActiveSheet.ChartObjects(1).Top = ActiveSheet.Range("B4").Top でできます。 複数ある場合は「ChartObjects(1)」の部分を「ChartObjects(2)」とかにしてやります。

mumu001
質問者

お礼

返事が遅くなって申し訳ありません。 アドバイス通りに記述して、動作することを確認しました。ありがとうございました。 もしお手数でなければ、アクティブなChartObjectsのナンバーを取得する方法を教えていただけないでしょうか?よろしくお願いします。

  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.1

これで出来ると思われ Private Sub CommandButton1_Click()      With ChartObjects.Item(1)     .Left = Range("b4").Left     .Top = Range("b4").Top   End With    End Sub

mumu001
質問者

お礼

お返事ありがとうございます。 アドバイス通り試してみたのですがエラー(変数が定義されていません)がでます。 一応、以下の様に記述して目的とする結果が得られたのですが、もっと簡単に記述できないものでしょうか? Dim myChartName myChartName = ActiveChart.Name myChartName = Mid$(myChartName, InStr(myChartName, "グラフ")) ActiveSheet.Shapes(myChartName).Cut Range("B4").Select ActiveSheet.Paste

関連するQ&A

専門家に質問してみよう