- ベストアンサー
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 マクロ、素人です。 どうしてでしょうか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (6)
s_husky です。 ActiveChart.CopyPicture , xlPicture, xlScreen 画像の種類とサイズを指定して CopyPicture できるようです。
お礼
返事が遅くなってすみませんでした。 何とか目的が達せられました。 有難うございました。
- papayuka
- ベストアンサー率45% (1388/3066)
#4です。 記録マクロには限界があり全ての動作が記録される訳ではないようです。 > 実際にやりたかったのは、グラフを、図に変換したかったのです。 #4の回答はやりたい事と違うって事でしょうか? co.copy を co.Cut にすれば、co.Delete は不要ですが、、、 co.Cut .Range("C12").Activate .PasteSpecial Format:="図 (拡張メタファイル)" End With > 次々にグラフを作ると、前に作ったデータにより次のグラフが影響を受けるため データ元がいつも同じ Range("E2:H4") で、ここの値を変化させながら複数のグラフを作りたいって事?
お礼
返事が遅くなってすみませんでした。 今回の質問では、グラフを作って図に変換するところが知りたかったので例として質問しましたが、実際には、別シートにあるデーターを、パラメーターを与えて、必要なデータのみ作業シートに取り込み、数々のグラフを作りたかったのです。 ActiveSheet.ChartObjects("グラフ名").Cut ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)" でできました。 有難うございました。
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行が欠落していたということでしょうか?
お礼
有難うございました。 papayukaさんにも返事しましたが、グラフを図に変換したかったのです。[マクロの記録]では、記録されないコードがあるのでしょうか? ActiveChart.CopyPictureは元のグラフが残りますが、 いわゆる[カット]はできないのでしょうか? 変換後に別ステップでグラフを削除すればよいのですが 又、元のグラフの大きさと図の大きさが変わりますが、 同じ大きさにできないでしょうか?
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 ※バージョンの違いなんでしょうかね?
- Hayashi_Trek
- ベストアンサー率44% (366/818)
>マクロで、グラフの切り取り、貼り付け、形式を選択して貼り付け<図 (拡張メタファイル)>を実行すると、 >クリップボードに入らず、エラーとなる。 提示されたマクロには、切り取り命令が含まれていないようです。 PasteSpecialは形式を選択して貼り付けの命令なので、クリップボードからワークシートに貼り付けます。 ActiveChart.Locationの後にActiveChart.Cutを追加してみたらどうでしょうか?
補足
ActiveChart.Cutでエラーとなります。
回答が付かないので誘い水を... エラー箇所は、Format:="図 (拡張メタファイル)"のようですね。 1、冒頭に On Error Resume Next の1行を挿入すると目的は達成されるようです。 2、Format:="図 (拡張メタファイル)"を、0、1、2の数字にするとエラーは出ません。 が、クリップボードが全てコピーされます。 クリップボードをクリアする1行を冒頭に挿入すれば良いのですが判りません。 ※"図 (拡張メタファイル)"のエラーの出ない書き方があるのか不具合なのかということと思います。 ※プロの回答が付くことを願っています。
補足
早速の返事、ありがとうございました。 <2、Format:="図 (拡張メタファイル)"を、0、1、2の数字にするとエラーは出ません。 が、クリップボードが全てコピーされます。> こちらでは、エラーになるのですが?
お礼
有難うございました。 マクロには素人なので、[ツールメニュー]から[新しいマクロの記録]でマクロの内容を推測してマクロを組み立てる方法で行なっているものですから・・・・ 実際にやりたかったのは、グラフを、図に変換したかったのです。別シートのデータよりパラメーターを与えてデータをゲットしてグラフを作る、ただしこの時 作業シートにデーターを持ってくると、次々にグラフを作ると、前に作ったデータにより次のグラフが影響を受けるため、その影響を避けるために図に変換すれば、影響受けないと考えたのですが・・・・ 他に、いい方法があると思いますが・・・・・