• ベストアンサー

Excel マクロでグラフの切取り貼り付け

手動で行なった[マクロの記録]どうりに、マクロを実行してもうまくいきません。 マクロで、グラフの切り取り、貼り付け、形式を選択して貼り付け<図 (拡張メタファイル)>を実行すると、クリップボードに入らず、エラーとなる。 手動で行なうとOKなのですが、 [ツール]の[新しいマクロの記録]では、下記のとうり記録されていて、実行結果も正しいのですが、マクロで実行すると、クリップボードに入らず、エラーとなります。 ------------------------------- Range("E2:H4").Select Charts.Add ActiveChart.ChartType = xlColumnClustered ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("E2:H4") ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" ActiveWindow.Visible = False ActiveWindow.WindowState = xlNormal ActiveWindow.WindowState = xlMaximized Range("C12").Select ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)", Link:=False, _ DisplayAsIcon:=False Range("J7").Select ------------------------- Office XP 2002 マクロ、素人です。 どうしてでしょうか?

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.4

s_huskyさん、質問者さんは普通にグラフを作りたいのではなくて、グラフを図に変換したいのでしょう。 下記でどうでしょうか? Excel2000では動きますが、、、 Sub ChartAddTest() Dim co As ChartObject  With Worksheets("Sheet1")   Set co = .ChartObjects.Add(.Range("C12").Left, .Range("C12").Top, 372, 208)     co.Chart.ChartWizard Source:=.Range("E2:H4"), _          Gallery:=xlColumn, Format:=1, PlotBy:=xlRows, _          CategoryLabels:=1, SeriesLabels:=1, HasLegend:=1     co.Chart.ChartArea.Border.LineStyle = xlContinuous     co.Chart.Axes(xlValue).HasMajorGridlines = True     co.Copy     .Range("C12").Activate     .PasteSpecial Format:="図 (拡張メタファイル)"     co.Delete  End With End Sub

okeicyan
質問者

お礼

有難うございました。 マクロには素人なので、[ツールメニュー]から[新しいマクロの記録]でマクロの内容を推測してマクロを組み立てる方法で行なっているものですから・・・・ 実際にやりたかったのは、グラフを、図に変換したかったのです。別シートのデータよりパラメーターを与えてデータをゲットしてグラフを作る、ただしこの時 作業シートにデーターを持ってくると、次々にグラフを作ると、前に作ったデータにより次のグラフが影響を受けるため、その影響を避けるために図に変換すれば、影響受けないと考えたのですが・・・・ 他に、いい方法があると思いますが・・・・・

その他の回答 (6)

noname#22222
noname#22222
回答No.7

s_husky です。 ActiveChart.CopyPicture , xlPicture, xlScreen 画像の種類とサイズを指定して CopyPicture できるようです。

okeicyan
質問者

お礼

返事が遅くなってすみませんでした。 何とか目的が達せられました。 有難うございました。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.6

#4です。 記録マクロには限界があり全ての動作が記録される訳ではないようです。 > 実際にやりたかったのは、グラフを、図に変換したかったのです。 #4の回答はやりたい事と違うって事でしょうか? co.copy を co.Cut にすれば、co.Delete は不要ですが、、、     co.Cut     .Range("C12").Activate     .PasteSpecial Format:="図 (拡張メタファイル)"  End With > 次々にグラフを作ると、前に作ったデータにより次のグラフが影響を受けるため データ元がいつも同じ Range("E2:H4") で、ここの値を変化させながら複数のグラフを作りたいって事?

okeicyan
質問者

お礼

返事が遅くなってすみませんでした。 今回の質問では、グラフを作って図に変換するところが知りたかったので例として質問しましたが、実際には、別シートにあるデーターを、パラメーターを与えて、必要なデータのみ作業シートに取り込み、数々のグラフを作りたかったのです。 ActiveSheet.ChartObjects("グラフ名").Cut ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)" でできました。 有難うございました。

noname#22222
noname#22222
回答No.5

s_husky です。 後学のために! Private Sub CommandButton1_Click()   Range("E2:H4").Select   Charts.Add   ActiveChart.ChartType = xlColumnClustered   ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("E2:H4")   ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"   ActiveChart.CopyPicture   ActiveWindow.Visible = False   ActiveWindow.WindowState = xlNormal   ActiveWindow.WindowState = xlMaximized   Range("C12").Select   ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)"   Range("J7").Select End Sub ActiveChart.CopyPicture この1行が欠落していたということでしょうか?

okeicyan
質問者

お礼

有難うございました。 papayukaさんにも返事しましたが、グラフを図に変換したかったのです。[マクロの記録]では、記録されないコードがあるのでしょうか? ActiveChart.CopyPictureは元のグラフが残りますが、 いわゆる[カット]はできないのでしょうか? 変換後に別ステップでグラフを削除すればよいのですが 又、元のグラフの大きさと図の大きさが変わりますが、 同じ大きさにできないでしょうか?

noname#22222
noname#22222
回答No.3

s_husky です。 (Excel2003 SP2) 質問者のコードを次のようにして確認。 青、紫、白の棒グラフが作成されます。 ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1" 行は、エラーになりますので修正しています。 Private Sub CommandButton1_Click() On Error Resume Next   Range("E2:H4").Select   Charts.Add   ActiveChart.ChartType = xlColumnClustered   ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("E2:H4")   ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"   ActiveWindow.Visible = False   ActiveWindow.WindowState = xlNormal   ActiveWindow.WindowState = xlMaximized   Range("C12").Select   ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)", Link:=False, DisplayAsIcon:=False   Range("J7").Select End Sub ただ、次のマクロですとエラーも出ないで同じ結果を得ます。 Private Sub CommandButton1_Click() On Error Resume Next   Range("E2:H4").Select   Charts.Add   ActiveChart.ChartType = xlColumnClustered   ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("E2:H4")   ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"   ActiveWindow.Visible = False   ActiveWindow.WindowState = xlNormal   ActiveWindow.WindowState = xlMaximized   Range("C12").Select   Range("J7").Select End Sub ※バージョンの違いなんでしょうかね?

回答No.2

>マクロで、グラフの切り取り、貼り付け、形式を選択して貼り付け<図 (拡張メタファイル)>を実行すると、 >クリップボードに入らず、エラーとなる。 提示されたマクロには、切り取り命令が含まれていないようです。 PasteSpecialは形式を選択して貼り付けの命令なので、クリップボードからワークシートに貼り付けます。 ActiveChart.Locationの後にActiveChart.Cutを追加してみたらどうでしょうか?

okeicyan
質問者

補足

ActiveChart.Cutでエラーとなります。

noname#22222
noname#22222
回答No.1

回答が付かないので誘い水を... エラー箇所は、Format:="図 (拡張メタファイル)"のようですね。 1、冒頭に On Error Resume Next の1行を挿入すると目的は達成されるようです。 2、Format:="図 (拡張メタファイル)"を、0、1、2の数字にするとエラーは出ません。   が、クリップボードが全てコピーされます。   クリップボードをクリアする1行を冒頭に挿入すれば良いのですが判りません。 ※"図 (拡張メタファイル)"のエラーの出ない書き方があるのか不具合なのかということと思います。 ※プロの回答が付くことを願っています。

okeicyan
質問者

補足

早速の返事、ありがとうございました。 <2、Format:="図 (拡張メタファイル)"を、0、1、2の数字にするとエラーは出ません。   が、クリップボードが全てコピーされます。> こちらでは、エラーになるのですが?