- ベストアンサー
EXCELでアクティブなワークシートのグラフを連続印刷するorPPTに1グラフ/1ページで貼り付ける
EXCEL2000(windows XP)環境にて、現在アクティブなワークシートにあるグラフ(埋め込みグラフ)を連続印刷する方法を教えてください。 例えば、ワークシート中に50枚のグラフが配置されているとき、これらを全て印刷したいのですが、いちいち印刷メニューからだと手間がかかり、これを何とかできればと考えています。 アクティブなワークシート中の任意の選択されたグラフを印刷できるとナオいいです。 更に、PPT等に1グラフ/1ページで出力(カット&ペースト)をマクロやVBA等で自動できれば最高です。 ここを見れば、にたようなことができるという情報でも歓迎します。 どうぞよろしくお願いいたします。
- syuutomi
- お礼率84% (11/13)
- オフィス系ソフト
- 回答数7
- ありがとう数9
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
なるほど、いいアイディアですね^^ では、さらにこのアイディアを応用して、ワークシート経由ではなく、 > oChart.Copy > ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)" > Selection.Cut ↓ oChart.CopyPicture xlScreen, xlPicture 直接拡張メタファイルでクリップボードにコピーするようにするとか? > office系アプリの操作に関して参考になるソース 有名どこで。 http://www.moug.net/ http://www.asahi-net.or.jp/~ef2o-inue/top01.html http://www.officetanaka.net/ 意外と重宝。 http://support.microsoft.com/select/?target=hub Google で検索すればいっぱいありますよ。その中から「お気に入り」を 探すこともスキルアップには大切なことだと思います^^
その他の回答 (6)
こんばんは venzoです。 >oChart.CopyPicture xlScreen, xlPicture 2000の環境で動作確認しました。 CopyPictureというメソッドは知りませんでした。 こちらの方がスマートだし、処理速度も速いです。すばらしい! >このようなVBAを使ったoffice系アプリの操作に関して参考になるソース 私の場合、Excelでマクロを記録して、それを改造することが多いです。 分からないことは、Google検索が中心です。 あまり参考にならないですね(^^;
お礼
最新バージョンのマクロ、ほんとうに早いです。 マクロの勉強方法。そうかマクロを記録すればいいんですね。 特にメソッド関係はそこから学習できることよくわかりました。 どうもありがとうございます。
思いつきました。PowerPointで出来ないなら、ExcelでPasteSpecialすれば良い。 >' PP スライド追加し、拡張メタファイル Excel グラフを貼り付け >oChart.Copy ↑この部分を↓こう変更。 ' PP スライド追加し、拡張メタファイル Excel グラフを貼り付け oChart.Copy ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)" Selection.Cut いったんExcelの方にメタファイルで貼り付けて、切り取って、PPTに貼り付け。 これでどうでしょう?
お礼
venzoさん、こんにちは。 できました!! サイズも非常に小さくてGOODです。 どうもありがとうございます。 これで当初考えたことが全て完璧に実現することができました。
補足
venzoさん、KenKen_SPさん 本当にありがとうございました。 別質問なので本当は別のと頃で聞いた方がよいのだと思いますが、このようなVBAを使ったoffice系アプリの操作に関して参考になるソース(海外に居住しているためWebページの方が助かります)がありましたら教えてください。 自分でも聞いているばかりでなくて、基本的なところを勉強して自力でも解決できるようになりたいと考えております。
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 > PowerPoint2000には、メソッド"PasteSpecial"が無いようです。 大量のグラフが埋め込まれる場合を考慮し、拡張メタファイルで 貼り付けた方が良いかなと思ったのですが... venzo さん、理由がわかってスッキリしました。 ありがとうございました。
お礼
KenKen_SPさん そうなんです。実はエクセルのファイルが10MBをこえており、かつ、グラフが大量にあるので貼り付けるときに、2000で動作するバージョンだと動作はするのですが、大変時間がかかり(本質的には自動なので問題なしですが)、かつ、大きくなってしまいます。 可能なら拡張メタファイルでできたらと思っていますが、メソッドがないとなると難しそうですね。 一度暫定的なエクセルファイルを作成してそちらに図をコピペしてから実行するなど工夫して回避できるか試してみるつもりです。 どうもありがとうございました。
こんにちは、お邪魔します。 Excel2000、PowerPoint2000で確認しました。 PowerPoint2000には、メソッド"PasteSpecial"が無いようです。 ヘルプで検索しましたがヒットしませんでした。 オブジェクトブラウザで検索してもダメでした。 代わりに"Paste"を使うしかないと思います。 #1のソースの場合 >ppSld.Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile ppSld.Shapes.Paste #2のソースの場合 >With ppSld.Shapes.PasteSpecial(DataType:=ppPasteEnhancedMetafile) With ppSld.Shapes.Paste 上記の変更でどちらのソースでも動きました。
お礼
venzoさん、ありがとうございます。 確かに2000の環境下で所望の動作しました。
- KenKen_SP
- ベストアンサー率62% (785/1258)
Excel2002+PowerPoint2002 では動きますね.... Office2000 環境がないので どうも良くわからないのですが、バージョンの差異なのかもしれません。 試しに... > ppSld.Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile > ' PP グラフ位置・サイズを最大になるように補正 > With ppSld.Shapes(1) > .LockAspectRatio = msoFalse > .Top = 0 > .Left = 0 > .Height = sngH > .Width = sngW > End With の部分を下記のように変えてみたらどうなりますか? ' PP グラフ位置・サイズを最大になるように補正 With ppSld.Shapes.PasteSpecial(DataType:=ppPasteEnhancedMetafile) .LockAspectRatio = msoFalse .Top = 0 .Left = 0 .Height = sngH .Width = sngW End With
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 PP の VBA はほとんど使わないので、勉強ついでにコードを書いてみました。 こんな感じで良かったのかな? ほとんどテストしてないけど。 # GetSelectedChats 関数部はもっと良い方法がありそうな気がします 標準モジュールにコピペして下さい。 Sub 選択グラフを印刷() Dim colCharts As Collection Dim oChart As Object On Error GoTo ERROR_HANDLER Set colCharts = GetSelectedChats If Not colCharts Is Nothing Then For Each oChart In colCharts ' プレビューしない場合は Preview:=False に修正 oChart.Chart.PrintOut Preview:=True Next End If Set colCharts = Nothing TERMINATE: On Error GoTo 0 Exit Sub ERROR_HANDLER: MsgBox Err.Description, vbCritical Resume TERMINATE End Sub Sub 選択グラフを新規PPにコピペ() ' 拡張メタファイルで貼り付けてます(Excel2002+PowerPoint2002) Dim ppApp As Object ' PowerPoint.Application Dim ppPst As Object ' PowerPoint.Presentation Dim ppSld As Object ' PowerPoint.Slide Dim colCharts As Collection Dim oChart As Object Dim sngW As Single Dim sngH As Single Dim i As Long ' PowerPoint(=PP) 定数 Const ppLayoutBlank = 12 Const ppPasteEnhancedMetafile = 2 ' 選択されている ChartObject 取得 Set colCharts = GetSelectedChats ' 終了条件:: 選択されたグラフが無い If colCharts Is Nothing Then Exit Sub ' 終了条件:: PP が起動できない On Error Resume Next Set ppApp = CreateObject("PowerPoint.Application") If ppApp Is Nothing Then On Error GoTo ERROR_HANDLER Err.Raise 1000, , "PowerPoint の起動に失敗しました" End If On Error GoTo ERROR_HANDLER ' PP を表示 ppApp.Visible = msoTrue ' PP 新規プレゼンテーション作成 Set ppPst = ppApp.Presentations.Add(WithWindow:=True) ' PP 画面最大サイズを取得 With ppPst.PageSetup sngH = .SlideHeight sngW = .SlideWidth End With ' Excel グラフの貼り付け開始 i = 1 For Each oChart In colCharts ' PP スライド追加し、拡張メタファイル Excel グラフを貼り付け oChart.Copy Set ppSld = ppPst.Slides.Add(Index:=i, _ Layout:=ppLayoutBlank) ppSld.Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile ' PP グラフ位置・サイズを最大になるように補正 With ppSld.Shapes(1) .LockAspectRatio = msoFalse .Top = 0 .Left = 0 .Height = sngH .Width = sngW End With i = i + 1 Next TERMINATE: On Error GoTo 0 Set colCharts = Nothing Set ppApp = Nothing Set ppPst = Nothing Set ppSld = Nothing Exit Sub ERROR_HANDLER: MsgBox Err.Description, vbCritical Resume TERMINATE End Sub ' // 選択された ChartObject を Collection で返す Private Function GetSelectedChats() As Collection Dim Obj As Object Dim bFoundChart As Boolean Dim colCharts As Collection On Error GoTo ERROR_HANDLER ' 終了条件:: Selection が Range If UCase$(TypeName(Selection)) = "RANGE" Then Exit Function ' Selection から ChartObject を探す Set colCharts = New Collection If UCase$(TypeName(Selection)) = "DRAWINGOBJECTS" Then ' 複数選択のとき For Each Obj In Selection If UCase$(TypeName(Obj)) = "CHARTOBJECT" Then colCharts.Add Obj End If Next Else ' 単一選択のとき Set Obj = Selection If UCase$(TypeName(Obj)) <> "CHARTOBJECT" Then Do While UCase$(TypeName(Obj)) <> "APPLICATION" Set Obj = Obj.Parent If UCase$(TypeName(Obj)) = "CHARTOBJECT" Then bFoundChart = True Exit Do End If Loop Else bFoundChart = True End If If bFoundChart Then colCharts.Add Obj End If ' Return If colCharts.Count > 0 Then Set GetSelectedChats = colCharts TERMINATE: On Error GoTo 0 Set colCharts = Nothing Exit Function ERROR_HANDLER: Set GetSelectedChats = Nothing Resume TERMINATE End Function
お礼
ありがとうございました。 前半の印刷するバージョンは問題なく動作しました。 後半のPPTの方ですが、パワーポイントとエクセルのバージョンが2000であることが影響するのか、実行すると(印刷するバージョンで選択した同じスライドを選択した状態)、以下のようなエラーが発生します。 「オブジェクトは、このプロパティまたはメソッドをサポートしていません」 マイクロソフトエクセルからのエラーとなります。 エラーが発生する前にパワーポイントが起動し、1枚目にまっさらのスライドが挿入されたエラーとなります。 ブレイクポイントを設定してどこで止まるかを見たところ、 With ppSld.Shapes(1) の行でエラーが発生しているようです。 なにか回避方法等がおもいつきましたら教えてください。
関連するQ&A
- Excel VBAで、グラフを特定のセルに移動させたい。
VBA初心者です。 エクセルのワークシート上のグラフ(例えば"グラフ1")を、特定のセル(例えばB4)に移動(もしくはカットペースト)させたいのですが、記述方法を教えて頂けないでしょうか。よろしくお願いします。
- ベストアンサー
- Visual Basic
- Excelのワークシートの印刷について
Excelのワークシートを印刷できないようにする方法があれば教えてください。恐らく、VBAを使うことになるんじゃないかなと思うんですが・・・よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- EXCELのダイアログシートって、なんですか?
EXCELで、シート見出しの上で右クリックすると、挿入や削除のショートカットメニューが出てきますよね。 そこで、挿入を選択すると標準で、『ワークシート』『グラフ』『EXCEL4.0マクロ』『MS EXCEL5.0ダイアログ』というのが出てきます。 『ワークシート』はワークシートですよね。『グラフ』も、グラフシートと言うことで、すぐにグラフを作成する画面に移行します。 しかし、『EXCEL4.0マクロ』『MS EXCEL5.0ダイアログ』に関してはいまいち使用用途が分かりません。 エクセル上で、マクロを作成したり、そのマクロを登録するコントロールを作成するもの、って言うカンジで受け取ればいいのでしょうか? でも、結局マクロとかは記録作業を行わなければ意味ないですよね? ご存知の方がいらっしゃったら、ぜひ教えてください。
- ベストアンサー
- オフィス系ソフト
- エクセルでのグラフを複数選択し1ページずつ印刷
質問させていただきます。 現在エクセル2010を使用してグラフを作成しています。 グラフをA1・A2・・・・A30の計30個程度作成したとしてそれぞれを1つの用紙に印刷したいと考えています。 現在の方法では (1)A1を選択 (2)印刷プレビュー (3)印刷実行 (4)A2を選択 … の方法を繰り返し行うことで印刷していますが、データ数が大量のグラフのため1つずつグラフを上記の手順で行うと非常に時間と手間がかかってしまいます。 そのため、グラフをすべて選択して印刷を試みたのですが、ワークシートごと印刷されたり、縮小して小さいグラフが並んだものしか印刷できません。 もしよろしければ、複数グラフを選択して一括で1ページずつ印刷することは可能なのかを教えていただけると幸いです。 また、可能ならばその方法も教えてください。 そういうマクロなどもありましたら、教えてください。 それでは、よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- VBAでワークシートとグラフシートの判別
VBAでワークシートがactiveになっている時だけ実行プログラムを書きたいのですが ワークシートとグラフシートの判別する分岐をif文で作成するには どのように書けば良いですか? 検索してみても見つかりませんでした。 どなたかよろしくお願いいたします。
- ベストアンサー
- Visual Basic
- エクセル グラフ 印刷
エクセルで表とグラフを同じシートに配置したとき印刷するうまく印刷されません。 画面上は、ちゃんと配置できてますが、プレビューでみると表とグラフが重なってます。 なぜ画面ビューとプレビューが違うのでしょうか? 2007のエクセルです。
- 締切済み
- インターネットビジネス
- シートとワークシート
突然Excel97 VBAを使うことになりました。技術書を読んでいると「シート(sheet(s)」と「ワークシート(worksheet(s)」と言う単語が使われています。 この両者の違いは何でしょうか?
- 締切済み
- オフィス系ソフト
- EXCEL VBA シートの連続印刷に白黒印刷
EXCEL VBAの初心者です。回答、指導をよろしくお願いします。EXCEL2003を使用しています。シートAとBを連続で印刷するVBAに白黒で印刷するVBAを加えたいのですが記述方法がわかりませんのでご指導お願いします。シートの連続印刷VBAは下記ですが、これでよろしいでしょうか。どなたかご指導よろしくお願いします。 Sub purint複数シート印刷() Sheets(Array("A", "B")).PrintOut End Sub
- ベストアンサー
- その他MS Office製品
- エクセルでデータがあるシートだけ印刷するマクロ
エクセルのマクロで印刷するマクロを使っていますが、5つある ワークシートを全て選択して印刷するマクロでこれをデータ(数値)が 入っているワークシートだけ印刷するマクロにしたいのですがどのようにすればいいのでしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセル2007 複数のワークシートの印刷について
Excel2007を使っています。(2003も可) 複数のワークシートに 同一セルに作成したデータを 一枚の用紙に、コピペを使わず、プリントすることは可能でしょうか? (関数式に加え、セル結合等しています) データの内容としては、給料計算を作成しました。 個人の12ヶ月を、ワークシート内に作成しましたが 明細して使用するなら、月ごとで一枚の用紙に出力したいのですが・・・ 解る範囲で調べると、マクロを使用するとか・・・ マクロ自体使った事がないので 解説をみても、どこで作成したらいいのか 全く解りません(><) よろしくお願いします。
- 締切済み
- オフィス系ソフト
お礼
お返事遅くなりスイマセン。 質問者です。 ためしてみました。スゴイ。はやい。生産性が格段に高くなりました(特に継続的にEXCELを使いたいときに) ご紹介いただいたURLにていろいろ勉強させていただきます。 どうもありがとうございました。