アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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」に設定されています)
    • good
    • 1
この回答へのお礼

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

お礼日時:2005/12/13 11:55

シート内にグラフが1つしかないなら



ActiveSheet.ChartObjects(1).Left = ActiveSheet.Range("B4").Left
ActiveSheet.ChartObjects(1).Top = ActiveSheet.Range("B4").Top

でできます。
複数ある場合は「ChartObjects(1)」の部分を「ChartObjects(2)」とかにしてやります。
    • good
    • 2
この回答へのお礼

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

お礼日時:2005/12/13 08:53

これで出来ると思われ



Private Sub CommandButton1_Click()
  
  With ChartObjects.Item(1)
    .Left = Range("b4").Left
    .Top = Range("b4").Top
  End With
  
End Sub
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
アドバイス通り試してみたのですがエラー(変数が定義されていません)がでます。
一応、以下の様に記述して目的とする結果が得られたのですが、もっと簡単に記述できないものでしょうか?

Dim myChartName
myChartName = ActiveChart.Name
myChartName = Mid$(myChartName, InStr(myChartName, "グラフ"))
ActiveSheet.Shapes(myChartName).Cut
Range("B4").Select
ActiveSheet.Paste

お礼日時:2005/12/12 14:12

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