<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Excel自動化 &#8211; biz-tactics</title>
	<atom:link href="https://mashukabu.com/tag/excel%E8%87%AA%E5%8B%95%E5%8C%96/feed/" rel="self" type="application/rss+xml" />
	<link>https://mashukabu.com</link>
	<description></description>
	<lastBuildDate>Sat, 13 Jun 2026 01:09:39 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://mashukabu.com/wp-content/uploads/2022/04/cropped-site-icon-32x32.png</url>
	<title>Excel自動化 &#8211; biz-tactics</title>
	<link>https://mashukabu.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>OfficeスクリプトとVBAの違い｜Microsoft 365で始めるクラウド自動化入門</title>
		<link>https://mashukabu.com/excel-office-scripts-vba-difference/</link>
					<comments>https://mashukabu.com/excel-office-scripts-vba-difference/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Sat, 13 Jun 2026 01:09:39 +0000</pubDate>
				<category><![CDATA[仕事効率化]]></category>
		<category><![CDATA[Excel自動化]]></category>
		<category><![CDATA[Microsoft 365]]></category>
		<category><![CDATA[Office Scripts]]></category>
		<category><![CDATA[Officeスクリプト]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[初心者]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=7984</guid>

					<description><![CDATA[OfficeスクリプトはVBAと何が違うのか、コードなしで試せる「操作の記録」の手順を7ステップで解説。動作環境・言語・保存場所の違いを比較表でわかりやすく整理し、VBAとOffice Scriptsどちらを選ぶべきかの判断基準も紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">「Office Scripts（Officeスクリプト）」という言葉を、最近Excelの画面やネット記事で見かけて気になっていませんか。VBAは何となく知っているけれど、Office Scriptsとの違いがよく分からない。そんな方は多いはずです。</p>



<p class="wp-block-paragraph">「また新しい技術を覚えないといけないのか」と身構えてしまう気持ちも分かります。クラウド移行が進む職場でExcel業務を抱えていると、なおさら不安になりますよね。</p>



<p class="wp-block-paragraph">でも安心してください。Office Scriptsは、プログラミングの知識がなくても「操作の記録」機能で今日から試せます。TypeScriptのコードを一行も書かずに自動化を体験できるのです。</p>



<p class="wp-block-paragraph">この記事では、Office ScriptsとVBAの違いを比較表で整理します。さらに、コードゼロで始める「操作の記録」の手順を7ステップで解説します。読み終えるころには、自分の仕事にどちらが向いているか判断できるようになりますよ。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-1" checked><label class="toc-title" for="toc-checkbox-1">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Office Scripts（Officeスクリプト）とは？</a><ol><li><a href="#toc2" tabindex="0">VBAと何が違うのか：一言で言うと「クラウド対応の自動化ツール」</a></li><li><a href="#toc3" tabindex="0">使えるExcelの種類と必要なプラン（Microsoft 365）</a></li></ol></li><li><a href="#toc4" tabindex="0">VBAとOffice Scriptsの違いを比較</a><ol><li><a href="#toc5" tabindex="0">動作環境・言語・保存場所の違い（比較表）</a></li><li><a href="#toc6" tabindex="0">VBAが向いているケース／Office Scriptsが向いているケース（判断フローチャート）</a></li></ol></li><li><a href="#toc7" tabindex="0">コードゼロで始める「操作の記録」7ステップ</a><ol><li><a href="#toc8" tabindex="0">「自動化」タブの開き方（Web版Excelでの確認手順）</a></li><li><a href="#toc9" tabindex="0">記録開始→操作→停止→スクリプト確認の流れ</a></li><li><a href="#toc10" tabindex="0">保存したスクリプトを再実行する方法</a></li></ol></li><li><a href="#toc11" tabindex="0">Office Scriptsを使う前に知っておきたい注意点</a><ol><li><a href="#toc12" tabindex="0">使えない操作・制限事項</a></li><li><a href="#toc13" tabindex="0">Power Automateとの連携で広がる可能性</a></li></ol></li><li><a href="#toc14" tabindex="0">VBAかOffice Scriptsか：結局どちらを選ぶべきか</a><ol><li><a href="#toc15" tabindex="0">今VBAを使っている人向けの整理</a></li><li><a href="#toc16" tabindex="0">これから自動化を始める人へのおすすめ</a></li></ol></li><li><a href="#toc17" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Office Scripts（Officeスクリプト）とは？</span></h2>



<p class="wp-block-paragraph">Office Scriptsは、Microsoftが提供するExcel向けのクラウド対応自動化ツールです。Web版のExcelをはじめ、複数の環境で繰り返し作業を自動化できます。</p>



<p class="wp-block-paragraph">従来のVBAがExcelデスクトップアプリ内で完結していたのに対し、Office Scriptsはクラウドを前提に設計されています。ここが大きな考え方の違いです。</p>



<p class="wp-block-paragraph">公式情報によると、Office ScriptsはExcel for the web・Excel for Windows（Version 2210以降）・Excel for Macで動作します。記述言語はTypeScriptです（出典: Microsoft Support「Introduction to Office Scripts in Excel」）。</p>



<p class="wp-block-paragraph">TypeScriptと聞くと身構えるかもしれません。後ほど紹介する「操作の記録」を使えば、コードを書かずにスクリプトを作れます。まずは肩の力を抜いて読み進めてみてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc2">VBAと何が違うのか：一言で言うと「クラウド対応の自動化ツール」</span></h3>



<p class="wp-block-paragraph">VBAとOffice Scriptsの違いを一言でまとめると、「動く場所」が決定的に異なります。VBAはあなたのパソコンの中で動くツールです。一方、Office Scriptsはクラウド上で動くツールです。</p>



<p class="wp-block-paragraph">VBAで作ったマクロは、Excelファイル（.xlsm）の中に保存されます。そのファイルを開いたパソコンでしか動きません。手元で完結する分、シンプルで分かりやすい仕組みです。</p>



<p class="wp-block-paragraph">これに対しOffice Scriptsのスクリプトは、ブックの中ではなくOneDriveやSharePointに保存されます。つまりスクリプトとファイルが切り離されているのです（出典: Microsoft Learn「Differences between Office Scripts and VBA macros」）。</p>



<p class="wp-block-paragraph">この違いがあるため、Office Scriptsはブラウザだけで動くWeb版Excelでも使えます。逆にVBAはWeb版Excelでは動作しません。「クラウドで共有しながら自動化したい」という今の働き方に、Office Scriptsはぴったり寄り添う設計なのですね。</p>



<p class="wp-block-paragraph">VBAとマクロそのものの関係をおさらいしたい方は、<a href="https://mashukabu.com/excel-vba-macro-difference/">Excel VBAとマクロの違い｜関係性と活用例を初心者向けに解説</a>もあわせて読むと理解が深まりますよ。</p>



<h3 class="wp-block-heading"><span id="toc3">使えるExcelの種類と必要なプラン（Microsoft 365）</span></h3>



<p class="wp-block-paragraph">ここで重要な注意点があります。Office Scriptsは、誰でも無条件に使えるわけではありません。利用には対応したMicrosoft 365のライセンスが必要です。</p>



<p class="wp-block-paragraph">公式ドキュメントによると、利用できるのは法人向け・教育向けのプランです。具体的な対象は、Office 365 Business、Business Premium、ProPlus、A3、A5、Enterprise E1、E3、E5、F3などです。あわせてOneDrive for Businessも必須です（出典: Microsoft Learn「Platform limits and requirements with Office Scripts」）。</p>



<p class="wp-block-paragraph">つまり、会社や学校で配られているMicrosoft 365のアカウントなら使える可能性が高いです。一方、個人で契約しているMicrosoft 365 Personalなどでは事情が異なります。</p>



<p class="wp-block-paragraph">個人向けプラン（Personal/Family）でのOffice Scripts提供は、2026年5月時点でプレビュー段階です。利用にはMicrosoft 365 Insiderプログラムへの参加が必要とされています（出典: Microsoft Learn「Platform limits and requirements with Office Scripts」）。</p>



<p class="wp-block-paragraph">ですから個人ライセンスの方は、まだ正式には使えない可能性があります。「自分のExcelでは見当たらない」という場合、ライセンスの種類が原因かもしれません。まずは自分のアカウントが法人・教育向けかどうかを確認してみてくださいね。</p>



<h2 class="wp-block-heading"><span id="toc4">VBAとOffice Scriptsの違いを比較</span></h2>



<p class="wp-block-paragraph">ここからは、VBAとOffice Scriptsの違いをより具体的に見ていきます。「結局どこが違うのか」を一覧で押さえると、判断がぐっとラクになります。</p>



<p class="wp-block-paragraph">両者は似ているようで、得意分野がはっきり分かれています。どちらが優れているという話ではありません。用途によって向き不向きがあるだけなのです。</p>



<p class="wp-block-paragraph">まずは項目ごとの違いを表で整理します。そのあとで、どんなケースにどちらが向いているかを掘り下げていきますね。</p>



<h3 class="wp-block-heading"><span id="toc5">動作環境・言語・保存場所の違い（比較表）</span></h3>



<p class="wp-block-paragraph">VBAとOffice Scriptsの主な違いを、表にまとめました。気になる項目から見比べてみてください。</p>



<figure class="wp-block-table"><table><thead><tr><th>比較項目</th><th>Office Scripts</th><th>VBA</th></tr></thead><tbody><tr><td>記述言語</td><td>TypeScript</td><td>Visual Basic for Applications</td></tr><tr><td>保存場所</td><td>OneDrive / SharePoint（ブック外）</td><td>.xlsmファイル内</td></tr><tr><td>Web版Excel（ブラウザ）</td><td>○</td><td>×（動作しない）</td></tr><tr><td>Excel for Windows</td><td>○（Ver.2210以降）</td><td>○</td></tr><tr><td>Excel for Mac</td><td>○</td><td>○</td></tr><tr><td>追加ライセンス</td><td>×（法人・教育M365必須）</td><td>○（Excelに内蔵・不要）</td></tr><tr><td>アクセス範囲</td><td>ワークブック内のみ</td><td>デスクトップ全体（COM/OLE等）</td></tr><tr><td>Power Automate連携</td><td>○</td><td>×（連携不可）</td></tr><tr><td>イベント駆動（自動起動）</td><td>×（手動かフロー経由のみ）</td><td>○</td></tr><tr><td>共有ブック・組織共有</td><td>○（OneDriveで共有）</td><td>△（.xlsmファイル共有のみ）</td></tr><tr><td>コードゼロで作成</td><td>○（操作の記録）</td><td>○（マクロの記録）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">この表から、いくつかの特徴が読み取れます。Office Scriptsはクラウドと共有に強く、VBAは手元のパソコンでの細かい制御に強い、という構図です。</p>



<p class="wp-block-paragraph">特に注目したいのが「アクセス範囲」の行です。VBAはExcelと同じ権限でパソコン全体を操作できます。ファイルを別の場所にコピーしたり、他のアプリを操作したりも可能です。</p>



<p class="wp-block-paragraph">一方Office Scriptsは、原則として開いているワークブックの中だけを操作します。デスクトップへのアクセスはできません（出典: Microsoft Learn「Differences between Office Scripts and VBA macros」）。一見すると制限に思えますが、これはクラウドで安全に動かすための設計でもあるのですよ。</p>



<h3 class="wp-block-heading"><span id="toc6">VBAが向いているケース／Office Scriptsが向いているケース（判断フローチャート）</span></h3>



<p class="wp-block-paragraph">「結局、自分はどちらを使えばいいの」という疑問に答えるため、判断の流れを整理しました。下のフローチャートを順番にたどってみてください。</p>



<pre class="wp-block-code"><code>【自動化ツールの選び方フローチャート】

Q1. その自動化は誰がどこで使う？
 ├─ 自分のパソコンだけで完結する
 │    │
 │    Q2. パソコン内の他ファイルや他アプリも操作したい？
 │     ├─ はい → ★VBA を継続・採用
 │     └─ いいえ
 │          │
 │          Q3. Web版Excelやブラウザでも動かしたい？
 │           ├─ はい → ★Office Scripts を検討
 │           └─ いいえ → ★VBA でも Office Scripts でもOK
 │
 └─ チームでクラウド共有しながら使う
      │
      Q4. 決まった時間やメール受信で自動実行したい？
       ├─ はい → ★Office Scripts ＋ Power Automate
       └─ いいえ → ★Office Scripts を検討</code></pre>



<p class="wp-block-paragraph">このフローの考え方はシンプルです。「手元のパソコンで完結し、他のアプリも操作したい」ならVBAが向いています。長年VBAで業務を回しているなら、無理に乗り換える必要はありません。</p>



<p class="wp-block-paragraph">逆に「チームで共有したい」「ブラウザでも動かしたい」「定時に自動実行したい」ならOffice Scriptsが向いています。特に決まった時間に自動実行したい場合は、Power Automateとの連携が効果を発揮します。</p>



<p class="wp-block-paragraph">VBAは「動かすパソコンが決まっている個人作業」に強いツールです。VBAで実際にどんな自動化ができるかは、<a href="https://mashukabu.com/excel-vba-automation-guide/">ExcelのVBAで仕事を自動化する方法｜実務シーン別に解説</a>で具体例を確認できます。あわせて読むと、両者のイメージがくっきりしますよ。</p>



<p class="wp-block-paragraph">なお、両方とも「コードを書かずに記録だけで作る」入口を持っています。VBA側の入口である「マクロの記録」については、<a href="https://mashukabu.com/howto-macro-recording/">Excelのマクロの記録の使い方｜ボタン操作だけで自動化する方法</a>で詳しく解説しています。Office Scriptsの「操作の記録」と見比べると、考え方の共通点が見えてきますね。</p>



<h2 class="wp-block-heading"><span id="toc7">コードゼロで始める「操作の記録」7ステップ</span></h2>



<p class="wp-block-paragraph">ここからが、この記事のいちばんお伝えしたい部分です。Office Scriptsは「操作の記録（Action Recorder）」を使えば、コードを一行も書かずにスクリプトを作れます。</p>



<p class="wp-block-paragraph">仕組みはVBAの「マクロの記録」とよく似ています。あなたがExcelで行った操作を裏側で記録し、自動的にTypeScriptのコードに変換してくれるのです（出典: Microsoft Support「Record your actions as Office Scripts」）。</p>



<p class="wp-block-paragraph">ですから「TypeScriptが書けないと無理」と諦める必要はまったくありません。まずは記録して、再生する。それだけで自動化の第一歩を踏み出せます。</p>



<p class="wp-block-paragraph">これから7つのステップに分けて、画面の流れに沿って解説していきますね。</p>



<h3 class="wp-block-heading"><span id="toc8">「自動化」タブの開き方（Web版Excelでの確認手順）</span></h3>



<p class="wp-block-paragraph">まずは操作を記録するための「自動化」タブを開きます。これがOffice Scriptsの入口になります。</p>



<p class="wp-block-paragraph">ブラウザでWeb版Excelを開き、自動化したいブックを表示してください。上部のリボンを見ると、「ホーム」や「挿入」と並んで「自動化」というタブがあります。これをクリックします。</p>



<p class="wp-block-paragraph">もし「自動化」タブが見当たらない場合は、ライセンスや管理者設定が原因の可能性があります。前章で触れたとおり、法人・教育向けのMicrosoft 365でないと表示されないことがあります。</p>



<p class="wp-block-paragraph">またWeb版Excelで使うには、ブラウザのサードパーティCookieを有効にしておく必要があります（出典: Microsoft Learn「Platform limits and requirements with Office Scripts」）。タブが出ない場合は、これらの設定も一度見直してみてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc9">記録開始→操作→停止→スクリプト確認の流れ</span></h3>



<p class="wp-block-paragraph">「自動化」タブを開けたら、いよいよ記録を始めます。ここからの4ステップが操作の記録の中心部分です。</p>



<p class="wp-block-paragraph">まずステップ2として、「自動化」タブの中にある「操作を記録」（記録から作成）をクリックします。すると画面の右側にタスクペインが開きます。ここに、これから行う操作が一覧で記録されていきます。</p>



<p class="wp-block-paragraph">次にステップ3として、自動化したい操作を普段どおりに実行します。たとえばセルに文字を入力したり、見出しに色を付けたり、表をテーブルに変換したりといった操作です。行った操作はリアルタイムでタスクペインに表示されていきます。</p>



<p class="wp-block-paragraph">操作が終わったら、ステップ4として「停止」ボタンをクリックします。これで記録は終了です。緊張せず、普段のExcel操作をするだけで大丈夫ですよ。</p>



<p class="wp-block-paragraph">そしてステップ5として、生成されたスクリプトを確認します。タスクペインには、あなたの操作がTypeScriptのコードに変換されて表示されています。たとえば、こんなイメージのコードが自動で作られます。</p>



<pre class="wp-block-code"><code>function main(workbook: ExcelScript.Workbook) {
  // 選択中のシートを取得
  let sheet = workbook.getActiveWorksheet();
  // A1セルに「売上集計」と入力
  sheet.getRange(&quot;A1&quot;).setValue(&quot;売上集計&quot;);
  // A1セルの文字を太字にする
  sheet.getRange(&quot;A1&quot;).getFormat().getFont().setBold(true);
}</code></pre>



<p class="wp-block-paragraph">このコードは、自分で書く必要はまったくありません。「ふーん、こういう形になるんだ」と眺めるだけで十分です。内容を理解できなくても、記録さえできていれば問題ありませんよ。</p>



<p class="wp-block-paragraph">なお、操作の記録には2つのモードがあります。特定のセルアドレスを固定して記録する「絶対モード」と、開始セルからの相対位置で記録する「相対モード」です（出典: Microsoft Support「Record your actions as Office Scripts」）。最初は絶対モードのままで問題ありません。慣れてきたら使い分けてみてください。</p>



<h3 class="wp-block-heading"><span id="toc10">保存したスクリプトを再実行する方法</span></h3>



<p class="wp-block-paragraph">最後の2ステップで、作ったスクリプトを保存して再利用します。ここまで来れば、もう自動化はあなたのものです。</p>



<p class="wp-block-paragraph">ステップ6として、スクリプトに分かりやすい名前を付けて保存します。デフォルトでは「Script 1」「Script 2」という名前が付いています。タスクペインの「名前の変更」から、「売上集計フォーマット」など内容が分かる名前に変えておきましょう。スクリプトはOneDriveに自動保存されます。</p>



<p class="wp-block-paragraph">ステップ7として、「実行」ボタンを押して動作を確認します。記録したとおりの操作が、一瞬で再現されれば成功です。手作業なら何分もかかる処理が、ワンクリックで終わるようになります。</p>



<p class="wp-block-paragraph">一度保存したスクリプトは、以降いつでも「自動化」タブから呼び出して実行できます。毎朝の定型処理や、月末の集計フォーマット整えなど、繰り返す作業に向いています。</p>



<p class="wp-block-paragraph">ここまでの流れを整理すると、(1)自動化タブを開く、(2)記録を開始、(3)操作する、(4)停止する、(5)スクリプトを確認、(6)名前を付けて保存、(7)実行で確認、という7ステップでした。コードを書かずにここまでできるのは、うれしいポイントですよね。</p>



<h2 class="wp-block-heading"><span id="toc11">Office Scriptsを使う前に知っておきたい注意点</span></h2>



<p class="wp-block-paragraph">便利なOffice Scriptsですが、万能ではありません。VBAでできていたことが、Office Scriptsではできない場合もあります。</p>



<p class="wp-block-paragraph">事前に「できないこと」を知っておくと、導入してから「あれ、動かない」と戸惑わずに済みます。ここでは主な制限事項と、逆に可能性が広がるポイントを紹介します。</p>



<p class="wp-block-paragraph">落ち込む必要はありません。制限を理解した上で使えば、Office Scriptsは十分に頼れる相棒になりますよ。</p>



<h3 class="wp-block-heading"><span id="toc12">使えない操作・制限事項</span></h3>



<p class="wp-block-paragraph">まず押さえておきたいのが、Office Scriptsはワークブックの中しか操作できないという点です。VBAのようにパソコン内の他のファイルを開いたり、別アプリを動かしたりはできません（出典: Microsoft Learn「Differences between Office Scripts and VBA macros」）。</p>



<p class="wp-block-paragraph">次に、イベント駆動に対応していない点も覚えておきましょう。VBAでは「セルが変更されたら自動で動く」といった仕掛けが作れます。一方Office Scriptsは、手動実行かPower Automateフロー経由でしか起動できません（出典: Microsoft Learn「Differences between Office Scripts and VBA macros」）。</p>



<p class="wp-block-paragraph">データ量にも上限があります。Web版Excelでは、リクエスト・レスポンスは5MB以内です。扱える範囲は500万セル以内とされています（出典: Microsoft Learn「Platform limits and requirements with Office Scripts」）。通常の事務作業なら十分な余裕ですが、巨大なデータを扱う場合は意識しておきましょう。</p>



<p class="wp-block-paragraph">利用環境にも注意が必要です。TeamsでOffice Scriptsを使う場合、対応するのはブラウザ版のTeamsだけです。Windows・Mac・スマホアプリ版のTeamsでは使えません（出典: Microsoft Learn「Platform limits and requirements with Office Scripts」）。これらは制約ではありますが、知っていれば慌てずに対処できますね。</p>



<h3 class="wp-block-heading"><span id="toc13">Power Automateとの連携で広がる可能性</span></h3>



<p class="wp-block-paragraph">ここまで制限の話が続きましたが、Office Scriptsには大きな武器があります。それがPower Automateとの連携です。これはVBAには真似のできない強みです。</p>



<p class="wp-block-paragraph">Power Automateと組み合わせると、スクリプトを決まった時間に自動実行できます。たとえば「毎朝9時に売上ファイルを自動で集計する」といった運用が可能になります。メール受信などのイベントをきっかけに動かすこともできます（出典: Microsoft Learn「Differences between Office Scripts and VBA macros」）。</p>



<p class="wp-block-paragraph">つまり、手元のパソコンを開いていなくてもクラウド上で処理が走るのです。VBAは誰かがファイルを開いてマクロを実行しないと動きませんでした。この差は、定型業務の自動化において非常に大きいです。</p>



<p class="wp-block-paragraph">ただし連携にもルールがあります。Power Automate経由の実行は、1ユーザーあたり1日1,600回までです。同期操作のタイムアウトは120秒という制限もあります（出典: Microsoft Learn「Platform limits and requirements with Office Scripts」）。また、スクリプト内から外部APIを呼び出す処理は失敗します。最初のうちはこれらの上限に達することはまずないので、まずは気軽に試してみてくださいね。</p>



<h2 class="wp-block-heading"><span id="toc14">VBAかOffice Scriptsか：結局どちらを選ぶべきか</span></h2>



<p class="wp-block-paragraph">ここまで読んで、両者の違いはだいぶ見えてきたのではないでしょうか。最後に「自分はどう動けばいいか」を立場別に整理します。</p>



<p class="wp-block-paragraph">大切なのは、どちらか一方が絶対の正解ではないという点です。今の働き方とこれからの方向性によって、最適な答えは変わります。</p>



<p class="wp-block-paragraph">あなたの状況に近いほうを読んで、次の一歩を決める参考にしてくださいね。</p>



<h3 class="wp-block-heading"><span id="toc15">今VBAを使っている人向けの整理</span></h3>



<p class="wp-block-paragraph">すでにVBAで業務を回している方は、慌てて乗り換える必要はありません。デスクトップで完結する自動化なら、VBAは今も現役で通用するツールです。</p>



<p class="wp-block-paragraph">特に、パソコン内の複数ファイルをまたいだ処理や、他アプリとの連携が必要な業務はVBAの独壇場です。これらはOffice Scriptsには真似できません。今の資産を捨てる必要はないのです。</p>



<p class="wp-block-paragraph">検討すべきタイミングは、業務がクラウド共有に移行したときです。「ファイルをチームで共同編集するようになった」「Web版Excelで作業する場面が増えた」。こうした変化があれば、その業務だけOffice Scriptsへの移行を検討する価値があります。</p>



<p class="wp-block-paragraph">つまりVBAとOffice Scriptsは「全面的に乗り換える」ものではありません。業務の性質ごとに使い分ければよいのです。VBAの理解をさらに深めたい方は、<a href="https://mashukabu.com/excel-vba-learning-roadmap/">Excel VBA学習ロードマップ｜初心者が挫折しない勉強の順番を解説</a>も参考になりますよ。</p>



<h3 class="wp-block-heading"><span id="toc16">これから自動化を始める人へのおすすめ</span></h3>



<p class="wp-block-paragraph">これから自動化を学び始める方には、まず自分の環境を確認することをおすすめします。法人・教育向けのMicrosoft 365を使っているなら、Office Scriptsの「操作の記録」から始めるのが手軽です。</p>



<p class="wp-block-paragraph">理由は、クラウド前提の今の働き方と相性がよいからです。ブラウザで動き、チームで共有でき、Power Automateで自動実行までできます。これから長く使うことを考えれば、将来性のある選択肢といえます。</p>



<p class="wp-block-paragraph">一方、個人向けライセンスを使っている場合や、デスクトップ完結の作業が中心の場合はVBAから入るのも良い選択です。VBAは追加ライセンス不要で、すぐに始められます。学習情報も豊富です。VBAでの最初の一歩は、<a href="https://mashukabu.com/excel-vba-macro-beginners-guide/">Excel VBAマクロ入門｜初めてのマクロを作る手順とよく使うコード10選</a>が分かりやすいですよ。</p>



<p class="wp-block-paragraph">迷ったら、まずは手を動かしてみるのがいちばんです。Office Scriptsの「操作の記録」なら、コードを書かずに数分で自動化を体験できます。「自分にもできた」という小さな成功体験が、次へのやる気につながります。</p>



<h2 class="wp-block-heading"><span id="toc17">まとめ</span></h2>



<p class="wp-block-paragraph">ここまで、Office ScriptsとVBAの違いを比較し、「操作の記録」の7ステップを解説してきました。最後に要点を振り返りましょう。</p>



<ul class="wp-block-list"><li>Office Scriptsはクラウド対応の自動化ツールで、Web版Excelでも動く</li><li>VBAは手元のパソコンで完結し、他アプリ操作にも強い</li><li>利用には法人・教育向けMicrosoft 365が必要（個人プランは2026年5月時点でプレビュー段階）</li><li>「操作の記録」を使えばTypeScriptのコードを書かずに自動化できる</li><li>クラウド共有や定時自動実行が必要ならOffice Scripts、デスクトップ完結ならVBAが向いている</li></ul>



<p class="wp-block-paragraph">新しいツールと聞くと身構えてしまいますが、Office Scriptsは思ったよりずっと手軽です。まずは「自動化」タブを開いて、簡単な操作を記録するところから試してみてください。</p>



<p class="wp-block-paragraph">VBAとOffice Scriptsは、どちらが正解という関係ではありません。あなたの仕事のスタイルに合わせて、上手に使い分けていきましょう。この記事が、その判断のお役に立てたならうれしいですよ。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/excel-office-scripts-vba-difference/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VBAでシートをPDF出力・自動保存する方法｜ExportAsFixedFormatで請求書・報告書を自動化</title>
		<link>https://mashukabu.com/vba-export-pdf/</link>
					<comments>https://mashukabu.com/vba-export-pdf/#respond</comments>
		
		<dc:creator><![CDATA[まっしゅ]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 21:59:58 +0000</pubDate>
				<category><![CDATA[VBA・マクロ]]></category>
		<category><![CDATA[Excel自動化]]></category>
		<category><![CDATA[ExportAsFixedFormat]]></category>
		<category><![CDATA[PDF出力]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[月次報告]]></category>
		<category><![CDATA[請求書]]></category>
		<guid isPermaLink="false">https://mashukabu.com/?p=8003</guid>

					<description><![CDATA[VBAでExcelシートをPDF出力・自動保存する方法を解説。ExportAsFixedFormatの使い方、保存先フォルダ指定、ファイル名への日付自動付与、複数シート一括PDF化、印刷範囲の指定まで実用サンプル付きで紹介します。]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">毎月、請求書や月次報告書を1枚ずつPDFに保存していませんか。「ファイル」→「エクスポート」→「PDFの作成」→保存先選択→ファイル名入力。1枚なら数十秒ですが、取引先10社・部署5部門となると、これだけで30分が消えていきます。</p>



<p class="wp-block-paragraph">この作業はVBAの <code>ExportAsFixedFormat</code> メソッドで丸ごと自動化できます。ボタン1つで保存先フォルダの作成、日付入りファイル名の生成、印刷範囲の制御まで自動でこなせます。</p>



<p class="wp-block-paragraph">この記事では、<code>ExportAsFixedFormat</code> の基本構文から実用サンプルまでを順に解説します。具体的には、保存先フォルダの自動作成、ファイル名への日付付与、複数シート一括PDF化、印刷範囲の指定です。請求書や月次報告書の自動保存テンプレートも掲載しているので、明日からそのまま現場で使えます。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">VBAでPDF出力するExportAsFixedFormatとは？</a><ol><li><a href="#toc2" tabindex="0">ExportAsFixedFormatでできること</a></li><li><a href="#toc3" tabindex="0">手動PDF保存との違い</a></li></ol></li><li><a href="#toc4" tabindex="0">ExportAsFixedFormatの基本構文</a><ol><li><a href="#toc5" tabindex="0">構文の基本形</a></li><li><a href="#toc6" tabindex="0">主要な引数一覧</a></li><li><a href="#toc7" tabindex="0">VBE（Visual Basic Editor）の起動とコードの準備</a></li></ol></li><li><a href="#toc8" tabindex="0">VBAで単一シートをPDF出力する基本コード</a><ol><li><a href="#toc9" tabindex="0">シート名で出力対象を指定する</a></li></ol></li><li><a href="#toc10" tabindex="0">ファイル名に日付を自動付与する</a><ol><li><a href="#toc11" tabindex="0">Format関数で日付を文字列に変換する</a></li><li><a href="#toc12" tabindex="0">日付フォーマットの主な書式</a></li></ol></li><li><a href="#toc13" tabindex="0">保存先フォルダを自動作成する</a><ol><li><a href="#toc14" tabindex="0">MkDir関数でフォルダを作成する</a></li><li><a href="#toc15" tabindex="0">階層フォルダを一気に作成するMkDirRecursive</a></li></ol></li><li><a href="#toc16" tabindex="0">複数シートを一括PDF出力する</a><ol><li><a href="#toc17" tabindex="0">For Eachで全シートを個別PDF化する</a></li><li><a href="#toc18" tabindex="0">特定シートだけを1つのPDFにまとめる</a></li><li><a href="#toc19" tabindex="0">シート名でフィルタしてPDF化する</a></li></ol></li><li><a href="#toc20" tabindex="0">印刷範囲を指定してPDF化する</a><ol><li><a href="#toc21" tabindex="0">PrintAreaで印刷範囲を設定する</a></li><li><a href="#toc22" tabindex="0">動的に印刷範囲を決める（最終行まで）</a></li><li><a href="#toc23" tabindex="0">印刷範囲を無視してシート全体をPDF化する</a></li></ol></li><li><a href="#toc24" tabindex="0">実用サンプル: 請求書を取引先別にPDF自動保存</a><ol><li><a href="#toc25" tabindex="0">想定シナリオ</a></li><li><a href="#toc26" tabindex="0">完成コード</a></li></ol></li><li><a href="#toc27" tabindex="0">よくあるエラーと対処法</a><ol><li><a href="#toc28" tabindex="0">実行時エラー&#8217;1004&#8242;: ドキュメントが保存されませんでした</a></li><li><a href="#toc29" tabindex="0">PDFが空白・1ページ目しか出ない</a></li><li><a href="#toc30" tabindex="0">文字が小さすぎてPDFが読めない</a></li><li><a href="#toc31" tabindex="0">実行時エラー&#8217;9&#8242;: インデックスが有効範囲にありません</a></li><li><a href="#toc32" tabindex="0">PDFの画質を変えたい</a></li></ol></li><li><a href="#toc33" tabindex="0">ExportAsFixedFormatと他の保存方法の使い分け</a></li><li><a href="#toc34" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">VBAでPDF出力するExportAsFixedFormatとは？</span></h2>



<p class="wp-block-paragraph"><code>ExportAsFixedFormat</code> は、ExcelのワークシートやブックをPDFまたはXPS形式で書き出すVBAメソッドです。Excel 2007以降のすべてのバージョンで標準搭載されており、追加のアドインやライブラリは不要です。</p>



<p class="wp-block-paragraph">「ファイル」→「エクスポート」→「PDFの作成」と同じ動作を、コードから自動実行できると考えてください。手動操作とまったく同じレイアウト・印刷品質でPDFを生成できます。</p>



<h3 class="wp-block-heading"><span id="toc2">ExportAsFixedFormatでできること</span></h3>



<p class="wp-block-paragraph">このメソッド1つで、PDF保存に関するほとんどの操作を自動化できます。</p>



<ul class="wp-block-list"><li>単一シートをPDF化して任意フォルダへ保存</li><li>ブック全体（複数シート）を1つのPDFにまとめて保存</li><li>印刷範囲（PrintArea）で指定した部分だけをPDF化</li><li>ファイル名にシート名・日付・取引先名などを自動で組み込む</li><li>保存先フォルダを動的に作成（年月別・部署別など）</li><li>パスワード設定、ページ範囲指定、画質指定</li></ul>



<p class="wp-block-paragraph">手動でPDF保存する場合と違って、保存先・ファイル名・対象範囲がコードに固定化されます。そのため、毎回同じ品質でアウトプットでき、担当者が変わってもファイル名の表記ゆれが発生しません。</p>



<h3 class="wp-block-heading"><span id="toc3">手動PDF保存との違い</span></h3>



<p class="wp-block-paragraph">手動とVBAでは、所要時間と再現性が決定的に違います。</p>



<figure class="wp-block-table"><table><thead><tr><th>項目</th><th>手動操作</th><th>VBA（ExportAsFixedFormat）</th></tr></thead><tbody><tr><td>1ファイル保存時間</td><td>30秒〜1分</td><td>0.5秒未満</td></tr><tr><td>10ファイル保存時間</td><td>5〜10分</td><td>約3秒</td></tr><tr><td>ファイル名の統一性</td><td>担当者依存で揺れる</td><td>コードで完全統一</td></tr><tr><td>保存先フォルダ作成</td><td>手動でmkdir</td><td>コードで自動作成</td></tr><tr><td>印刷範囲指定</td><td>毎回設定</td><td>コードで固定</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">10ファイル以上のPDF出力を月次で行う作業なら、初回1時間の自動化で年間60時間以上が浮きます。</p>



<h2 class="wp-block-heading"><span id="toc4">ExportAsFixedFormatの基本構文</span></h2>



<p class="wp-block-paragraph"><code>ExportAsFixedFormat</code> メソッドは、ワークシートやブックなど、PDF化したいオブジェクトに対して呼び出します。</p>



<h3 class="wp-block-heading"><span id="toc5">構文の基本形</span></h3>



<p class="wp-block-paragraph">最もシンプルな書き方は次のとおりです。</p>



<pre class="wp-block-code"><code>Worksheets(&quot;Sheet1&quot;).ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:=&quot;C:PDFsample.pdf&quot;</code></pre>



<p class="wp-block-paragraph"><code>Type:=xlTypePDF</code> でPDF形式を指定し、<code>Filename</code> で保存先のフルパスを渡します。たったこれだけで、Sheet1がPDFとして指定パスに保存されます。</p>



<h3 class="wp-block-heading"><span id="toc6">主要な引数一覧</span></h3>



<p class="wp-block-paragraph"><code>ExportAsFixedFormat</code> メソッドにはオプション引数が複数あります。実務でよく使うのは次の6つです。</p>



<figure class="wp-block-table"><table><thead><tr><th>引数名</th><th>役割</th><th>主な値</th></tr></thead><tbody><tr><td>Type</td><td>出力形式</td><td>xlTypePDF / xlTypeXPS</td></tr><tr><td>Filename</td><td>保存先フルパス</td><td>&#8220;C:PDFsample.pdf&#8221;</td></tr><tr><td>Quality</td><td>画質</td><td>xlQualityStandard / xlQualityMinimum</td></tr><tr><td>IncludeDocProperties</td><td>プロパティ埋込</td><td>True / False</td></tr><tr><td>IgnorePrintAreas</td><td>印刷範囲を無視</td><td>True / False（既定False）</td></tr><tr><td>OpenAfterPublish</td><td>保存後にPDFを開く</td><td>True / False（既定False）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><code>IgnorePrintAreas</code> は重要です。既定値の <code>False</code> だと印刷範囲（PrintArea）の設定が反映されます。<code>True</code> を指定するとシート全体がPDF化されます。</p>



<h3 class="wp-block-heading"><span id="toc7">VBE（Visual Basic Editor）の起動とコードの準備</span></h3>



<p class="wp-block-paragraph">VBAコードを実行するには、まずVBEを開いて標準モジュールにコードを貼り付けます。</p>



<ol class="wp-block-list"><li>Excelを開いた状態で <code>Alt + F11</code> キーを押す（VBEが起動）</li><li>リボン経由の場合は「開発」タブ→「Visual Basic」をクリック</li><li>「開発」タブが表示されていない場合は、「ファイル」→「オプション」→「リボンのユーザー設定」で「開発」にチェック</li><li>VBE画面で「挿入」→「標準モジュール」をクリック</li><li>開いたコードウィンドウに本記事のサンプルを貼り付けて <code>F5</code> で実行</li></ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>ファイルは「Excel マクロ有効ブック（.xlsm）」または「Excel バイナリブック（.xlsb）」で保存してください。通常の <code>.xlsx</code> ではマクロが保存されません。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc8">VBAで単一シートをPDF出力する基本コード</span></h2>



<p class="wp-block-paragraph">まずは1枚のシートをPDF化する最小構成のコードから始めます。</p>



<pre class="wp-block-code"><code>Sub Sample_ExportSinglePDF()
    '--- 保存先パスを指定 ---
    Dim sPath As String
    sPath = &quot;C:PDFreport.pdf&quot;

    '--- アクティブシートをPDF出力 ---
    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=sPath, _
        Quality:=xlQualityStandard, _
        OpenAfterPublish:=False

    MsgBox &quot;PDF出力完了: &quot; &amp; sPath
End Sub</code></pre>



<p class="wp-block-paragraph">このコードを実行すると、現在表示中のシートが <code>C:PDFreport.pdf</code> として保存されます。<code>OpenAfterPublish:=False</code> にしておけば、PDFが自動で開くことがなく、バッチ処理向きの動作になります。</p>



<h3 class="wp-block-heading"><span id="toc9">シート名で出力対象を指定する</span></h3>



<p class="wp-block-paragraph">特定のシートだけをPDF化したい場合は、<code>ActiveSheet</code> の代わりに <code>Worksheets("シート名")</code> で対象を明示します。</p>



<pre class="wp-block-code"><code>Sub Sample_ExportNamedSheet()
    '--- シート名で出力対象を指定 ---
    Dim sBefore As String
    Dim sAfter As String
    sBefore = &quot;請求書ひな形&quot;
    sAfter = &quot;C:PDF請求書.pdf&quot;

    Worksheets(sBefore).ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=sAfter

    MsgBox &quot;出力: &quot; &amp; sBefore &amp; &quot; → &quot; &amp; sAfter
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Worksheets("請求書ひな形")</code> のようにシートを明示すると、どのシートがアクティブでも常に同じシートをPDF化できます。複数シートを処理するブックでは、必ずこの形式で対象を指定してください。</p>



<h2 class="wp-block-heading"><span id="toc10">ファイル名に日付を自動付与する</span></h2>



<p class="wp-block-paragraph">毎日・毎月の繰り返し処理では、ファイル名に日付を入れて履歴を残すのが定石です。同名ファイルの上書きを防げます。</p>



<h3 class="wp-block-heading"><span id="toc11">Format関数で日付を文字列に変換する</span></h3>



<p class="wp-block-paragraph"><code>Format</code> 関数は、日付や数値を任意の書式の文字列に変換するVBA組み込み関数です。</p>



<pre class="wp-block-code"><code>Sub Sample_DatedFilename()
    '--- 日付付きファイル名を生成 ---
    Dim sToday As String
    Dim sPath As String
    sToday = Format(Date, &quot;yyyymmdd&quot;)
    sPath = &quot;C:PDF日報_&quot; &amp; sToday &amp; &quot;.pdf&quot;

    '--- アクティブシートを日付付きファイル名で出力 ---
    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=sPath

    MsgBox &quot;保存完了: &quot; &amp; sPath
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Format(Date, "yyyymmdd")</code> は、今日の日付を <code>20260509</code> のような8桁文字列に変換します。これをファイル名に組み込むと、<code>日報_20260509.pdf</code> というファイルが生成されます。</p>



<h3 class="wp-block-heading"><span id="toc12">日付フォーマットの主な書式</span></h3>



<p class="wp-block-paragraph"><code>Format</code> 関数の書式指定は、用途によって使い分けます。</p>



<figure class="wp-block-table"><table><thead><tr><th>書式指定</th><th>出力例</th><th>用途</th></tr></thead><tbody><tr><td>yyyymmdd</td><td>20260509</td><td>日次ファイル（短縮）</td></tr><tr><td>yyyy-mm-dd</td><td>2026-05-09</td><td>日次ファイル（区切り付き）</td></tr><tr><td>yyyymm</td><td>202605</td><td>月次ファイル</td></tr><tr><td>yyyy年m月</td><td>2026年5月</td><td>報告書名向け</td></tr><tr><td>yyyymmdd_hhmmss</td><td>20260509_143052</td><td>同日複数回保存（時刻付き）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">同じ日に複数回PDFを出力する可能性があるなら、<code>hhmmss</code>（時刻）まで含めるとファイルがぶつかりません。<code>Format(Now, "yyyymmdd_hhmmss")</code> のように <code>Now</code> 関数を使います。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>ファイル名にシート名を含めたい場合は、<code>ActiveSheet.Name & "_" & sToday & ".pdf"</code> のように連結します。シートを追加するたびに自動で命名されるため、保守性が高くなります。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc13">保存先フォルダを自動作成する</span></h2>



<p class="wp-block-paragraph">「保存先フォルダが存在しないとエラーになる」のはVBA初心者がつまずきやすいポイントです。フォルダを動的に作成する処理を入れておくと、毎月新しいフォルダが必要になっても安全に運用できます。</p>



<h3 class="wp-block-heading"><span id="toc14">MkDir関数でフォルダを作成する</span></h3>



<p class="wp-block-paragraph">VBAの <code>MkDir</code> 関数は、指定パスにフォルダを作成します。ただし、すでに存在するフォルダに <code>MkDir</code> を実行するとエラーになります。<code>Dir</code> 関数で存在チェックしてから作成するのが定石です。</p>



<pre class="wp-block-code"><code>Sub Sample_CreateFolderAndExport()
    '--- 保存先フォルダのパスを生成 ---
    Dim sFolder As String
    Dim sFile As String
    Dim sToday As String
    sToday = Format(Date, &quot;yyyymm&quot;)
    sFolder = &quot;C:PDF&quot; &amp; sToday
    sFile = sFolder &amp; &quot;日報_&quot; &amp; Format(Date, &quot;yyyymmdd&quot;) &amp; &quot;.pdf&quot;

    '--- フォルダが存在しなければ作成 ---
    If Dir(sFolder, vbDirectory) = &quot;&quot; Then
        MkDir sFolder
    End If

    '--- PDFを出力 ---
    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=sFile

    MsgBox &quot;保存完了: &quot; &amp; sFile
End Sub</code></pre>



<p class="wp-block-paragraph">このコードでは、<code>C:PDF202605</code> という年月別フォルダを自動作成し、その中に日付付きPDFを保存します。月が変わるたびに自動で新しいフォルダが作られるため、年間ファイル管理がスッキリします。</p>



<h3 class="wp-block-heading"><span id="toc15">階層フォルダを一気に作成するMkDirRecursive</span></h3>



<p class="wp-block-paragraph"><code>MkDir</code> は1階層しか作れません。<code>C:PDF2026 5</code> のような多階層をまとめて作りたい場合は、自作関数を1つ用意しておくと便利です。</p>



<pre class="wp-block-code"><code>Sub MkDirRecursive(ByVal sPath As String)
    '--- 階層フォルダを再帰的に作成 ---
    Dim sParent As String

    If Dir(sPath, vbDirectory) &lt;&gt; &quot;&quot; Then Exit Sub

    sParent = Left(sPath, InStrRev(sPath, &quot;&quot;) - 1)
    If Len(sParent) &gt; 0 Then
        MkDirRecursive sParent
    End If
    MkDir sPath
End Sub

Sub Sample_DeepFolder()
    '--- 階層フォルダ + PDF出力 ---
    Dim sFolder As String
    Dim sFile As String
    sFolder = &quot;C:PDF&quot; &amp; Format(Date, &quot;yyyy&quot;) &amp; &quot;&quot; &amp; Format(Date, &quot;mm&quot;)
    sFile = sFolder &amp; &quot;日報.pdf&quot;

    MkDirRecursive sFolder

    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=sFile
End Sub</code></pre>



<p class="wp-block-paragraph"><code>MkDirRecursive</code> を1度書いておくと、年/月/日の3階層構造でも安心してフォルダを生成できます。<code>InStrRev</code> で末尾の <code></code> 位置を特定し、親フォルダから再帰的に作成する仕組みです。</p>



<h2 class="wp-block-heading"><span id="toc16">複数シートを一括PDF出力する</span></h2>



<p class="wp-block-paragraph">請求書を取引先ごとに、月次報告を部署ごとに分けて保存する場合は、ループで複数シートを順番にPDF化します。</p>



<h3 class="wp-block-heading"><span id="toc17">For Eachで全シートを個別PDF化する</span></h3>



<p class="wp-block-paragraph">ブック内のすべてのシートを、シート名でPDFファイルに分けて保存するコードです。</p>



<pre class="wp-block-code"><code>Sub Sample_ExportAllSheetsSeparately()
    '--- 全シートを個別PDFで出力 ---
    Dim ws As Worksheet
    Dim sFolder As String
    Dim sFile As String
    Dim sToday As String
    sToday = Format(Date, &quot;yyyymmdd&quot;)
    sFolder = &quot;C:PDF&quot; &amp; sToday

    '--- フォルダ作成 ---
    If Dir(sFolder, vbDirectory) = &quot;&quot; Then
        MkDir sFolder
    End If

    '--- 全シートをループ ---
    For Each ws In ThisWorkbook.Worksheets
        sFile = sFolder &amp; &quot;&quot; &amp; ws.Name &amp; &quot;.pdf&quot;
        ws.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=sFile
    Next ws

    MsgBox &quot;全シートのPDF出力完了&quot;
End Sub</code></pre>



<p class="wp-block-paragraph"><code>For Each ws In ThisWorkbook.Worksheets</code> で、ブック内のすべてのワークシートを順に処理します。10シートあれば、10ファイルのPDFが一気に作られます。</p>



<p class="wp-block-paragraph"><code>For</code> ループの基本構文は<a href="https://mashukabu.com/excel-vba-howto-use-for/">Excel VBAでFor文を使う方法</a>を参照してください。コレクション処理に最適化された <code>For Each</code> は<a href="https://mashukabu.com/vba-howto-use-for-each-next/">Excel VBAでFor Each Nextを使う方法</a>で解説しています。</p>



<h3 class="wp-block-heading"><span id="toc18">特定シートだけを1つのPDFにまとめる</span></h3>



<p class="wp-block-paragraph">複数シートを「1つのPDFファイル」としてまとめて出力するパターンもよく使います。役員報告用の資料一式などです。</p>



<pre class="wp-block-code"><code>Sub Sample_ExportSelectedSheetsAsOnePDF()
    '--- 指定シートを配列で選択して1つのPDFに ---
    Dim sFile As String
    sFile = &quot;C:PDF月次報告_&quot; &amp; Format(Date, &quot;yyyymm&quot;) &amp; &quot;.pdf&quot;

    '--- 複数シートを選択 ---
    ThisWorkbook.Sheets(Array(&quot;売上&quot;, &quot;コスト&quot;, &quot;利益&quot;)).Select

    '--- 選択中のシートをまとめてPDF化 ---
    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=sFile

    '--- 選択を解除（先頭シートを単独選択） ---
    ThisWorkbook.Sheets(1).Select

    MsgBox &quot;結合PDF出力完了: &quot; &amp; sFile
End Sub</code></pre>



<p class="wp-block-paragraph"><code>Sheets(Array("売上", "コスト", "利益")).Select</code> で複数シートを同時選択した状態にしておき、<code>ActiveSheet.ExportAsFixedFormat</code> を呼ぶと、選択中のシートがすべて1つのPDFにまとめられます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>NOTE</strong></p><p>ブック全体をまとめたい場合は <code>ThisWorkbook.ExportAsFixedFormat</code> を使います。<code>ActiveSheet</code> ではなくブック自体に対してメソッドを呼ぶと、すべてのシートが1ファイルにまとまります。</p></blockquote>



<h3 class="wp-block-heading"><span id="toc19">シート名でフィルタしてPDF化する</span></h3>



<p class="wp-block-paragraph">「月次」で始まるシートだけPDF化したい、といった条件付き出力も可能です。</p>



<pre class="wp-block-code"><code>Sub Sample_ExportFilteredSheets()
    '--- 「月次」で始まるシートだけ個別PDFに ---
    Dim ws As Worksheet
    Dim sFolder As String
    sFolder = &quot;C:PDF月次レポート_&quot; &amp; Format(Date, &quot;yyyymm&quot;)

    If Dir(sFolder, vbDirectory) = &quot;&quot; Then
        MkDir sFolder
    End If

    For Each ws In ThisWorkbook.Worksheets
        '--- シート名先頭が「月次」のものだけ処理 ---
        If Left(ws.Name, 2) = &quot;月次&quot; Then
            ws.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=sFolder &amp; &quot;&quot; &amp; ws.Name &amp; &quot;.pdf&quot;
        End If
    Next ws
End Sub</code></pre>



<p class="wp-block-paragraph"><code>If Left(ws.Name, 2) = "月次" Then</code> の条件で、シート名の先頭2文字が「月次」のシートだけをPDF化します。命名規則を活用すると、ブックを開きっぱなしのまま対象だけ抽出して出力できます。</p>



<h2 class="wp-block-heading"><span id="toc20">印刷範囲を指定してPDF化する</span></h2>



<p class="wp-block-paragraph">シート全体ではなく、特定のセル範囲だけをPDFにしたい場面もあります。請求書テンプレートの「明細部分のみ」や、ダッシュボードの「グラフ部分のみ」など、用途は多岐にわたります。</p>



<h3 class="wp-block-heading"><span id="toc21">PrintAreaで印刷範囲を設定する</span></h3>



<p class="wp-block-paragraph">ワークシートの <code>PageSetup.PrintArea</code> プロパティに範囲文字列を代入すると、その範囲だけが印刷対象になります。</p>



<pre class="wp-block-code"><code>Sub Sample_ExportWithPrintArea()
    '--- 印刷範囲を設定してPDF化 ---
    Dim ws As Worksheet
    Set ws = Worksheets(&quot;請求書&quot;)

    '--- 印刷範囲を A1:F30 に固定 ---
    ws.PageSetup.PrintArea = &quot;A1:F30&quot;

    '--- 印刷範囲だけをPDF出力 ---
    ws.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=&quot;C:PDF請求書.pdf&quot;, _
        IgnorePrintAreas:=False
End Sub</code></pre>



<p class="wp-block-paragraph"><code>IgnorePrintAreas:=False</code>（既定値）にしておくと、<code>PrintArea</code> の設定が反映されます。<code>A1:F30</code> の範囲外にあるメモやコメント欄はPDFに含まれなくなります。</p>



<h3 class="wp-block-heading"><span id="toc22">動的に印刷範囲を決める（最終行まで）</span></h3>



<p class="wp-block-paragraph">データが日々増えるシートでは、最終行まで自動で印刷範囲にしたいケースがあります。<code>Cells(Rows.Count, 1).End(xlUp).Row</code> で最終行を取得します。</p>



<pre class="wp-block-code"><code>Sub Sample_DynamicPrintArea()
    '--- 動的に印刷範囲を決めてPDF化 ---
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim sArea As String

    Set ws = Worksheets(&quot;売上一覧&quot;)
    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    sArea = &quot;A1:F&quot; &amp; lastRow

    '--- 印刷範囲を動的に設定 ---
    ws.PageSetup.PrintArea = sArea

    ws.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=&quot;C:PDF売上一覧_&quot; &amp; Format(Date, &quot;yyyymmdd&quot;) &amp; &quot;.pdf&quot;

    MsgBox &quot;印刷範囲 &quot; &amp; sArea &amp; &quot; をPDF化しました&quot;
End Sub</code></pre>



<p class="wp-block-paragraph"><code>lastRow</code> の取得方法は<a href="https://mashukabu.com/excel-vba-howto-get-lastrow/">Excel VBAでLastRowを取得する方法</a>で詳しく解説しています。データが10行のときも1000行のときも、自動でフィットした範囲のPDFが生成できます。</p>



<h3 class="wp-block-heading"><span id="toc23">印刷範囲を無視してシート全体をPDF化する</span></h3>



<p class="wp-block-paragraph">逆に「シート全体を必ずPDF化したい」場合は、<code>IgnorePrintAreas:=True</code> を指定します。</p>



<pre class="wp-block-code"><code>Sub Sample_IgnorePrintArea()
    '--- 印刷範囲設定を無視してシート全体をPDF化 ---
    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=&quot;C:PDF全体.pdf&quot;, _
        IgnorePrintAreas:=True
End Sub</code></pre>



<p class="wp-block-paragraph">既存ブックに古い <code>PrintArea</code> が残っていると、意図せず一部しかPDFにならないトラブルが起きます。事前に <code>True</code> で全体出力するか、<code>PrintArea = ""</code> でリセットするとトラブルを防げます。</p>



<h2 class="wp-block-heading"><span id="toc24">実用サンプル: 請求書を取引先別にPDF自動保存</span></h2>



<p class="wp-block-paragraph">ここまで学んだ要素を組み合わせて、実務で使える請求書PDF自動保存マクロを作ります。</p>



<h3 class="wp-block-heading"><span id="toc25">想定シナリオ</span></h3>



<p class="wp-block-paragraph">「取引先一覧」シートにA列：取引先名、B列：請求金額が入力されています。マクロを実行すると、「請求書ひな形」シートに各取引先の情報を流し込み、取引先名のPDFを <code>C:請求書YYYYMM</code> フォルダに自動保存します。</p>



<h3 class="wp-block-heading"><span id="toc26">完成コード</span></h3>



<pre class="wp-block-code"><code>Sub ExportInvoicesPerClient()
    '--- 請求書を取引先別にPDF自動保存 ---
    Dim wsList As Worksheet
    Dim wsTpl As Worksheet
    Dim sFolder As String
    Dim sFile As String
    Dim sClient As String
    Dim sAmount As String
    Dim lastRow As Long
    Dim i As Long

    Set wsList = Worksheets(&quot;取引先一覧&quot;)
    Set wsTpl = Worksheets(&quot;請求書ひな形&quot;)

    '--- 保存先フォルダを年月単位で作成 ---
    sFolder = &quot;C:請求書&quot; &amp; Format(Date, &quot;yyyymm&quot;)
    If Dir(sFolder, vbDirectory) = &quot;&quot; Then
        MkDir sFolder
    End If

    '--- 取引先一覧の最終行を取得 ---
    lastRow = wsList.Cells(Rows.Count, 1).End(xlUp).Row

    '--- 取引先ごとにループ ---
    For i = 2 To lastRow
        sClient = wsList.Cells(i, 1).Value
        sAmount = wsList.Cells(i, 2).Value

        '--- ひな形に情報を転記 ---
        wsTpl.Range(&quot;B2&quot;).Value = sClient
        wsTpl.Range(&quot;B5&quot;).Value = sAmount
        wsTpl.Range(&quot;B6&quot;).Value = Format(Date, &quot;yyyy年m月d日&quot;)

        '--- 取引先名でPDF保存 ---
        sFile = sFolder &amp; &quot;&quot; &amp; sClient &amp; &quot;_請求書_&quot; &amp; _
                Format(Date, &quot;yyyymm&quot;) &amp; &quot;.pdf&quot;

        wsTpl.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=sFile, _
            IgnorePrintAreas:=False
    Next i

    MsgBox lastRow - 1 &amp; &quot;社分の請求書PDFを保存しました&quot; &amp; vbCrLf &amp; sFolder
End Sub</code></pre>



<p class="wp-block-paragraph">このマクロを月初に1回実行するだけで、取引先10社分の請求書が <code>C:請求書202605</code> フォルダ内に整理されて保存されます。手作業で30分かかっていた作業が、ボタン1つの数秒で終わります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>TIP</strong></p><p>請求書テンプレートに通し番号を入れる場合は、<code>wsTpl.Range("B1").Value = "INV-" & Format(Date, "yyyymm") & "-" & Format(i - 1, "000")</code> のように連番も自動生成できます。</p></blockquote>



<h2 class="wp-block-heading"><span id="toc27">よくあるエラーと対処法</span></h2>



<p class="wp-block-paragraph"><code>ExportAsFixedFormat</code> を使うときに遭遇しやすいエラーを5つ紹介します。</p>



<h3 class="wp-block-heading"><span id="toc28">実行時エラー&#8217;1004&#8242;: ドキュメントが保存されませんでした</span></h3>



<p class="wp-block-paragraph">最頻出のエラーです。原因は主に3つあります。</p>



<figure class="wp-block-table"><table><thead><tr><th>原因</th><th>対処</th></tr></thead><tbody><tr><td>保存先フォルダが存在しない</td><td><code>Dir + MkDir</code> でフォルダ存在チェック・作成</td></tr><tr><td>同名PDFが他アプリで開かれている</td><td>該当PDFを閉じてから再実行</td></tr><tr><td>保存先パスに使用不可文字（` / : * ? &#8221; < ></td><td>`）が含まれる</td><td>ファイル名から該当文字を除去</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">特に取引先名をファイル名に使う場合、<code>株式会社○○/△△</code> のように <code>/</code> が含まれていると保存に失敗します。事前に <code>Replace</code> 関数でクリーニングしておくのが安全です。</p>



<pre class="wp-block-code"><code>sClient = Replace(sClient, &quot;/&quot;, &quot;_&quot;)
sClient = Replace(sClient, &quot;&quot;, &quot;_&quot;)</code></pre>



<h3 class="wp-block-heading"><span id="toc29">PDFが空白・1ページ目しか出ない</span></h3>



<p class="wp-block-paragraph">シート内のデータ範囲は広いのに、PDFが1ページしか生成されない場合は <code>PrintArea</code> が古い状態で残っていることが多いです。</p>



<pre class="wp-block-code"><code>'--- 印刷範囲をリセットしてから出力 ---
ws.PageSetup.PrintArea = &quot;&quot;
ws.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:=&quot;C:PDF全体.pdf&quot;, _
    IgnorePrintAreas:=True</code></pre>



<p class="wp-block-paragraph"><code>PrintArea = ""</code> で範囲をクリアし、<code>IgnorePrintAreas:=True</code> をセットで指定するとシート全体がPDF化されます。</p>



<h3 class="wp-block-heading"><span id="toc30">文字が小さすぎてPDFが読めない</span></h3>



<p class="wp-block-paragraph">シート全体を1ページに収めようとすると、データ量が多い場合に文字が極端に小さくなります。<code>PageSetup.Zoom</code> プロパティと <code>FitToPagesWide / FitToPagesTall</code> を使って調整します。</p>



<pre class="wp-block-code"><code>With ws.PageSetup
    .Zoom = False
    .FitToPagesWide = 1   '横は1ページに収める
    .FitToPagesTall = False  '縦は自動（複数ページ可）
End With</code></pre>



<p class="wp-block-paragraph">横幅は1ページに収めつつ、縦は必要な分だけページを増やす設定です。長いリストでも文字が読める品質を保てます。</p>



<h3 class="wp-block-heading"><span id="toc31">実行時エラー&#8217;9&#8242;: インデックスが有効範囲にありません</span></h3>



<p class="wp-block-paragraph"><code>Worksheets("シート名")</code> で指定したシートが存在しないときに発生します。シート名のタイポ・全角半角の混在・不要スペースが主な原因です。</p>



<pre class="wp-block-code"><code>'--- シート存在チェックを入れる ---
Dim ws As Worksheet
On Error Resume Next
Set ws = Worksheets(&quot;請求書ひな形&quot;)
On Error GoTo 0

If ws Is Nothing Then
    MsgBox &quot;シート「請求書ひな形」が見つかりません&quot;
    Exit Sub
End If</code></pre>



<p class="wp-block-paragraph">VBAのエラー処理パターン全般は<a href="https://mashukabu.com/vba-error-handling-complete-guide/">VBAのエラーハンドリング完全ガイド</a>で詳しく解説しています。</p>



<h3 class="wp-block-heading"><span id="toc32">PDFの画質を変えたい</span></h3>



<p class="wp-block-paragraph">既定の <code>xlQualityStandard</code> で問題が出ることはまずありませんが、ファイルサイズを抑えたい場合は <code>xlQualityMinimum</code> を指定できます。</p>



<pre class="wp-block-code"><code>ActiveSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:=&quot;C:PDF軽量版.pdf&quot;, _
    Quality:=xlQualityMinimum</code></pre>



<p class="wp-block-paragraph"><code>xlQualityMinimum</code> だと画像が圧縮され、ファイルサイズが概ね半分程度になります。メール添付向けの軽量PDFを作りたい場合に便利です。</p>



<h2 class="wp-block-heading"><span id="toc33">ExportAsFixedFormatと他の保存方法の使い分け</span></h2>



<p class="wp-block-paragraph">ExcelからPDFを生成する方法は <code>ExportAsFixedFormat</code> だけではありません。用途別の使い分けを整理しておきます。</p>



<figure class="wp-block-table"><table><thead><tr><th>方法</th><th>特徴</th><th>推奨用途</th></tr></thead><tbody><tr><td>ExportAsFixedFormat</td><td>高速・高品質・引数が豊富</td><td>請求書・報告書の自動化（標準）</td></tr><tr><td>PrintOut（PrintToFile）</td><td>印刷ダイアログ経由</td><td>物理プリンタでの印刷自動化</td></tr><tr><td>SaveAs（xlPDF不可）</td><td>PDF不可</td><td>xlsx/xlsm保存用</td></tr><tr><td>名前を付けて保存 ダイアログ</td><td>手動操作</td><td>1回限りの保存</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">VBAでPDF出力するなら、<code>ExportAsFixedFormat</code> が標準解と覚えておけば十分です。<code>PrintOut</code> はネットワークプリンタ経由の物理印刷が必要なケースだけで使います。</p>



<h2 class="wp-block-heading"><span id="toc34">まとめ</span></h2>



<p class="wp-block-paragraph">VBAの <code>ExportAsFixedFormat</code> メソッドを使うと、ExcelシートのPDF出力作業を完全に自動化できます。</p>



<ul class="wp-block-list"><li><strong>基本構文</strong>: <code>対象.ExportAsFixedFormat Type:=xlTypePDF, Filename:="パス"</code></li><li><strong>日付付きファイル名</strong>: <code>Format(Date, "yyyymmdd")</code> でファイル名に日付を組み込む</li><li><strong>保存先フォルダ自動作成</strong>: <code>Dir + MkDir</code> で年月別フォルダを動的に生成する</li><li><strong>複数シート一括処理</strong>: <code>For Each</code> で個別PDF、<code>Sheets(Array(...)).Select</code> で結合PDF</li><li><strong>印刷範囲指定</strong>: <code>PageSetup.PrintArea</code> + <code>IgnorePrintAreas:=False</code> で範囲制御</li><li><strong>エラー対処</strong>: フォルダ不在・同名ファイル開きっぱなし・PrintArea残留が頻出原因</li></ul>



<p class="wp-block-paragraph">請求書を10社分・月次報告書を5部門分PDF化する作業は、初回1時間の自動化投資で年間60時間以上が浮きます。本記事の請求書テンプレートをそのままコピペして、自社の取引先一覧に合わせて調整するところから始めてください。</p>



<p class="wp-block-paragraph">VBAの基本構文を学び直したい方は、テーマ別にこちらの記事をご覧ください。</p>



<ul class="wp-block-list"><li>変数宣言の使い方は<a href="https://mashukabu.com/excel-vba-variable-explanation/">Excel VBAの変数の使い方</a></li><li>繰り返し処理の基本は<a href="https://mashukabu.com/excel-vba-howto-use-for/">Excel VBAでFor文を使う方法</a></li><li>コレクション処理は<a href="https://mashukabu.com/vba-howto-use-for-each-next/">Excel VBAでFor Each Nextを使う方法</a></li><li>最終行取得は<a href="https://mashukabu.com/excel-vba-howto-get-lastrow/">Excel VBAでLastRowを取得する方法</a></li></ul>



<p class="wp-block-paragraph">エラーハンドリングを本格的に整備したい方は<a href="https://mashukabu.com/vba-error-handling-complete-guide/">VBAのエラーハンドリング完全ガイド</a>が役立ちます。VBA全体を体系的に学びたい方は、入門ハブ記事の<a href="https://mashukabu.com/excel-vba-automation-guide/">Excel VBAでマクロ自動化を始めるための完全ガイド</a>も参考にしてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mashukabu.com/vba-export-pdf/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
