Excelに貼った画像は、1枚なら右クリックの[図として保存]で保存できます。
まとめて保存したいときは、.xlsxのファイルをZIPとして展開し、中に入っている画像ファイルを取り出します。
この記事のPowerShellのコマンドは、2026年10月18日に、Windows 11のWindows PowerShell 5.1で、PNGとJPEGの画像を4枚入れたテスト用のブックに対して実行して結果を確かめました。
テスト用のブックは、この機にExcelが入っていないため、Pythonのライブラリ(openpyxl 3.1.5)で作ったものです。
Excelで保存したブックや、Excelの[図として保存]の画面では確かめておらず、その部分はMicrosoft公式のサポート記事の記載をもとに書いています。
方法の選び方
| 方法 | 向いている場面 | 注意点 |
|---|---|---|
| 図として保存 | 保存したい画像が数枚だけ | 1枚ずつの操作になる。保存する形式を選べる |
| ZIPとして展開する | 画像が多い、シートが多い | ブックに保存されている状態の画像が出てくる。元のファイル名は分からない |
1枚ずつ保存する(図として保存)
Microsoftのサポート記事「画像やその他のグラフィックを別ファイルとして保存する」によると、Windows版のExcelでは次の手順で画像を別のファイルとして保存できます。
- 保存したい画像を右クリックし、[図として保存]を選ぶ
- [ファイルの種類]で保存する形式を選ぶ
- [ファイル名]に名前を入れるか、表示された名前のままにする
- 保存先のフォルダーを選び、[保存]を選ぶ
同じ記事では、この手順は写真のほか、図形・グラフ・SmartArt・デジタルインク・テキストボックスにも使えるとされています。
選べる形式は、次のとおりです。
| 形式 | 公式の説明(要約) |
|---|---|
| PNG | 画像の一部を透明にできる |
| JPEG | 写真など色の多い画像に向く |
| GIF | 256色まで |
| TIFF | 保存を繰り返しても画質が落ちない形式 |
| ビットマップ(Device-Independent ビットマップ) | ほかのソフトでも同じように表示される |
| Windows メタファイル・拡張 Windows メタファイル | ベクター形式 |
| SVG | 拡大しても画質が落ちない。Microsoft 365ではバージョン1909以降が必要 |
Macでは、Controlキーを押しながら画像をクリックして[図として保存]を選ぶと書かれています。
まとめて取り出す(ZIPとして展開する)
Microsoftのサポート記事「Open XML 形式とファイル名拡張子」によると、.xlsxなどの今のOfficeのファイル形式は、ZIPの圧縮の技術を使って保存されています。
Microsoft Learnの「SpreadsheetML ドキュメントの構造」でも、ブックの拡張子を.xlsxから.zipに変えると、中の構成を見られると説明されています。
そのため、ブックをZIPとして展開すると、中に保存されている画像のファイルを取り出せます。
始める前に
- 元のブックは直接いじらず、コピーを使う
- ブックを閉じてから作業する
- 対象は.xlsxや.xlsmの形式(古い.xlsの形式はZIPではない)
PowerShellで取り出す
PowerShellの Expand-Archive で.xlsxをそのまま展開しようとすると、次のエラーになりました。
.xlsx はサポートされるアーカイブ ファイル形式ではありません。サポートされるアーカイブ ファイル形式は、.zip のみです。そこで、ブックを拡張子.zipの名前で一時フォルダーにコピーしてから展開します。
1行目と2行目のパスを、自分のブックと、展開先にしたいフォルダーに書き換えて実行します。
$book = 'C:\Users\ユーザー名\Documents\商品カタログ.xlsx'
$work = 'C:\Users\ユーザー名\Documents\商品カタログ_中身'
$zip = Join-Path $env:TEMP 'excel-images.zip'
Copy-Item -LiteralPath $book -Destination $zip -Force
Expand-Archive -LiteralPath $zip -DestinationPath $work
Remove-Item -LiteralPath $zip
$images = Get-ChildItem -LiteralPath $work -Recurse -File |
Where-Object { $_.Extension -match '^\.(png|jpe?g|gif|bmp|tiff?|emf|wmf|svg)$' }
$images | Select-Object FullName, Length元のブックは読み取るだけで、変更はしません。
テスト用のブックでは、次の4つのファイルが見つかりました。
| 展開先の中の場所 | 大きさ(バイト) |
|---|---|
| xl\media\image1.png | 666 |
| xl\media\image2.jpeg | 5430 |
| xl\media\image3.png | 316 |
| xl\media\image4.png | 666 |
画像の名前は image1・image2 のような連番になっており、貼り付けたときの元のファイル名は残っていませんでした。
画像が入るフォルダーの名前は、公式ドキュメントでは確かめられなかったため、上のコマンドでは展開したフォルダー全体から画像の拡張子のファイルを探しています。
1つのフォルダーに集める
続けて次を実行すると、見つかった画像を1つのフォルダーにコピーできます。
$dest = 'C:\Users\ユーザー名\Documents\商品カタログ_画像'
New-Item -ItemType Directory -Path $dest | Out-Null
$images | Copy-Item -Destination $dest名前を付け直したいときは、Windowsでファイル名を一括変更する方法の連番の付け方が使えます。
エクスプローラーで取り出す場合
ブックのコピーの拡張子を.xlsxから.zipに変えて開く方法もあります。
拡張子が見えていない場合は、Windows 11で拡張子を表示する方法で表示してから変えてください。
エクスプローラーでの操作は、この記事では画面で確かめていません。
取り出した画像の形式を確かめる
拡張子だけでなく、ファイルの中身が本当にその形式かを確かめたいときは、ファイルの先頭の数バイトを見ます。
次のコマンドは、集めたフォルダーの画像ごとに、中身の形式と縦横のピクセル数を表示します。
Add-Type -AssemblyName System.Drawing
Get-ChildItem -LiteralPath $dest -File | ForEach-Object {
$fs = [IO.File]::OpenRead($_.FullName); $head = New-Object byte[] 4; [void]$fs.Read($head, 0, 4); $fs.Close()
$kind = switch -Regex (($head | ForEach-Object { $_.ToString('X2') }) -join '') {
'^89504E47' { 'PNG' } '^FFD8FF' { 'JPEG' } '^47494638' { 'GIF' } '^424D' { 'BMP' } default { 'その他' } }
$img = [System.Drawing.Image]::FromFile($_.FullName); $w = $img.Width; $h = $img.Height; $img.Dispose()
'{0} {1} {2}x{3}' -f $_.Name, $kind, $w, $h
}テストでは、次のように表示されました。
image1.png PNG 320x200
image2.jpeg JPEG 640x480
image3.png PNG 100x100
image4.png PNG 320x200テスト用のブックに入れた画像と、形式も縦横のピクセル数も同じでした。
元の画像と同じとは限らない
取り出せるのは、ブックの中に保存されている状態の画像です。
Microsoftのサポート記事「Microsoft Office で画像のファイル サイズを小さくする」によると、Microsoft 365の既定の画像の解像度は220ppiで、画像は圧縮されることがあります。
そのため、Excelに貼る前の元の画像より、取り出した画像のほうが小さかったり、画質が落ちていたりすることがあります。
同じ記事では、[ファイル]>[オプション]>[詳細設定]の[イメージのサイズと画質]で、既定の解像度を変えたり、圧縮しない設定にしたりできると説明されています。
元の画質が必要な場合は、ブックから取り出すより、元の画像ファイルを探すほうが確実です。
トリミングで隠した部分が残っていることがある
Microsoftのサポート記事「Office で図をトリミングする」では、トリミングした部分は非表示になるだけで、画像ファイルの一部として残ると説明されています。
ZIPとして展開して取り出した画像には、Excelの画面では見えていなかった部分が写っている可能性があります。
反対に、ほかの人にブックを渡すときに隠したい部分がある場合は、[図の圧縮]で[図のトリミング部分を削除する]を選んでから保存するよう案内されています。
画像をセルの大きさに合わせる方法は、Excelでセルに画像をぴったり合わせる方法にまとめています。
確かめていないこと
- Excelで保存したブックを展開したときの、画像の置き場所とファイル名(テストはPythonで作ったブックで行った)
- 同じ画像を何か所にも貼ったとき、Excelのブックの中で画像が1つにまとまるか(テスト用のブックでは2つの別のファイルとして入っていた)
- セルの中に配置した画像(セル内画像)やIMAGE関数の画像の保存のされ方
- Excelの[図として保存]の画面での操作
- エクスプローラーで拡張子を変えてZIPとして開く操作
参照した資料は、Microsoftサポートの画像やその他のグラフィックを別ファイルとして保存する、Open XML 形式とファイル名拡張子、Microsoft Office で画像のファイル サイズを小さくする、Office で図をトリミングすると、Microsoft LearnのSpreadsheetML ドキュメントの構造です。
