質問するログイン新規登録

Q&A

3回答

608閲覧

VBAでjpeg書き出し時白紙になる

natufuyu

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2025/12/12 07:02

編集2025/12/12 07:07

0

0

実現したいこと

VBAで、Excelで作成している表をjpeg画像として保存したい。

前提

Excelで作られた表の最終行までを自動でjpeg画像に書き出すVBAコードを完成させたい。

発生している問題・エラーメッセージ

今週の月曜まではうまく書き出せていたが、
それ以降、内容が反映されていない真っ白な画像が書き出されるようになってしまった。

該当のソースコード

Dim wsEnd As Worksheet
Dim lastRowEnd As Long
Dim rg As Range

Set wsEnd = ThisWorkbook.Sheets("最終")
lastRowEnd = wsEnd.Cells(wsEnd.Rows.Count, "A").End(xlUp).Row
Set rg = wsEnd.Range("A1:L" & lastRowEnd)

rg.CopyPicture appearance:=xlScreen, Format:=xlPicture
With New Excel.Application
With .Workbooks.Add
With .Worksheets(1).ChartObjects.Add(0, 0, rg.Width,
rg.Height).Chart
.Paste
.Export fileName:="C:\ftp\etc\mail\最終.jpg", filtername:="jpg"
End With
.Close False
End With
.Quit
End With

試したこと

fileNameにホルダがちゃんとあることは確認。最終.jpgも更新はされているが、白紙になっている。
白紙のサイズが変わっていることから、最終行までの範囲は取れていそうだが、なぜか中身がコピーされていないようです。

どのように直せば上手くいくか、ご教示いただけますと幸いです。

補足情報(FW/ツールのバージョンなど)

Windows11
office2024

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

回答3

0

原因は良くわかっていないのですが、私の環境では一応以下で出るみたいなので回答します。

VBA

1Dim wsEnd As Worksheet 2Dim lastRowEnd As Long 3Dim rg As Range 4 5Set wsEnd = ThisWorkbook.Sheets("最終") 6lastRowEnd = wsEnd.Cells(wsEnd.Rows.Count, "A").End(xlUp).Row 7Set rg = wsEnd.Range("A1:L" & lastRowEnd) 8With New Excel.Application 9 With .Workbooks.Add 10 With .Worksheets(1).ChartObjects.Add(0, 0, rg.Width, rg.Height).Chart 11 rg.CopyPicture appearance:=xlScreen, Format:=xlPicture 12 Application.Wait (Now + TimeValue("00:00:01")) 13 .Paste 14 Application.Wait (Now + TimeValue("00:00:01")) 15 .Export Filename:="C:\Work\最終.jpg", filtername:="jpg" 16 End With 17 .Close False 18 End With 19 .Quit 20End With 21

以下でも出力できるようになった気がします。

VBA

1Dim wsEnd As Worksheet 2Dim wsTmp As Worksheet 3Dim lastRowEnd As Long 4Dim rg As Range 5 6Set wsEnd = ThisWorkbook.Sheets("最終") 7Set wsTmp = ThisWorkbook.Sheets("Sheet2") 8 9lastRowEnd = wsEnd.Cells(wsEnd.Rows.Count, "A").End(xlUp).Row 10Set rg = wsEnd.Range("A1:L" & lastRowEnd) 11rg.CopyPicture appearance:=xlScreen, Format:=xlPicture 12With New Excel.Application 13 With .Workbooks.Add 14 With .Worksheets(1).ChartObjects.Add(0, 0, rg.Width, rg.Height).Chart 15 ThisWorkbook.Activate 16 wsTmp.Select 17 wsEnd.Select 18 .Paste 19 .Export Filename:="C:\Work\最終.jpg", filtername:="jpg" 20 End With 21 .Close False 22 End With 23 .Quit 24End With

ChartObjectsをした後に
そのままだとクリップボードが上手く扱えないのでしょうか・・・
謎ですね。

投稿2026/01/01 10:05

xail2222

総合スコア1545

0

今週の月曜まではうまく書き出せていたが、
それ以降、内容が反映されていない真っ白な画像が書き出されるようになってしまった。

  • 試しに他のファイルでも同様に白紙の画像が保存されますか?されるのであればエクセルファイルに問題がある可能性があります。ファイルを作り直して問題が解決するか試してみてください。

  • コードを1行ずつ実行して画像が保存されるか確認しましょう。クリップボードを経由する処理の場合、場合によっては遅延が発生することがありますので、デバッグ実行では上手く行くがコードを通しで実行すると上手く行かない場合はコピーの後に待機処理を入れてみてください。

コードが思った通りに行かない場合はデバッグして問題の切り出しをしてください。コードに変更がなくてもOSのアップデートやOfficeのアップデートにより不具合が発生してしまう可能性もあります。最近何かしら変化点がなかったか確認されるのも良いかと思います。


【追記】
当方の環境ではチャート追加の後に待機処理を入れたところjpg画像の保存に成功しました。試していただければと思います。

投稿2025/12/12 09:22

編集2025/12/24 12:34
meg_

総合スコア11082

natufuyu

2025/12/18 05:48

ご回答いただきありがとうございます。 他のファイルで、同じようなコードを書いているものも白紙となります。 また、コードを1行ずつ試したら、上手く行くときといかない時があります。 Application.Wait(now + TimeValue(″00:00:05″))を、コピーやペーストの後に入れてみていますが、上手くいきません。 copypictureがうまくいっていない気がするのですが、このコードは一般的ではないでしょうか?
meg_

2025/12/18 06:32

実体験ではクリップボードの動作が遅くなることがありその場合にコピーが完了する前にペーストのコードが実行されてしまうことが(おそらく)発生していました。PCの状態にもよりますが最初は待機時間を長くして様子を見ながら減らしてみてはどうでしょうか?
natufuyu

2025/12/24 02:13

copypictureのあと、そのままpasteすると貼り付けができるのですが、chartに貼り付けをしようとするとうまくいっていません。 待機時間を3分など長くしても、空白となってしまいます…
guest

0

エクセルのマクロはわからなくなったら「マクロの記録」で処理をキャプチャーしてやり記録の終了まで一連の処理をマクロとして登録できるので、あとは記録したソースを手で修正すればよいでしょう

投稿2025/12/12 07:33

yambejp

総合スコア118276

natufuyu

2025/12/18 05:02

試してみましたが、図の書き出し部分はマクロが書き出されず、無理でした。 selectしたところまでしか記録されずでした。 他にいい方法ご存知でしたらご教示いただけますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問