エクセルVBAで形式を選択して貼付した画像を変数に

このQ&Aのポイント
  • エクセル2010でグラフを切り取り、形式を選択して貼り付ける方法について説明します。
  • オブジェクト変数に画像を代入するためのSet文の書き方について解説します。
  • VBAを使用して、エクセルのマクロで画像を変数に代入する手順を紹介します。
回答を見る
  • ベストアンサー

エクセルVBAで形式を選択して貼付した画像を変数に

エクセル2010です。 下記のマクロで、グラフを切り取り、形式を選択して貼り付けることはできました。 次に、この画像をオブジェクト変数に代入するにはどのようにSet文を書けばいいのでしょうか? よろしくお願いします。 Sub Test() Dim objChart As ChartObject With Sheets("Sheet1") Set objChart = .ChartObjects(1) objChart.Cut .PasteSpecial Format:="図 (拡張メタファイル)" End With End Sub

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

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

貼り付けた直後に数を数えます。 (例1) Dim objChart As ChartObject Dim shp As Shape With Sheets("Sheet1") Set objChart = .ChartObjects(1) objChart.Cut .PasteSpecial Format:="図 (拡張メタファイル)" Set shp = .Shapes(.Shapes.Count) End With MsgBox shp.name

emaxemax
質問者

お礼

さっそくありがとうございます。 なるほど、貼り付けた直後ならShapeの数の最後で判定できるわけですね。 例1)と書かれているのを見ると。ほかにも方法があるのでしょうか?

その他の回答 (1)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

≫No.1 この回答へのお礼 >例1)と書かれているのを見ると。ほかにも方法があるのでしょうか? スマートとは言えませんが (例2) Dim pic As Picture With Sheets("Sheet1") .ChartObjects(1).Cut .PasteSpecial Format:="図 (拡張メタファイル)" End With If TypeName(Selection) = "Picture" Then Set pic = Selection End If MsgBox pic.name #余談 Sheets("Sheet1").PasteSpecial Format:="図 (拡張メタファイル)" としても効き目がなく ActiveSheetにPasteされるようです。 注意が必要です。

emaxemax
質問者

お礼

xls88 さん、なんどもありがとうございます。 貼り付けるとその画像が選択されたことになるのでSelectionを利用するわけですね。 シート名を指定してるのにActiveSheetにPasteされるのは不思議ですね。 ありがとうございました。

関連するQ&A

  • Excel VBA グラフを任意sheetに移動させるには?

    アクティブになっているsheetのグラフを参照し、 それを『まとめ』sheetに移動して張り付ける。 現在 ★マークのところでエラーになっています。 オブジェクトは、このメソッドをサポートしていません…と、これは何のエラーになるのでしょうか? アドバイスお願い致します. Sub test() Dim str As String ★str = ActiveSheet.ChartObjects.Name 'strにグラフ名を代入 ←不具合中… Sheets("まとめ").Activate '---sheet 『まとめ』を アクティブにする ActiveSheet.ChartObjects(str).Activate ActiveChart.Paste End Sub

  • グラフ作成時のデータ取得について

    グラフ作成時のデータ取得について 下記コードにてグラフを作成したのですが データが2種類で20回分の連続データのグラフを作成したいのですが 下記のコードだと、4種類の10回分のグラフにしかなりません 元データはA13とA14にデータの見出し C13~L14までは第1回目から10回目までのデータ C16~L17までは第11回目から20回目までのデータが記入されてます setsourcedataの後のrange内をどのように変更すればよろしいでしょうか? ご教示願います Dim xlsheet As Worksheet Dim objChart As ChartObject Dim myrange1 As Range Set xlsheet = ActiveSheet For Each objChart In xlsheet.ChartObjects objChart.Delete Next Set objChart = Nothing With xlsheet.ChartObjects.Add(10, 50, 850, 180).Chart .HasTitle = True .ChartType = xlColumnClustered .SetSourceData Source:=Union(Range(Cells(13, 1), Cells(14, 12)), _ Range(Cells(16, 3), Cells(17, 12))) .Legend.Position = xlLegendPositionTop .HasTitle = False End With Set xlsheet = Nothing End Sub

  • Excel VBA 貼付先のコントロール?

    御世話になります。 色々調べて下記の構文が出来たのですが、あと一歩が足りません。 製造シートのA列のデータを抽出シートのRtmが代入されたセルの上から7行目以下に貼付たいのです。 宜しくお願い致します。 Sub sappri() Dim nTotal, i Dim Rtm As Variant nTotal = Sheets("製造データ").Range("A1").End(xlDown).Row Rtm = Sheets("製造データ").Range("J1") With Sheets("抽出") For i = 1 To nTotal .Cells(i * 3 - 2, Rtm).Value = Sheets("製造データ").Cells(i, 1).Value Next i End With End Sub

  • 現在、エクセルで、選択したグラフの大きさや縦横軸を統一するマクロを作成

    現在、エクセルで、選択したグラフの大きさや縦横軸を統一するマクロを作成中です。 以下のようなマクロまでは作ることができましたが、ひとつだけ不満があります。 それは、初期値です。 できれば、最初に選択したグラフの設定を初期としてダイアログの入力欄に記入してある状態にしたいのですが、どうすればよいかわかりません。 知恵を貸してください!! よろしくお願いいたします!!! Sub 選択したグラフ縦横軸変更() Dim chartObj As ChartObject Dim myObj As Object Dim xmin As Double Dim xmax As Double Dim ymin As Double Dim ymax As Double xmin = Application.InputBox("x軸最小値") xmax = Application.InputBox("x軸最大値") ymin = Application.InputBox("y軸最小値") ymax = Application.InputBox("y軸最大値") For Each myObj In Selection Set chartObj = ActiveSheet.ChartObjects(myObj.Name) With chartObj.Chart.Axes(xlCategory) .MaximumScale = xmax .MinimumScale = xmin End With With chartObj.Chart.Axes(xlValue) .MaximumScale = ymax .MinimumScale = ymin End With Next myObj End Sub

  • エクセルのマクロでアクティブシート内の選択した複数のグラフのみ軸の目盛を変更

    エクセルのマクロで教えてください。20個のグラフを一つのシートに作成しますが、この20個の散布図グラフの中から、クリックして選択したグラフだけ、y軸の目盛を自動スケールで最大値、最少値、目盛間隔の分割数は5個に自動にできないでしょうか? いくつか質問サイトを調べて、以下でアクティブシートのすべてのグラフ(20個)をセルに入力された値に一括で変更することはできるのですが、クリックして選択したグラフだけ、上記のようにできません。よろしくお願いします。 Sub 全部() Dim co As ChartObject For Each co In ActiveSheet.ChartObjects With co.Chart With .Axes(xlValue) .MinimumScale = Range("A1").Value '最小値 .MaximumScale = Range("A2").Value '最大値 .MajorUnit = Sheets("Sheet1").Range("A3") '目盛間隔 End With End With Next End Sub

  • エクセルのVBAに関する質問です。

    エクセルのVBAに関する質問です。 「指定フォルダ(ここではXXXX)内の全てのエクセルファイルを開き、内容を転記していく」 というマクロについての質問です。 ネットを参照し、以下のマクロを見つけました。 -------------------------------------------------------------------------- Sub Macro1() Dim theName As String Dim theDir As String Dim theBook As Workbook Dim flg As Boolean flg = True Application.ScreenUpdating = False theDir = ThisWorkbook.Path & "\XXXX" theName = Dir(theDir & "\*.xls") Do While theName <> "" Set theBook = Workbooks.Open(theDir & "\" & theName) Call subA(theBook, flg) flg = False theBook.Close theName = Dir Loop End Sub Sub subA(theBook As Workbook, flg As Boolean) Dim thetbl As Range, LRow As Long Set thetbl = theBook.Sheets(1).Range("A1").CurrentRegion thetbl.Copy With ThisWorkbook.ActiveSheet LRow = .Range("A65536").End(xlUp).Row If LRow = 1 Then .Range("A" & LRow).PasteSpecial xlPasteValues Else .Range("A" & LRow + 1).PasteSpecial xlPasteValues End If End With Application.CutCopyMode = False End Sub -------------------------------------------------------------------------- 実際にはこのマクロは上手く動作していますが、1つ疑問があります。 「一度開いたファイルは開かない」というのはどの部分のおかげか、ということです。 当方初心者で、分かりづらい質問かもしれませんが、どうぞご教授お願いいたします。

  • グラフの削除をExcelVBAで行う

    こんばんは。同じシートの中にグラフを3つ作成し、 コマンドボタンを押すとグラフを削除し、新しいグラフを作成するようにしたいのですが、グラフの3つ目を削除のしようとするとエラーが発生してしまいます。 2つ目までは順調に消えるのですが、3つ目のグラフが削除されないのはなぜなのでしょうか。 色々教えていただき何とか形になってきたのですが、確認すると色々とぼろがでてきてしまい、困っています。 どなたか教えていただけないでしょうか。 宜しくお願い致します。 Sub Glafu() Dim chartobj As ChartObject Worksheets("ABC").Activate ActiveSheet.ChartObjects(1).Delete ActiveSheet.ChartObjects(2).Delete ActiveSheet.ChartObjects(3).Delete Set chartobj = Worksheets("ABC").ChartObjects.Add(600, 0, 300, 200) chartobj.Chart.SetSourceData Worksheets("ABC").Range(Range("b2").End(xlDown), ActiveCell.End(xlToRight)) With Worksheets("ABC").ChartObjects(1).Chart .HasTitle = True .charttaitle.Text = "タイトル1" End With Set chartobj = Worksheets("ABC").ChartObjects.Add(600, 200, 300, 200) chartobj.Chart.SetSourceData Worksheets("ABC").Range(Range("e2").End(xlDown), ActiveCell.End(xlToRight)) With Worksheets("ABC").ChartObjects(1).Chart .HasTitle = True .charttaitle.Text = "タイトル2" End With Set chartobj = Worksheets("ABC").ChartObjects.Add(600, 400, 300, 200) chartobj.Chart.SetSourceData Worksheets("ABC").Range(Range("h2").End(xlDown), ActiveCell.End(xlToRight)) With Worksheets("ABC").ChartObjects(1).Chart .HasTitle = True .charttaitle.Text = "タイトル3" End With End Sub

  • シートを選択したい vba

    自身のファイルを読み取り専用で新たに立ち上げて、シートを選択したいのですが Private Sub cmd_読み取り専用で開く_Click() Dim xlApp As Object Dim xlBook As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open(ActiveWorkbook.FullName) xlApp.Visible = True xlApp.xlBook.Sheets("メイン").Select Set xlApp = Nothing Set xlBook = Nothing End Sub だと xlApp.xlBook.Sheets("メイン").Selectでエラーになります。 文法が間違ってると思うのですが、修正案をご教授ください。

  • Excel VBAでグラフを作成したい

    今、下記の ように参考書のコードを書き写し実行しましたが、実行時エラーが出ます。 Sub グラフ作成()   With Worksheets("sheet1").ChartObjects     .Add(230, 10, 250, 180).Chart      .SetSourceData Range("A3").CurrentRegion     .ChartType = xlColumnClustered   End With End Sub    実行時エラー '438' オブジェクトはこのプロパティまたはメソットをサポートしていません。  と出ます、何が間違いなのかわかりません、私の間違っているところを教えた頂けませんか。お願いします。   

  • エクセルのマクロで教えてください。仕事で、種類の異なる20個のグラフを

    エクセルのマクロで教えてください。仕事で、種類の異なる20個のグラフを一つのシートに作成しますが、2個だけ内容が異なるグラフになってします この20個の散布図グラフで、クリックして選択したグラフだけ、y軸の目盛を自動スケールで最大値、最少値、目盛間隔の分割数は5個に自動にできないでしょうか? このサイトなどいくつか調べて、以下でアクティブシートのすべてのグラフ(20個)をセルに入力された値に一括で変更することはできるのですが、クリックして選択したグラフだけ、上記のようにできません。よろしくお願いします。 Sub 全部() Dim co As ChartObject For Each co In ActiveSheet.ChartObjects With co.Chart With .Axes(xlValue) .MinimumScale = Range("A1").Value '最小値 .MaximumScale = Range("A2").Value '最大値 .MajorUnit = Sheets("Sheet1").Range("A3") '目盛間隔 End With End With Next End Sub

専門家に質問してみよう