エクセルのA列に適当な文字列を入力して、次のマクロを実行すると、B列に、A列の文字列を画像化したものが並びますよね。

Sub gazou_sakusei()
Dim bbb As Range
Dim aaa As Variant
ActiveWindow.DisplayGridlines = False
aaa = Cells(Rows.Count, 1).End(xlUp).Address
For Each bbb In Range(Cells(1, 1), aaa)
With bbb
.Columns.AutoFit
.Rows.AutoFit
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.CopyPicture Appearance:=xlScreen, Format:=xlPicture
.Next.Select
End With
Selection.PasteSpecial
Next bbb
End Sub

こうしてできた画像を画像ファイルとして保存することはできないでしょうか。
とりあえずペイントにコピペして名前をつけて保存すればできますが、大量に有ると手間が掛かる上に、なぜか画質も落ちます(エクセル上にあるものとペイントに貼り付けた状態のものを拡大して比べればその差は歴然です)。
もしもそのままの画質で保存できる方法があるならばお教えいただきたいと思います。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

下記の様にすると、emf形式で保存できます。


(途中略)
.CopyPicture Appearance:=xlScreen, Format:=xlPicture
SavePicture CreatePictureFromCB(), "c:\" & bbb.Address(RowAbsolute:=False, ColumnAbsolute:=False) & ".emf"

CreatePictureFromCB()はWin32APIを用いた関数(By Shiraさん)で、
http://web.archive.org/web/20040528030228/http:/ …
等にあります。
    • good
    • 0
この回答へのお礼

ずばりこの方法でできました。
保存パスの部分をいじると、「A列の文字列.emf」で、一度に大量に保存できて目的にぴったり合致します。
これと「iconverter」という、.emf←→.gif相互変換ソフトを使えば完璧です。

どうもありがとうございました。

お礼日時:2009/05/27 02:06

次のようなアドインを利用するとメタファイル(*.wmf、*.emf)で保存でき、拡大しても


ザラつきません。

PICSAV
http://hp.vector.co.jp/authors/VA016119/excel/li …

外部のマクロを使用したくないのでしたら、クリップアートギャラリーを利用して、次の
少々煩雑な操作をすれば可能です。(Excel2000)

1.クリップアートギャラリーを起動して適当なアイテムを開いておきます。
2.文字の入力されたセルを選択してコピーし、クリップアートギャラリーに貼り付けます。
3.クリップアートギャラリーに貼り付けられた画像を選択してコピーし、デスクトップや
 適当なフォルダに貼り付けます。

これで拡張子WMFのメタファイルが作成されますので、ExcelやWord、Powerpointなどから
呼び出すと、枠線のキレイな画像が挿入されます。

なお、いずれの方法で作成した画像も、ドロー系の画像表示をサポートしていないアプリ
ケーションで使用すると、縁がギザギザの画像になってしまいます。

<参考>
http://www.hm.h555.net/~irom/g_about/g_dic_05.htm
    • good
    • 0
この回答へのお礼

サイトに使いたかったので、No.5さんの方法を使わせてもらいました。
ありがとうございました。

お礼日時:2009/05/27 01:59

こんにちわ。


たしかにコピペじゃ駄目みたいですね。(フォントは計算により滑らかさを維持しますが、画像的には100%の時のまま拡大するので、そもそもそれだけのデータしか無いってことだと思いますが・・・)

違う方法を挙げると、表示したい画面をそのまま画像にしたらどうでしょうか?
具体的には納得できる大きさに拡大してから、プリントスクリーンを押して画面全体をコピーし、ペイント(画像ソフトならなんでもよい)に貼り付け、必要な部分を切り取る。

まあ、VBAで画像にした意味は無くなりますが、これしかないんじゃないでしょうか?
    • good
    • 0
この回答へのお礼

No.5さんの方法でできました。
ありがとうございました。

お礼日時:2009/05/27 01:56

解像度の問題は、生成した図のサイズを拡大してからコピーすると、拡大の程度に応じて改善されます。


図のエクスポートの方法は分かりませんでした。
    • good
    • 0
この回答へのお礼

No.5さんの方法でできました。
ありがとうございました。

お礼日時:2009/05/27 01:56

素人のアナログ的な回答で失礼します。



私も少し前に、エクセルで造った画像を文書に貼り付けて印刷したく、
いろいろやってみましたが、
画像ファイルにすると、一気に画質が落ちました。

PDFファイル化して挿入、そのままコピペで貼り付けるなど
やった結果、ワードへそのままコピペが一番高画質でした。
(最初は一太郎に持っていきたかったので。)

今回作った、画像を何に使われたいのか不明ですが、
文書にして印刷でしたら、ワードへ持っていくのがよいかと思います。

他によき方法があれば、逆に教えていただきたいです・・・。
    • good
    • 0
この回答へのお礼

普通のPCにはインストールされてないような文字で綴った文章をサイトに載せようと思ったんです。
No.5さんの方法でできました。
ありがとうございました。

お礼日時:2009/05/27 01:55

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcel2007のVBAで、セル範囲を指定し

Excel2007のVBAで、セル範囲を指定して画像として保存したいです。

たとえば、
Worksheets("Sheet1").Range("A1:B10").CopyPicture xlScreen, xlBitmap
Worksheets("Sheet2").Paste

とすれば、別のシートに指定した範囲を画像にすることはでき、

さらにこれを、
With ActiveWorkbook.PublishObjects.Add(xlSourceSheet, "C:\test.html", _
"Sheet2", "", xlHtmlStatic, "image", "")
.Publish (True)
.AutoRepublish = False
End With

とすれば、画像を指定した場所に保存することはできると思います。

ただ、これだと無駄な処理をしているような気がしますし、実際時間も数秒必要です。

これが、グラフだと
Worksheets("Sheet1").ChartObjects("グラフ1").Chart.Export Filename:="C:\graph.gif", FilterName:="gif"

のように簡単に、しかも短時間で出来ます。

できれば、上記グラフのように、指定したSheetの指定したセル範囲を画像として指定した場所にPNGにて保存したいです。

どなたかご教授いただければ幸いです。

Excel2007のVBAで、セル範囲を指定して画像として保存したいです。

たとえば、
Worksheets("Sheet1").Range("A1:B10").CopyPicture xlScreen, xlBitmap
Worksheets("Sheet2").Paste

とすれば、別のシートに指定した範囲を画像にすることはでき、

さらにこれを、
With ActiveWorkbook.PublishObjects.Add(xlSourceSheet, "C:\test.html", _
"Sheet2", "", xlHtmlStatic, "image", "")
.Publish (True)
.AutoRepublish = False
End With

とすれば、画像を指定した場所に保存す...続きを読む

Aベストアンサー

苦肉の策の中抜き版です。ConvCLSIDに言及してありませんでしたが、コピーされましたでしょうか。
当方では、下記により、Sub testを実行して、選択セルをpngで保存できました。

Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" ( _
Private Declare Function OpenClipboard Lib "user32.dll" ( _
Private Declare Function GetClipboardData Lib "user32.dll" ( _
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function OleCreatePictureIndirect Lib "olepro32.dll" ( _
Private Declare Function GdiplusStartup Lib "gdiplus.dll" _
Private Declare Sub GdiplusShutdown Lib "gdiplus.dll" (ByVal token As Long)
Private Declare Function GdipCreateBitmapFromHBITMAP Lib "gdiplus.dll" _
Private Declare Function GdipDisposeImage Lib "gdiplus.dll" _
Private Declare Function GdipSaveImageToFile Lib "gdiplus.dll" _
Private Declare Function CLSIDFromString Lib "ole32" _

' // Types ----------------------------------------------------------
Private Type PictDesc
'略
End Type
Private Type Guid
'略
End Type

Public Enum GDIPlusStatusConstants
'略
End Enum

Private Type UUID
'略
End Type

Private Type GdiplusStartupInput
'略
End Type

Private Type EncoderParameter
'略
End Type

Private Type EncoderParameters
'略
End Type

' // Constants ------------------------------------------------------
Private Const CF_BITMAP As Long = 2
Private Const CF_PALETTE As Long = 9

Const CLSID_PNG = "{557CF406-1A04-11D3-9A73-0000F81EF32E}"

Sub test()
Dim myPicture As StdPicture
Selection.Copy
Set myPicture = CreatePictureFromClipboard
Call SavePicturePng(myPicture, "c:\cells.png")
End Sub

' // クリップボードのビットマップデータから Picture オブジェクトを作成
Public Function CreatePictureFromClipboard() As StdPicture
'略
End Function

Public Function SavePicturePng(ByVal PicObj As IPictureDisp, ByVal FName As String) As GDIPlusStatusConstants
'略
End Function

Private Function ConvCLSID(ByVal sGuid As String) As UUID
'略
End Function

苦肉の策の中抜き版です。ConvCLSIDに言及してありませんでしたが、コピーされましたでしょうか。
当方では、下記により、Sub testを実行して、選択セルをpngで保存できました。

Private Declare Function IsClipboardFormatAvailable Lib "user32.dll" ( _
Private Declare Function OpenClipboard Lib "user32.dll" ( _
Private Declare Function GetClipboardData Lib "user32.dll" ( _
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function OleCreatePictureIndir...続きを読む


人気Q&Aランキング

おすすめ情報