<?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>マクロ &#8211; まったりエンジニア</title>
	<atom:link href="https://javeo.jp/tag/%E3%83%9E%E3%82%AF%E3%83%AD/feed/" rel="self" type="application/rss+xml" />
	<link>https://javeo.jp</link>
	<description>ほどほどレベルのプログラミング</description>
	<lastBuildDate>Sun, 28 Jun 2026 06:08:36 +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://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2-32x32.png</url>
	<title>マクロ &#8211; まったりエンジニア</title>
	<link>https://javeo.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>VBEのおすすめオプション設定7選 VBAが快適に</title>
		<link>https://javeo.jp/vbe-options/</link>
					<comments>https://javeo.jp/vbe-options/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Sun, 28 Jun 2026 05:17:13 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[初心者]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=4874</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/vbe-options-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>VBE(Visual Basic Editor)のツール→オプションを見直すと、VBAの開発がぐっと快適になり初心者のバグも減らせます／変数の宣言を強制する設定を主役に、エディター・全般・ドッキングの各タブを初心者向けに整理しました]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/vbe-options-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">今回は、VBA(Excelのマクロを書く言語)を編集する画面=VBEの「オプション」設定を見直す話です</p>



<p class="wp-block-paragraph">VBEは初期設定のままでも動きますが、いくつかの項目を変えるだけで打ち間違いによるバグが減って、コードもぐっと読みやすくなります<br>この記事では、初心者の方がまず触っておきたいおすすめ設定を、画面のタブ別に<strong>7つ</strong>にしぼって整理しました(おすすめの7つは最後に早見表でまとめます)</p>
</div></div>



<h2 class="wp-block-heading">VBEのオプションとは？開き方と4つのタブ</h2>



<p class="wp-block-paragraph">VBE(Visual Basic Editor)は、ExcelやWordでマクロを書くための専用エディタです<br>その動作や見た目をまとめて調整できるのが、メニューの「ツール → オプション」から開く<strong>オプションダイアログ</strong>になります</p>



<p class="wp-block-paragraph">先に結論を言うと、ここを最初に少し整えておくだけで、後々のミスや「なんか書きにくいな」というストレスがかなり減ります<br>とくに初心者のうちは、打ち間違いに気づけない状態が一番こわいので、その対策になる設定が用意されているのは知っておいて損がないです</p>



<p class="wp-block-paragraph">まずはVBEを開くところから確認しておきましょう<br>ExcelでVBEを呼び出すショートカットは <strong><span class="swl-marker mark_yellow">Alt + F11</span></strong> です</p>



<div class="swell-block-step" data-num-style="circle">
<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">VBEを開く</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">Excelを開いた状態で <strong>Alt + F11</strong> を押すと、VBEのウィンドウが立ち上がります</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">ツールメニューを開く</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">VBEの上部メニューから「ツール(Tools)」をクリックします</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">オプションを選ぶ</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">メニューの中から「オプション(Options)」を選ぶと、設定ダイアログが開きます</p>
</div></div>
</div>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h54_33.png"><img decoding="async" width="1024" height="537" src="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h54_33-1024x537.png" alt="Alt+F11で開いた直後のVBE(Visual Basic Editor)の画面" class="wp-image-4865" srcset="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h54_33-1024x537.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h54_33-300x157.png 300w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h54_33-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h54_33-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h54_33.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h55_36.png"><img decoding="async" width="1024" height="537" src="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h55_36-1024x537.png" alt="VBEのツールメニューからオプションを開くところ" class="wp-image-4866" srcset="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h55_36-1024x537.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h55_36-300x157.png 300w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h55_36-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h55_36-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h55_36.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">オプションダイアログは、上部のタブで4つの画面に分かれています<br>それぞれ役割が違うので、ざっくり何のタブかをつかんでおきましょう</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table"><table style="--table-width:800px;"><thead><tr><th>タブ(英語名)</th><th>役割</th></tr></thead><tbody><tr><td>編集(Editor)</td><td>入力補助やタブ幅など、コードを書くときの動作</td></tr><tr><td>エディターの設定(Editor Format)</td><td>フォントや色など、コードの見た目</td></tr><tr><td>全般(General)</td><td>エラーの止め方やコンパイルの設定</td></tr><tr><td>ドッキング(Docking)</td><td>各ウィンドウの固定のしかた</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">英語名は <strong>Editor</strong> ですが、日本語版の画面では「編集」タブと表示されます(Editor=エディター、と思うとズレるので注意してください)</p>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">画面に出るタブ名やラベルの日本語表記は、お使いの環境やExcelのバージョンで少し変わることがあります<br>この記事では英語名を併記しておくので、画面と見比べながら読んでもらえると確実です</p>
</div></div>



<p class="wp-block-paragraph">なお、この記事は <strong>Windows版のExcel</strong> を前提にしています<br>VBEのオプション構成はExcel 2016〜365で基本的に同じですが、Mac版はオプション画面の構成や一部設定の効き方が違い、この記事のとおりにいかないことがあります</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>4タブ全部を完璧に覚える必要はないです、要所だけ押さえれば十分です</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h2 class="wp-block-heading">最重要：「変数の宣言を強制する」でtypoバグを防ぐ</h2>



<p class="wp-block-paragraph">最初に、この記事で一番おすすめしたい設定からいきます<br>編集タブの中にある <strong>変数の宣言を強制する(Require Variable Declaration)</strong> です</p>



<p class="wp-block-paragraph">結論から言うと、この設定をONにすると、<strong><span class="swl-marker mark_yellow" style="color:#e8313b">新しく作るモジュールの先頭に Option Explicit という1行が自動で入る</span></strong>ようになります<br>このひと手間が、初心者がやりがちな打ち間違いバグを大きく減らしてくれます</p>



<h3 class="wp-block-heading">なぜtypo(打ち間違い)がバグになるのか</h3>



<p class="wp-block-paragraph">VBAは初期状態だと、宣言していない変数名をいきなり書いても、その場で勝手に新しい変数として扱ってくれます<br>一見やさしい仕様ですが、これが打ち間違いを見逃す原因になります</p>



<p class="wp-block-paragraph">たとえば <strong>kingaku</strong> という変数に金額を入れていたのに、途中で <strong>kinaku</strong> と打ち間違えたとします<br>すると VBA は「kinaku は新しい変数だな」と判断して、空っぽのまま処理を続けてしまいます</p>



<p class="wp-block-paragraph">エラーにもならず、ただ計算結果だけがおかしくなる<br>これがいわゆる<strong>「動くのに答えが合わない」厄介なバグ</strong>で、原因探しに何時間も溶かすこともあります</p>



<h3 class="wp-block-heading">Option Explicit が打ち間違いを止めてくれる</h3>



<p class="wp-block-paragraph">そこで効いてくるのが <strong><span class="swl-marker mark_yellow">Option Explicit</span></strong> です<br>これはモジュールの先頭に書く宣言で、「使う変数はすべて先に宣言しておいてね」というルールをVBAに守らせます</p>



<p class="wp-block-paragraph">このルールが効いていると、宣言していない <strong>kinaku</strong> を書いた瞬間にエラーで止まってくれます<br>つまり、答えが合わなくなってから悩むのではなく、書いた直後に「あ、打ち間違えた」と気づけるわけです</p>



<p class="wp-block-paragraph">変数の宣言を強制する設定は、この Option Explicit を毎回手で書かなくても、新しいモジュールに自動でつけてくれる便利機能だと考えてもらえると分かりやすいです</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>私はこれを入れてから、変数まわりの謎バグでハマる回数がはっきり減りました</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p class="wp-block-paragraph">Option Explicit そのものの意味や、変数の宣言(Dim)の書き方をもっと深く知りたい方は、別記事でじっくり解説しています<br>あわせて読むと、なぜこの設定が効くのかが腑に落ちると思います</p>



<p class="wp-block-paragraph">→ <a href="https://javeo.jp/variables-constants/" target="_blank" rel="noopener noreferrer">VBAの変数と定数の使い方(Option Explicitの意味も解説)</a></p>



<h3 class="wp-block-heading">注意：効くのは「新規モジュール」だけ</h3>



<p class="wp-block-paragraph">ここがいちばん勘違いされやすいポイントです<br>変数の宣言を強制するをONにしても、<strong><span class="swl-marker mark_yellow" style="color:#e8313b">すでに作ってあるモジュールには Option Explicit は入りません</span></strong></p>



<p class="wp-block-paragraph">この設定で自動挿入されるのは、あくまで<strong>これから新しく作るモジュールだけ</strong>です<br>マイクロソフトの公式リファレンスでも、追加されるのは<strong>「any new module(新しいモジュール)」</strong>と明記されています</p>



<div class="wp-block-group is-style-big_icon_bad"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">ありがちな誤解：ONにすれば、今あるマクロも全部まとめて安全になる</p>



<p class="wp-block-paragraph">実際は新規モジュールだけが対象です<br>既存のモジュールは、自分で先頭に1行 <strong>Option Explicit</strong> を書き足す必要があります</p>
</div></div>



<p class="wp-block-paragraph">といっても、やることは難しくありません<br>既存モジュールのコードの一番上に <strong>Option Explicit</strong> と1行打つだけで、そのモジュールにも同じルールが効くようになります</p>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h57_02.png"><img decoding="async" width="1024" height="537" src="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h57_02-1024x537.png" alt="編集タブで変数の宣言を強制するにチェックを入れた状態" class="wp-image-4867" srcset="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h57_02-1024x537.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h57_02-300x157.png 300w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h57_02-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h57_02-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h57_02.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h58_00.png"><img decoding="async" width="1024" height="537" src="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h58_00-1024x537.png" alt="新規モジュールの先頭にOption Explicitが自動挿入された様子" class="wp-image-4868" srcset="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h58_00-1024x537.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h58_00-300x157.png 300w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h58_00-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h58_00-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_12h58_00.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h2 class="wp-block-heading">エディタータブ：入力補助とタブ幅のおすすめ</h2>



<p class="wp-block-paragraph">続いて、同じ編集(Editor)タブにある残りの項目を見ていきます<br>結論としては、入力補助はほぼ全部ONのままが快適で、タブ幅だけ好みで調整する、というのが初心者向けのおすすめです</p>



<p class="wp-block-paragraph">編集タブの設定は、ざっくり「入力を助けてくれる系」と「画面の見せ方系」に分かれます<br>まずは入力を助けてくれる系から、表でまとめて整理します</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table"><table style="--table-width:900px;"><thead><tr><th>設定名(英語名)</th><th>働き</th><th>おすすめ</th></tr></thead><tbody><tr><td>自動構文チェック(Auto Syntax Check)</td><td>1行打つたびに文法ミスを検査して警告を出す</td><td>好みでOFFも可(後述)</td></tr><tr><td>変数の宣言を強制する(Require Variable Declaration)</td><td>新規モジュールに Option Explicit を自動挿入</td><td>ON(本記事の主役)</td></tr><tr><td>自動メンバー表示(Auto List Members)</td><td>入力途中に候補リストを出す(入力補完)</td><td>ON</td></tr><tr><td>自動クイックヒント(Auto Quick Info)</td><td>関数や引数の構文をその場で表示</td><td>ON</td></tr><tr><td>自動データヒント(Auto Data Tips)</td><td>変数にカーソルを当てると値を表示</td><td>ON</td></tr><tr><td>自動インデント(Auto Indent)</td><td>前の行の字下げを次の行に引き継ぐ</td><td>ON</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">入力補助系はONのままが快適</h3>



<p class="wp-block-paragraph"><strong>自動メンバー表示・自動クイックヒント・自動インデント</strong>は、コードを書くスピードと正確さを上げてくれる機能です<br>初期状態でONになっていることが多いので、基本はそのままで問題ありません</p>



<p class="wp-block-paragraph">ひとつ補足しておきたいのが <strong>自動データヒント(Auto Data Tips)</strong> です<br>これは変数にマウスを乗せると値が見える機能ですが、<strong><span class="swl-marker mark_yellow">いつでも見えるわけではなく、ブレークモード(処理を一時停止したデバッグ中)のときだけ</span></strong>使えます</p>



<p class="wp-block-paragraph">「ONにしたのに値が出ない」と感じたら、それはマクロが止まっていないからかもしれません<br>F8キーで1行ずつ実行している最中などに試すと、ちゃんと値が表示されます</p>



<h3 class="wp-block-heading">自動構文チェックはOFFも検討の余地あり</h3>



<p class="wp-block-paragraph"><strong>自動構文チェック(Auto Syntax Check)</strong>は、1行入力するたびに文法をチェックして、ミスがあると警告ダイアログを出してくれる機能です<br>ありがたい機能ではあるのですが、人によっては「入力の途中で何度も警告が出てうっとうしい」と感じます</p>



<p class="wp-block-paragraph">そこでよく出てくるのが「OFFにすると、エラーに気づけなくなるのでは？」という心配です<br>ここはよくある誤解なので整理しておきます</p>



<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">自動構文チェックをOFFにしても、エラーのある行は<strong>赤い文字</strong>で残るのが基本です<br>消えるのは、入力途中に毎回出る<strong>警告ダイアログだけ</strong>です</p>
</div></div>



<p class="wp-block-paragraph">つまりOFFにしても、ミスのある行は色で見分けられるので気づけます<br>ダイアログのわずらわしさが気になる方はOFF、最初のうちは警告で気づきたい方はONのまま、と好みで選んで大丈夫です</p>



<p class="wp-block-paragraph">※この赤字が残る挙動は環境によって見え方が変わることもあるので、気になる方は一度ご自身のVBEで試してみてください</p>



<h3 class="wp-block-heading">タブ幅と画面の見せ方</h3>



<p class="wp-block-paragraph">編集タブには、コードの見せ方を決める項目もあります<br>初心者がとくに気にすると良いのは <strong>タブ幅(Tab Width)</strong> です</p>



<p class="wp-block-paragraph">タブ幅は、Tabキーで字下げするときの空白の量で、<strong><span class="swl-marker mark_yellow">既定は4、設定できる範囲は1〜32</span></strong> です<br><strong>既定の4のままでも問題なく</strong>、深い入れ子で右に寄りすぎると感じるなら2に下げる、といった調整ができます</p>



<p class="wp-block-paragraph">そのほか、画面の見せ方に関わる項目も軽く触れておきます<br>下の表は、知っておくと迷わない補助的な設定です</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table"><table style="--table-width:900px;"><thead><tr><th>設定名(英語名)</th><th>働き</th><th>メモ</th></tr></thead><tbody><tr><td>タブ幅(Tab Width)</td><td>字下げの空白量</td><td>既定4・範囲1〜32</td></tr><tr><td>モジュール全体を表示(Default to Full Module View)</td><td>新規モジュールを全プロシージャ連続表示にするか</td><td>今開いている画面の表示は変えない</td></tr><tr><td>プロシージャの区切り線(Procedure Separator)</td><td>各プロシージャの末尾に区切りバーを表示</td><td>区切りが見えると読みやすい</td></tr><tr><td>ドラッグアンドドロップ編集(Drag-and-Drop Text Editing)</td><td>コードを選んでドラッグで移動できる</td><td>好みで</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ひとつだけ補足です<br>モジュール全体を表示(Default to Full Module View)は、あくまで<strong>これから開く新規モジュールの既定</strong>を決める設定で、今まさに開いている画面の見え方は変えません</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>区切り線はオンにしておくと、プロシージャの切れ目が一目で分かって便利です</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div class="p-blogParts post_content" data-partsID="4601">
<div class="jv-books" id="jv-books-vba" data-shelf="vba"><div class="jv-books-head"><span class="jv-books-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> VBAの独学に効く本</span><span class="jv-books-pr">PR</span></div><div class="jv-books-grid"><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240" alt="Excel VBA塾【動画×本で学ぶ!】" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel VBA塾【動画×本で学ぶ!】</p><p class="jv-book-author">たてばやし淳</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4839975728">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4839975728">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240" alt="パーフェクトExcel VBA" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">パーフェクトExcel VBA</p><p class="jv-book-author">高橋宣成</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4297108755">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4297108755">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240" alt="Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版</p><p class="jv-book-author">国本温子</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4815631298">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4815631298">楽天で見る</a></div></div></div></div><p class="jv-books-note">私のおすすめからランダムで3冊を表示しています</p></div>
<style>
.jv-books{border:1px solid #e0e0e0;border-radius:8px;padding:16px;margin:1.5em 0;background:#fff}
.jv-books-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.jv-books-title{font-weight:700;font-size:1.05em}
.jv-books-pr{font-size:.7em;color:#888;border:1px solid #ccc;border-radius:3px;padding:1px 6px;flex-shrink:0}
.jv-books-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;min-height:330px}
.jv-book-card{display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid #f0f0f0;border-radius:6px;padding:12px 8px;background:#fafafa}
.jv-book-cover img{width:auto;max-width:120px;height:170px;object-fit:contain}
.jv-book-info{width:100%;flex:1;display:flex;flex-direction:column}
.jv-book-title{font-size:.82em;font-weight:600;line-height:1.4;margin:8px 0 2px;min-height:2.8em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jv-book-author{font-size:.72em;color:#777;margin:0 0 8px}
.jv-book-btns{display:flex;flex-direction:column;gap:6px;width:100%;margin-top:auto}
.jv-btn{display:block;text-align:center;font-size:.78em;font-weight:600;color:#fff!important;text-decoration:none!important;border-radius:4px;padding:7px 4px;line-height:1.2}
.jv-btn-az{background:#e88b00}
.jv-btn-rk{background:#bf0000}
.jv-btn:hover{opacity:.85}
.jv-books-note{font-size:.7em;color:#999;text-align:right;margin:8px 0 0}
@media(max-width:599px){
.jv-books-grid{grid-template-columns:1fr;min-height:0}
.jv-book-card{flex-direction:row;text-align:left;gap:12px}
.jv-book-cover img{height:110px;max-width:80px}
.jv-book-info{min-width:0}
.jv-book-title{min-height:0}
.jv-book-btns{flex-direction:row}
.jv-btn{flex:1}
}
</style>
<script>
(function(){
var SHELF='vba';
var root=document.getElementById('jv-books-'+SHELF);
if(!root||root.dataset.init)return;
root.dataset.init='1';
var POOL=[{"t": "Excel VBA塾【動画×本で学ぶ!】", "a": "たてばやし淳", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F", "id": "4839975728"}, {"t": "パーフェクトExcel VBA", "a": "高橋宣成", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F", "id": "4297108755"}, {"t": "Excel マクロ&VBA［実践ビジネス入門講座］完全版 第3版", "a": "国本温子", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F", "id": "4815631298"}, {"t": "増強改訂版 できる イラストで学ぶ 入社1年目からのExcel VBA", "a": "きたみあきこ", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8414/9784295018414.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4295018414?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F", "id": "4295018414"}];
var REL='nofollow sponsored noopener noreferrer';
function el(tag,cls){var e=document.createElement(tag);if(cls)e.className=cls;return e;}
function btn(href,cls,label,mall,id){
var a=el('a','jv-btn '+cls);a.href=href;a.target='_blank';a.rel=REL;a.textContent=label;
a.setAttribute('data-shelf',SHELF);a.setAttribute('data-mall',mall);a.setAttribute('data-book',id);
return a;}
function card(b){
var d=el('div','jv-book-card');
var cover=el('a','jv-book-cover');cover.href=b.az;cover.target='_blank';cover.rel=REL;
var img=el('img');img.src=b.img;img.alt=b.t;img.width=120;img.height=170;img.loading='lazy';
cover.appendChild(img);
var info=el('div','jv-book-info');
var ttl=el('p','jv-book-title');ttl.textContent=b.t;
var au=el('p','jv-book-author');au.textContent=b.a;
var btns=el('div','jv-book-btns');
btns.appendChild(btn(b.az,'jv-btn-az','Amazonで見る','amazon',b.id));
if(b.rk){btns.appendChild(btn(b.rk,'jv-btn-rk','楽天で見る','rakuten',b.id));}
info.appendChild(ttl);info.appendChild(au);info.appendChild(btns);
d.appendChild(cover);d.appendChild(info);
return d;}
var pool=POOL.slice();
for(var i=pool.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1));var t=pool[i];pool[i]=pool[j];pool[j]=t;}
var grid=root.querySelector('.jv-books-grid');
grid.style.opacity='0';
while(grid.firstChild)grid.removeChild(grid.firstChild);
pool.slice(0,3).forEach(function(b){grid.appendChild(card(b));});
grid.style.transition='opacity .5s ease';
void grid.offsetWidth;
grid.style.opacity='1';
})();
</script>
</div>


<h2 class="wp-block-heading">エディターの設定タブ：フォントと色でコードを見やすく</h2>



<p class="wp-block-paragraph">次は「エディターの設定(Editor Format)」タブです<br>ここはコードの<strong>見た目</strong>、つまりフォントや色を整える画面で、長時間コードを書く人ほど効いてきます</p>



<h3 class="wp-block-heading">フォントは等幅がおすすめ</h3>



<p class="wp-block-paragraph">コードを読むときは <strong>等幅フォント</strong>(全部の文字が同じ幅で並ぶフォント)が見やすいです<br>桁がきれいにそろうので字下げが読み取りやすく、数字の0とアルファベットのO、小文字のlと数字の1なども見分けやすくなります</p>



<p class="wp-block-paragraph">逆に<strong>比例フォント</strong>(文字幅がバラバラのフォント)だと字下げの位置がガタついて、入れ子の深さを目で追いにくくなります</p>



<p class="wp-block-paragraph">日本語版のExcelだと、既定のフォントは <strong>MS ゴシック</strong> になっていることが多いです<br>これも等幅フォントなので無理に変える必要はありませんが、好みで Consolas などに変えても読みやすくなります</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">既定のフォント名やサイズは、Officeのバージョンや言語設定で変わることがあります<br>正確なところは、ご自身の「エディターの設定」タブを開いて確認するのが確実です</p>
</div></div>



<h3 class="wp-block-heading">色分けと余白インジケーターバー</h3>



<p class="wp-block-paragraph">このタブでは <strong>コードの色分け(Code Colors)</strong> も調整できます<br>キーワード・コメント・エラー行など、テキストの種類ごとに前景色(文字色)や背景色を決められます</p>



<p class="wp-block-paragraph">初心者のうちは<strong>初期設定のままで十分</strong>ですが、コメントの色を少し目立たせると、説明書きとコードの区別がつきやすくなります<br>暗い背景にしたい人は、ここで文字色と背景色を反転させる調整もできます</p>



<p class="wp-block-paragraph">もうひとつ、<strong>余白インジケーターバー(Margin Indicator Bar)</strong> という項目もあります<br>これはコードウィンドウの左端に出る帯の表示・非表示を切り替えるもので、この帯にブレークポイントなどのマークが出ます</p>



<p class="wp-block-paragraph">デバッグ(処理を止めて中身を確認する作業)でよく使う場所なので、<strong>基本は表示したまま</strong>がおすすめです</p>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_12.png"><img decoding="async" width="1024" height="537" src="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_12-1024x537.png" alt="エディターの設定タブのフォント設定の画面" class="wp-image-4869" srcset="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_12-1024x537.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_12-300x157.png 300w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_12-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_12-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_12.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h2 class="wp-block-heading">全般タブ：エラーのトラップを知っておく</h2>



<p class="wp-block-paragraph">「全般(General)」タブで初心者がいちばん知っておくと良いのが <strong>エラーのトラップ(Error Trapping)</strong> です<br>これは、マクロ実行中にエラーが起きたとき「どこで処理を止めるか」を決める設定で、デバッグのしやすさに直結します</p>



<h3 class="wp-block-heading">エラーのトラップ 3つのモード</h3>



<p class="wp-block-paragraph">エラーのトラップには3つのモードがあります<br>違いを表でつかんでおきましょう</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table"><table style="--table-width:900px;"><thead><tr><th>モード(英語名)</th><th>挙動</th><th>普段はこれ</th></tr></thead><tbody><tr><td>すべてのエラーで中断(Break on All Errors)</td><td>エラー処理を書いていても、どんなエラーでも例外なくその場で止まる</td><td>デバッグ時だけ一時的に</td></tr><tr><td>クラスモジュールで中断(Break in Class Module)</td><td>クラスモジュール内で処理しきれなかったエラーを、その行で止める</td><td>通常は使わない</td></tr><tr><td>エラー処理対象外のエラーで中断(Break on Unhandled Errors)</td><td>エラー処理があれば止めずに捕まえ、無ければ止める</td><td>普段はこれ(既定)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">通常は <strong>エラー処理対象外のエラーで中断(Break on Unhandled Errors)</strong> になっていることが多いです<br>これが<strong>既定</strong>なので、普段づかいではこの状態のままで問題ありません</p>



<p class="wp-block-paragraph">覚えておくと便利なのが <strong>すべてのエラーで中断(Break on All Errors)</strong> の使いどころです<br>On Error などのエラー処理を書いていると、エラーがあっても素通りしてしまい、どこで失敗したのか分かりにくくなることがあります</p>



<p class="wp-block-paragraph">そんなときは <strong><span class="swl-marker mark_yellow">一時的にすべてのエラーで中断に切り替える</span></strong>と、エラーが起きた行でピタッと止まるので原因を特定しやすくなります<br>原因が分かったら元に戻す、という使い方が定番です</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>原因不明のバグに詰まったら、この切り替えを思い出すと助かります</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h3 class="wp-block-heading">コンパイルと状態の通知は軽く知っておく</h3>



<p class="wp-block-paragraph">全般タブには、コンパイル(コードを実行できる形に変換する処理)に関する項目もあります<br>初心者がいじる場面は少ないので、ここは軽く知っておく程度で十分です</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li><strong>要求時コンパイル(Compile On Demand)</strong> … 実行に必要な部分だけ先にコンパイルして、起動を早める</li>



<li><strong>バックグラウンドコンパイル(Background Compile)</strong> … 空き時間に残りをコンパイルする(要求時コンパイルがONのときだけ有効)</li>
</ul>



<p class="wp-block-paragraph">バックグラウンドコンパイルは、<strong>要求時コンパイルがONになっていないと使えない</strong>という依存関係があります<br>どちらも基本は初期設定のままで困りません</p>



<p class="wp-block-paragraph">もうひとつ、<strong>状態を失う前に通知(Notify Before State Loss)</strong> という項目もあります<br>これは、実行中のマクロを編集したせいで変数の中身がすべてリセットされる前に、確認メッセージを出すかどうかの設定です</p>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_40.png"><img decoding="async" width="1024" height="537" src="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_40-1024x537.png" alt="全般タブのエラーのトラップ(3つのモード)の画面" class="wp-image-4870" srcset="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_40-1024x537.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_40-300x157.png 300w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_40-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_40-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h00_40.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h2 class="wp-block-heading">ドッキングタブと設定の保存先の話</h2>



<p class="wp-block-paragraph">最後のタブが「ドッキング(Docking)」です<br>ここは、VBE内の各ウィンドウを画面の端に固定するかどうかを、チェックボックスで選ぶ画面になります</p>



<h3 class="wp-block-heading">ドッキングタブでウィンドウの居場所を整える</h3>



<p class="wp-block-paragraph">ドッキングとは、ウィンドウをVBEの端にピタッとくっつけて固定する状態のことです<br>プロジェクトエクスプローラーやプロパティウィンドウ、イミディエイトウィンドウなどを、それぞれ固定するかどうか選べます</p>



<p class="wp-block-paragraph">固定をやめると、ウィンドウを自由に動かせる<strong>フロート状態</strong>になります<br>「ウィンドウがどこかに行って戻せない」というときは、このタブのチェックを見直すと整いやすいです</p>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h01_51.png"><img decoding="async" width="1024" height="537" src="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h01_51-1024x537.png" alt="ドッキングタブでウィンドウの固定を設定する画面" class="wp-image-4871" srcset="https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h01_51-1024x537.png 1024w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h01_51-300x157.png 300w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h01_51-150x79.png 150w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h01_51-768x403.png 768w, https://javeo.jp/wp-content/uploads/2026/05/2026-06-28_13h01_51.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">設定はExcelとWordで共通になりやすい</h3>



<p class="wp-block-paragraph">まず安心してほしいのが、一度変えた設定は<strong>Excelを閉じても残る</strong>という点です<br>毎回やり直す必要はなく、変な設定にしてしまっても同じ画面でいつでも戻せます(再起動もいりません)</p>



<p class="wp-block-paragraph">もうひとつ、知っておくと混乱しない小ネタです<br>VBEのオプションは、Excelごと・Wordごとに別々ではなく、<strong>VBAの仕組み側にひも付く</strong>傾向があります</p>



<p class="wp-block-paragraph">そのため、ExcelのVBEで変えた設定が、WordのVBEを開いたときにも同じように効いていることが多いです<br>「片方で整えたのに、もう片方では設定し直し」とはなりにくい、と考えておくと良いです</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">共通になる範囲は項目や環境によって差があります<br>「だいたい共通になりやすい」くらいの感覚でとらえておくと安全です</p>
</div></div>



<h2 class="wp-block-heading">まとめ：VBEおすすめ設定の早見表とよくある質問</h2>



<p class="wp-block-paragraph">ここまでのおすすめ設定を、冒頭で予告した<strong>7つ</strong>として早見表にまとめます<br>まずは主役の「変数の宣言を強制する」をONにするところから始めれば十分です</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table"><table style="--table-width:900px;"><thead><tr><th>設定名</th><th>おすすめ</th><th>効果</th></tr></thead><tbody><tr><td>変数の宣言を強制する</td><td>ON</td><td>新規モジュールにOption Explicitを自動挿入し打ち間違いバグを防ぐ</td></tr><tr><td>自動メンバー表示</td><td>ON</td><td>入力補完で書くスピードと正確さが上がる</td></tr><tr><td>自動クイックヒント</td><td>ON</td><td>関数や引数の構文がその場で見える</td></tr><tr><td>自動データヒント</td><td>ON</td><td>デバッグ中に変数の値が見える(ブレークモード限定)</td></tr><tr><td>自動構文チェック</td><td>好みでOFFも可</td><td>OFFでもエラー行は赤字で残る、消えるのは警告ダイアログ</td></tr><tr><td>タブ幅</td><td>4(既定のままで可)</td><td>字下げの幅を調整(既定4・範囲1〜32)</td></tr><tr><td>プロシージャの区切り線</td><td>ON</td><td>プロシージャの切れ目が一目で分かる</td></tr></tbody></table></figure>



<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph"><strong>まずはこの1つだけ</strong>:VBEで ツール → オプション → 編集タブ → 一番上の「変数の宣言を強制する」にチェック → OK、これだけで打ち間違いバグがぐっと減ります</p>
</div></div>



<p class="wp-block-paragraph">VBAの基礎をもっと固めたい方は、変数の使い方やループ処理の記事もあわせてどうぞ<br>設定を整えたあとは、書くコード自体の引き出しを増やしていくのが上達の近道です</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li><a href="https://javeo.jp/variables-constants/" target="_blank" rel="noopener noreferrer">VBAの変数と定数の使い方(Option Explicitの意味を深掘り)</a></li>



<li><a href="https://javeo.jp/vba-loop/" target="_blank" rel="noopener noreferrer">VBAのループ処理 ForとDoの違いと使い分け</a></li>
</ul>



<div class="swell-block-faq" data-q="col-text" data-a="col-text">
<div class="swell-block-faq__item"><h3 class="faq_q">変数の宣言を強制するをONにしたのに、古いマクロでエラーが出ません</h3><div class="faq_a">
<p class="wp-block-paragraph">この設定が効くのは、これから新しく作るモジュールだけです<br>すでにあるモジュールには反映されないので、そのモジュールの先頭に自分で <strong>Option Explicit</strong> を1行書き足してください</p>
</div></div>



<div class="swell-block-faq__item"><h3 class="faq_q">自動構文チェックをOFFにすると、ミスに気づけなくなりませんか？</h3><div class="faq_a">
<p class="wp-block-paragraph">OFFにしても、エラーのある行は赤い文字で残るので気づけます<br>消えるのは、入力途中に毎回出る警告ダイアログだけです<br>環境で見え方が変わることもあるので、一度ご自身のVBEで試してみてください</p>
</div></div>



<div class="swell-block-faq__item"><h3 class="faq_q">自動データヒントをONにしたのに、変数の値が表示されません</h3><div class="faq_a">
<p class="wp-block-paragraph">自動データヒントは、処理を一時停止したブレークモード(デバッグ中)のときだけ使えます<br>F8キーで1行ずつ実行している最中などにカーソルを当てると、ちゃんと値が表示されます</p>
</div></div>
</div>



<p class="wp-block-paragraph">VBEのオプションは、一度整えてしまえば<strong>毎回設定し直す必要がありません</strong><br>まずは変数の宣言を強制するをONにして、打ち間違いバグの少ない環境から始めてみてください</p>


<div class="p-blogParts post_content" data-partsID="4601">
<div class="jv-books" id="jv-books-vba" data-shelf="vba"><div class="jv-books-head"><span class="jv-books-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> VBAの独学に効く本</span><span class="jv-books-pr">PR</span></div><div class="jv-books-grid"><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240" alt="Excel VBA塾【動画×本で学ぶ!】" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel VBA塾【動画×本で学ぶ!】</p><p class="jv-book-author">たてばやし淳</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4839975728">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4839975728">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240" alt="パーフェクトExcel VBA" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">パーフェクトExcel VBA</p><p class="jv-book-author">高橋宣成</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4297108755">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4297108755">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240" alt="Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版</p><p class="jv-book-author">国本温子</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4815631298">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4815631298">楽天で見る</a></div></div></div></div><p class="jv-books-note">私のおすすめからランダムで3冊を表示しています</p></div>
<style>
.jv-books{border:1px solid #e0e0e0;border-radius:8px;padding:16px;margin:1.5em 0;background:#fff}
.jv-books-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.jv-books-title{font-weight:700;font-size:1.05em}
.jv-books-pr{font-size:.7em;color:#888;border:1px solid #ccc;border-radius:3px;padding:1px 6px;flex-shrink:0}
.jv-books-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;min-height:330px}
.jv-book-card{display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid #f0f0f0;border-radius:6px;padding:12px 8px;background:#fafafa}
.jv-book-cover img{width:auto;max-width:120px;height:170px;object-fit:contain}
.jv-book-info{width:100%;flex:1;display:flex;flex-direction:column}
.jv-book-title{font-size:.82em;font-weight:600;line-height:1.4;margin:8px 0 2px;min-height:2.8em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jv-book-author{font-size:.72em;color:#777;margin:0 0 8px}
.jv-book-btns{display:flex;flex-direction:column;gap:6px;width:100%;margin-top:auto}
.jv-btn{display:block;text-align:center;font-size:.78em;font-weight:600;color:#fff!important;text-decoration:none!important;border-radius:4px;padding:7px 4px;line-height:1.2}
.jv-btn-az{background:#e88b00}
.jv-btn-rk{background:#bf0000}
.jv-btn:hover{opacity:.85}
.jv-books-note{font-size:.7em;color:#999;text-align:right;margin:8px 0 0}
@media(max-width:599px){
.jv-books-grid{grid-template-columns:1fr;min-height:0}
.jv-book-card{flex-direction:row;text-align:left;gap:12px}
.jv-book-cover img{height:110px;max-width:80px}
.jv-book-info{min-width:0}
.jv-book-title{min-height:0}
.jv-book-btns{flex-direction:row}
.jv-btn{flex:1}
}
</style>
<script>
(function(){
var SHELF='vba';
var root=document.getElementById('jv-books-'+SHELF);
if(!root||root.dataset.init)return;
root.dataset.init='1';
var POOL=[{"t": "Excel VBA塾【動画×本で学ぶ!】", "a": "たてばやし淳", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F", "id": "4839975728"}, {"t": "パーフェクトExcel VBA", "a": "高橋宣成", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F", "id": "4297108755"}, {"t": "Excel マクロ&VBA［実践ビジネス入門講座］完全版 第3版", "a": "国本温子", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F", "id": "4815631298"}, {"t": "増強改訂版 できる イラストで学ぶ 入社1年目からのExcel VBA", "a": "きたみあきこ", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8414/9784295018414.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4295018414?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F", "id": "4295018414"}];
var REL='nofollow sponsored noopener noreferrer';
function el(tag,cls){var e=document.createElement(tag);if(cls)e.className=cls;return e;}
function btn(href,cls,label,mall,id){
var a=el('a','jv-btn '+cls);a.href=href;a.target='_blank';a.rel=REL;a.textContent=label;
a.setAttribute('data-shelf',SHELF);a.setAttribute('data-mall',mall);a.setAttribute('data-book',id);
return a;}
function card(b){
var d=el('div','jv-book-card');
var cover=el('a','jv-book-cover');cover.href=b.az;cover.target='_blank';cover.rel=REL;
var img=el('img');img.src=b.img;img.alt=b.t;img.width=120;img.height=170;img.loading='lazy';
cover.appendChild(img);
var info=el('div','jv-book-info');
var ttl=el('p','jv-book-title');ttl.textContent=b.t;
var au=el('p','jv-book-author');au.textContent=b.a;
var btns=el('div','jv-book-btns');
btns.appendChild(btn(b.az,'jv-btn-az','Amazonで見る','amazon',b.id));
if(b.rk){btns.appendChild(btn(b.rk,'jv-btn-rk','楽天で見る','rakuten',b.id));}
info.appendChild(ttl);info.appendChild(au);info.appendChild(btns);
d.appendChild(cover);d.appendChild(info);
return d;}
var pool=POOL.slice();
for(var i=pool.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1));var t=pool[i];pool[i]=pool[j];pool[j]=t;}
var grid=root.querySelector('.jv-books-grid');
grid.style.opacity='0';
while(grid.firstChild)grid.removeChild(grid.firstChild);
pool.slice(0,3).forEach(function(b){grid.appendChild(card(b));});
grid.style.transition='opacity .5s ease';
void grid.offsetWidth;
grid.style.opacity='1';
})();
</script>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/vbe-options/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VBAでJSONを扱う方法 VBA-JSONの使い方</title>
		<link>https://javeo.jp/vba-json/</link>
					<comments>https://javeo.jp/vba-json/#comments</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Fri, 22 May 2026 23:00:00 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[初心者]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=111</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/05/vba-json-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>ExcelVBAでJSONを扱うなら定番ライブラリ「VBA-JSON」がおすすめです、JsonConverter.basの導入から参照設定、ParseJsonでのパース、ConvertToJsonでの生成、配列やネストへのアクセスまで初心者向けにまとめました]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/05/vba-json-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<p class="wp-block-paragraph">「VBAでJSONを読み込みたいんだけど、標準機能だとどうにもならない…」と手が止まっていませんか？</p>



<p class="wp-block-paragraph">結論から言うと、<strong><span class="swl-marker mark_yellow">ExcelVBAでJSONを扱うなら「VBA-JSON」という定番ライブラリを入れるのが一番ラク</span></strong>です</p>



<p class="wp-block-paragraph">やることはシンプルで、<code>JsonConverter.bas</code> というファイルを1つ取り込んで、参照設定を1つ入れるだけ、あとは <code>ParseJson</code> でJSONを読み込んで、<code>ConvertToJson</code> でJSONを書き出せます</p>



<p class="wp-block-paragraph">この記事では、VBA-JSONの導入から実際の使い方(パース・生成・配列やネストへのアクセス・ループ処理)まで、初心者の方にも分かるように順を追って解説していきます、つまずきポイントとFAQ、AIにコードを書いてもらうコツもまとめているので、必要なところだけ拾い読みでも大丈夫です</p>



<h2 class="wp-block-heading">VBAでJSONを扱うなら VBA-JSON が定番</h2>



<p class="wp-block-paragraph">まず大前提として、<strong>VBAには標準でJSONを扱う機能がありません</strong></p>



<p class="wp-block-paragraph">Excelには CSV を読む機能はあっても、JSONをそのまま「項目ごとに取り出す」みたいなことは素のVBAだとできないんですよね</p>



<p class="wp-block-paragraph">そこで使うのが、オープンソースのライブラリ「<strong>VBA-JSON</strong>」です</p>



<p class="wp-block-paragraph">GitHubの <a href="https://github.com/VBA-tools/VBA-JSON" target="_blank" rel="noopener noreferrer">VBA-tools/VBA-JSON</a> で公開されていて、JSON界隈ではかなり知られた定番です、最新は <code>v2.3.1</code> で、WindowsのExcelでもMacのExcelでも動きます</p>



<p class="wp-block-paragraph">使う関数は基本的にこの2つだけ覚えればOKです</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li><strong>ParseJson</strong> … JSON文字列を、VBAで扱えるデータ(Dictionary / Collection)に変換する(=読み込む)</li>



<li><strong>ConvertToJson</strong> … VBAのデータを、JSON文字列に変換する(=書き出す)</li>
</ul>



<p class="wp-block-paragraph">「読み込む」と「書き出す」の往復、これだけです、難しそうに見えて中身はシンプルなので安心してください</p>



<h2 class="wp-block-heading">VBAでJSONを扱う場面はどんなとき？</h2>



<p class="wp-block-paragraph">そもそも「ExcelでJSONなんて使うの？」と思うかもしれませんが、最近のWeb APIはJSONで返ってくるのがほぼ標準なので、意外と日常業務の中で出番があります</p>



<p class="wp-block-paragraph">たとえばこんなケースです</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li>為替レートや天気予報のWeb APIを叩いてExcelに取り込む</li>



<li>WebサービスからダウンロードしたデータをVBAで集計する</li>



<li>取引先のシステムとJSON形式でデータをやり取りする</li>



<li>WordPressや社内システムのREST APIを操作する</li>
</ul>



<p class="wp-block-paragraph">VBA-JSONを使えるようになると、<strong>Excel完結の作業に外部データを取り込める幅</strong>が一気に広がります、普段の集計シートに「最新のデータを自動で引っ張ってくる」ような仕組みを足せるイメージですね</p>



<p class="wp-block-paragraph">実際にWeb APIへリクエストを送ってJSONを受け取る流れは、<a href="https://javeo.jp/ebay-api-request/" target="_blank" rel="noopener noreferrer">eBay APIにVBAでリクエストを送る方法を解説した記事</a>でも具体例を扱っているので、API連携をやってみたい方はあわせてどうぞ</p>



<h2 class="wp-block-heading">そもそもJSONって何？という人向けの基礎</h2>



<p class="wp-block-paragraph">「JSONって言葉は聞くけど、よく分かってない」という方のために、ここで一度ざっくり整理しておきます、もう分かってる方は読み飛ばしてOKです</p>



<p class="wp-block-paragraph">JSON(<strong>J</strong>ava<strong>S</strong>cript <strong>O</strong>bject <strong>N</strong>otation)は、テキストベースのデータ交換フォーマットです</p>



<p class="wp-block-paragraph">Web APIからデータを取得するとき、他システムとのデータやり取りなど、いろんな場面で使われています、軽量で人間にも機械にも読みやすいのが特徴ですね</p>



<h3 class="wp-block-heading">JSONの基本構造と記述ルール</h3>



<p class="wp-block-paragraph">細かいルールはいくつかありますが、まず押さえておきたいのはこのあたりです</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li>項目名は「&#8221;」(ダブルクォーテーション)で囲む</li>



<li>文字列も「&#8221;」(ダブルクォーテーション)で囲む</li>



<li>数値は小数点を含めてそのまま表記(クォーテーション不要)</li>



<li>真偽値(Boolean)は「true」「false」のどちらか ※小文字、「&#8221;」は付けない</li>



<li>Null値は「null」 ※小文字、「&#8221;」は付けない</li>



<li>「[ ]」で囲んだ配列の中も、上記と同じルール</li>
</ul>



<p class="wp-block-paragraph">形としては「<code>"キー": 値</code>」のセットが基本で、複数のデータを <code>{ }</code> で囲んだものを「オブジェクト」、順序のあるデータの並びを <code>[ ]</code> で囲んだものを「配列」と呼びます</p>



<p class="wp-block-paragraph">このあたりの言葉は、VBA-JSONを使うときに何度も出てくるので、なんとなく頭に入れておくと後がスムーズです</p>



<h3 class="wp-block-heading">JSONのサンプルをExcelの表で考えてみる</h3>



<p class="wp-block-paragraph">JSONはCSVほど一目で分かる形式じゃないので、サンプルと一緒に見方を説明します、この記事ではずっとこのデータを例に進めていきます</p>



<p class="wp-block-paragraph">たとえばこんなJSON形式のデータがあるとして</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="JSON"><code>[{&quot;name&quot;:&quot;Javeo&quot;,&quot;birthdate&quot;:{&quot;year&quot;:2000,&quot;month&quot;:1,&quot;day&quot;:1},&quot;height&quot;:180,&quot;weight&quot;:70,&quot;favorite_foods&quot;:[&quot;Meat&quot;,&quot;Vegetables&quot;],&quot;glasses&quot;:true},{&quot;name&quot;:&quot;Javelin&quot;,&quot;birthdate&quot;:{&quot;year&quot;:2002,&quot;month&quot;:2,&quot;day&quot;:2},&quot;height&quot;:150,&quot;weight&quot;:null,&quot;favorite_foods&quot;:[&quot;Sweets&quot;],&quot;glasses&quot;:false}]</code></pre></div>



<p class="wp-block-paragraph">一行だと分かりづらいので、整形するとこうなります(VSCodeなどのエディタで簡単に整形できます)</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-json" data-lang="JSON"><code>[
  {
    &quot;name&quot;: &quot;Javeo&quot;,
    &quot;birthdate&quot;: {
      &quot;year&quot;: 2000,
      &quot;month&quot;: 1,
      &quot;day&quot;: 1
    },
    &quot;height&quot;: 180,
    &quot;weight&quot;: 70,
    &quot;favorite_foods&quot;: [
      &quot;Meat&quot;,
      &quot;Vegetables&quot;
    ],
    &quot;glasses&quot;: true
  },
  {
    &quot;name&quot;: &quot;Javelin&quot;,
    &quot;birthdate&quot;: {
      &quot;year&quot;: 2002,
      &quot;month&quot;: 2,
      &quot;day&quot;: 2
    },
    &quot;height&quot;: 150,
    &quot;weight&quot;: null,
    &quot;favorite_foods&quot;: [
      &quot;Sweets&quot;
    ],
    &quot;glasses&quot;: false
  }
]</code></pre></div>



<p class="wp-block-paragraph">これをExcel的に表にすると、こんなイメージになります</p>


<div class="c-scrollHint"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="both" class="wp-block-table is-all-centered"><table style="--table-width:1200px;"><tbody><tr><th rowspan="2">name</th><th colspan="3">birthdate</th><th rowspan="2">height</th><th rowspan="2">witght</th><th colspan="2" rowspan="2">favorite_foods</th><th rowspan="2">glasses</th></tr><tr><th>year</th><th>month</th><th>day</th></tr><tr><td>javeo</td><td>2000</td><td>1</td><td>1</td><td>180</td><td>70</td><td>Meat</td><td>Vegetables</td><td>true</td></tr><tr><td>Javelin</td><td>2002</td><td>2</td><td>2</td><td>150</td><td></td><td>Sweets</td><td></td><td>false</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">つまりJSONをざっくり言うと、<strong>項目と値が対になっていて、「{ }」が階層を、「[ ]」が配列のデータ群を表している</strong>と思えばOKです</p>



<p class="wp-block-paragraph">この「JaveoとJavelinの2人分のデータ」を、これからVBA-JSONで取り出していきます</p>



<h2 class="wp-block-heading">VBA-JSONの導入手順(2026年版)</h2>



<p class="wp-block-paragraph">ここが一番大事なパートです、導入でつまずく人が多いので、順番にやっていきましょう</p>



<p class="wp-block-paragraph">やることは大きく分けて2つ、<strong><span class="swl-marker mark_yellow">「JsonConverter.basのインポート」と「参照設定」</span></strong>だけです</p>



<div class="swell-block-step" data-num-style="circle">
<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l"><strong>ライブラリのダウンロード</strong></div><div class="swell-block-step__body">
<p class="wp-block-paragraph">GitHubの<a href="https://github.com/VBA-tools/VBA-JSON" target="_blank" rel="noreferrer noopener">VBA-tools/VBA-JSON</a>リポジトリにアクセス</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l"><strong>ファイルを探す</strong></div><div class="swell-block-step__body">
<p class="wp-block-paragraph">ページ内にある「<code>JsonConverter.bas</code>」をダウンロード</p>



<p class="wp-block-paragraph">※何年も更新されていませんが、文字列を分解するだけのプログラムで特に改良点がないってだけなので気にせずどうぞ</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l"><strong>VBAへのインポート</strong></div><div class="swell-block-step__body">
<p class="wp-block-paragraph">VBAで使えるようにするにはVBEの画面でインポートするだけ</p>



<div class="wp-block-media-text is-stacked-on-mobile"><figure class="wp-block-media-text__media"><a href="https://javeo.jp/wp-content/uploads/2022/02/image-6.png"><img decoding="async" width="298" height="398" src="https://javeo.jp/wp-content/uploads/2022/02/image-6.png" alt="" class="wp-image-159 size-full" srcset="https://javeo.jp/wp-content/uploads/2022/02/image-6.png 298w, https://javeo.jp/wp-content/uploads/2022/02/image-6-225x300.png 225w" sizes="(max-width: 298px) 100vw, 298px" /></a></figure><div class="wp-block-media-text__content">
<p class="wp-block-paragraph">プロジェクトエクスプローラー<br>右クリック→「ファイルのインポート」</p>
</div></div>



<p class="wp-block-paragraph">もしくは「JsonConverter.bas」をプロジェクトエクスプローラーへドラッグ&amp;ドロップでもOK</p>



<figure class="wp-block-image size-full"><a href="https://javeo.jp/wp-content/uploads/2022/02/VBA-JSONをインポート.gif"><img decoding="async" width="868" height="474" src="https://javeo.jp/wp-content/uploads/2022/02/VBA-JSONをインポート.gif" alt="" class="wp-image-167"/></a></figure>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">Microsoft Scripting Runtime に参照設定する</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">VBA-JSONを動かすには参照設定が要ります</p>



<p class="wp-block-paragraph">VBA-JSONは内部で「Dictionary」という、キーと値をセットで扱うデータの入れ物を使っています、このDictionaryをそのまま書くスタイル(早期バインディングと言います)で動かすために、<strong><span class="swl-marker mark_yellow">Microsoft Scripting Runtime への参照設定が必要</span></strong>になります</p>



<p class="wp-block-paragraph">設定はVBEのメニューからで、手順はこうです</p>



<ol style="background-color:#f8fbfd" class="wp-block-list -list-under-dashed has-background">
<li>VBEのメニューで「ツール → 参照設定」を開く</li>



<li>一覧から「<code>Microsoft Scripting Runtime</code>」を探す</li>



<li>チェックボックスにチェックを入れて「OK」を押す</li>
</ol>



<p class="wp-block-paragraph">これを忘れると、コードを実行したときに「ユーザー定義型は定義されていません」というエラーが出ます、後ろのFAQでも触れますが、この参照設定はかなりの確率でハマるので先に済ませておくのがおすすめです</p>
</div></div>
</div>



<h3 class="wp-block-heading">Mac の Excel で使う場合</h3>



<p class="wp-block-paragraph">MacのExcelには Microsoft Scripting Runtime が無いので、参照設定の代わりに同じ作者の「<strong>VBA-Dictionary</strong>」というライブラリを一緒に入れます</p>



<p class="wp-block-paragraph"><a href="https://github.com/VBA-tools/VBA-Dictionary" target="_blank" rel="noopener noreferrer">VBA-tools/VBA-Dictionary</a> から <code>Dictionary.cls</code> をダウンロードして、JsonConverter.bas と同じようにインポートすればOKです、WindowsとMacの両方で動かしたいときも、参照設定ではなくこのVBA-Dictionaryを使う形にしておくと安心ですね</p>



<p class="wp-block-paragraph">ここまでできたら準備は完了です、いよいよ実際にJSONを扱っていきます</p>



<h2 class="wp-block-heading">ParseJson でJSONを解析(パース)してみる</h2>



<p class="wp-block-paragraph">JSON形式のテキストを、VBAで扱えるデータ構造(DictionaryやCollection)に変換することを「<strong>解析(パース)</strong>」と言います</p>



<p class="wp-block-paragraph">このパースが、<code>ParseJson</code> 関数を使えば<strong>たった一行で完了</strong>します</p>



<p class="wp-block-paragraph">まずはWeb APIからJSONを取ってきてパースする、いちばんよくある形のサンプルです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>&#39; /// 事前準備 ///
&#39; VBEの [ツール] &gt; [参照設定] から下記にチェックを入れる
&#39; ・Microsoft Scripting Runtime   (Dictionary用、VBA-JSONに必須)
&#39; ・Microsoft XML, v6.0           (APIを叩く場合)
Sub GetJsonData()
    Dim http As Object
    Dim jsonText As String
    Dim parsedData As Object &#39; 解析後のデータ格納用

    &#39; Web APIからJSONデータを取得(例)
    Set http = CreateObject(&quot;MSXML2.XMLHTTP&quot;)
    http.Open &quot;GET&quot;, &quot;https://javeo.jp/wp-json/test/v1/data&quot;, False
    http.send
    jsonText = http.responseText

    &#39; ここがVBA-JSONの本体、JSONを解析
    Set parsedData = ParseJson(jsonText)

    &#39; 解析したデータをデバッグ出力
    Debug.Print &quot;名前: &quot; & parsedData(1)(&quot;name&quot;)
    Debug.Print &quot;身長: &quot; & parsedData(1)(&quot;height&quot;)

    Set http = Nothing
    Set parsedData = Nothing
End Sub</code></pre></div>



<p class="wp-block-paragraph">長く見えるかもしれませんが、VBA-JSONを使っている箇所は、結局このたった一行だけです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Set parsedData = ParseJson(jsonText)</code></pre></div>



<p class="wp-block-paragraph">この一行を通すことで、最初のサンプルにあった「長いただの文字列」が、<code>parsedData(1)("name")</code> といった具合に<strong>要素を指定してデータを取り出せる構造</strong>に変わります</p>



<p class="wp-block-paragraph">APIを使わず、手元の文字列をそのままパースして試すこともできます、まずは動きを確かめたいときはこちらが手っ取り早いです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Sub ParseSample()
    Dim jsonText As String
    Dim parsedData As Object

    &#39; 動作確認用に文字列を直接用意
    jsonText = &quot;[{&quot;&quot;name&quot;&quot;:&quot;&quot;Javeo&quot;&quot;,&quot;&quot;height&quot;&quot;:180}]&quot;

    Set parsedData = ParseJson(jsonText)

    Debug.Print parsedData(1)(&quot;name&quot;) &#39; → Javeo
    Debug.Print parsedData(1)(&quot;height&quot;) &#39; → 180
End Sub</code></pre></div>



<p class="wp-block-paragraph">VBAの中で「&#8221;」を書くときは「&#8221;&#8221;」と2つ重ねる必要があるので、そこだけ少し読みづらいですが、やっていることは「文字列をパースして取り出す」だけです</p>



<h2 class="wp-block-heading">パースしたJSONから値を取り出す(配列・オブジェクト・ネスト)</h2>



<p class="wp-block-paragraph">ここがVBA-JSONを使ううえで一番つまずきやすく、そして一番大事なところです</p>



<p class="wp-block-paragraph">ポイントは、<strong>パース後のデータが「Dictionary」と「Collection」の2種類に化けている</strong>という点です</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li>JSONの「{ }」(オブジェクト)→ <strong>Dictionary</strong> になる(キー名で取り出す)</li>



<li>JSONの「[ ]」(配列)→ <strong>Collection</strong> になる(番号で取り出す)</li>
</ul>



<p class="wp-block-paragraph">この区別さえ分かれば、あとは指定の仕方が決まります、サンプルの「JaveoとJavelinのデータ」を例に、ひとつずつ見ていきましょう</p>



<h3 class="wp-block-heading">配列(Collection)は番号で取り出す</h3>



<p class="wp-block-paragraph">サンプルのJSONは全体が「[ ]」で囲まれた配列なので、パース直後の <code>parsedData</code> はCollectionになっています</p>



<p class="wp-block-paragraph">Collectionは「何番目」という番号(インデックス)で要素を取り出します、<strong>VBAのCollectionは1番から始まる</strong>のがポイントで、0番からじゃないので注意です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>&#39; 1人目(Javeo)のデータを取り出す
Set firstPerson = parsedData(1)

&#39; 2人目(Javelin)のデータを取り出す
Set secondPerson = parsedData(2)</code></pre></div>



<h3 class="wp-block-heading">オブジェクト(Dictionary)はキー名で取り出す</h3>



<p class="wp-block-paragraph">取り出した1人分のデータ(<code>parsedData(1)</code>)は「{ }」のオブジェクトなので、こちらはDictionaryです</p>



<p class="wp-block-paragraph">Dictionaryは番号ではなく、<strong>キー名(項目名)を指定して</strong>値を取り出します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>&#39; 1人目の名前と身長
Debug.Print parsedData(1)(&quot;name&quot;)   &#39; → Javeo
Debug.Print parsedData(1)(&quot;height&quot;) &#39; → 180

&#39; 真偽値もそのまま取れる
Debug.Print parsedData(1)(&quot;glasses&quot;) &#39; → True</code></pre></div>



<p class="wp-block-paragraph"><code>parsedData(1)("name")</code> は「配列の1番目(Collection)→ その中のnameキー(Dictionary)」という読み方になります、カッコが連続するのは、この2段階を一気に書いているからなんですね</p>



<h3 class="wp-block-heading">ネスト(入れ子)は同じ要領でつなげる</h3>



<p class="wp-block-paragraph">サンプルの <code>birthdate</code> は、中にさらに <code>year / month / day</code> を持つ「入れ子のオブジェクト」です、こういうネストも、考え方は同じでカッコをつなげるだけです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>&#39; 1人目の生年月日(birthdateの中のyear)
Debug.Print parsedData(1)(&quot;birthdate&quot;)(&quot;year&quot;)  &#39; → 2000
Debug.Print parsedData(1)(&quot;birthdate&quot;)(&quot;month&quot;) &#39; → 1

&#39; 配列の中の値(favorite_foodsの1個目)
Debug.Print parsedData(1)(&quot;favorite_foods&quot;)(1) &#39; → Meat</code></pre></div>



<p class="wp-block-paragraph">コツは、<strong><span class="swl-marker mark_yellow">「{ }が来たらキー名」「[ ]が来たら番号」をJSONの形に合わせて交互に書いていく</span></strong>だけ、整形したJSONを見ながら指でたどると間違えにくいです</p>



<h3 class="wp-block-heading">ループでまとめて処理する</h3>



<p class="wp-block-paragraph">実際の業務では「全員分をシートに書き出す」みたいに、繰り返し処理(ループ)で回すことがほとんどです</p>



<p class="wp-block-paragraph">配列(Collection)は <code>For Each</code> でぐるっと回せます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Sub WriteToSheet()
    Dim parsedData As Object
    Dim person As Object
    Dim i As Long

    Set parsedData = ParseJson(jsonText) &#39; jsonTextは取得済みとする

    i = 1
    &#39; 配列の要素(1人分のデータ)を1件ずつ取り出す
    For Each person In parsedData
        Cells(i, 1).Value = person(&quot;name&quot;)
        Cells(i, 2).Value = person(&quot;height&quot;)
        Cells(i, 3).Value = person(&quot;birthdate&quot;)(&quot;year&quot;)
        i = i + 1
    Next person
End Sub</code></pre></div>



<p class="wp-block-paragraph">キー名が分からないオブジェクトを総当たりで見たいときは、<code>.Keys</code> でキー一覧を回す手もあります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Dim key As Variant
&#39; 1人目のオブジェクトのキーと値を全部出す
For Each key In parsedData(1).Keys
    Debug.Print key & &quot; = &quot; & parsedData(1)(key)
Next key</code></pre></div>



<p class="wp-block-paragraph">ここまでで「読み込む(パース)」側はバッチリです、配列は番号・オブジェクトはキー名、これさえ押さえれば、たいていのJSONは取り出せます</p>



<h2 class="wp-block-heading">ConvertToJson でVBAのデータをJSONに変換(生成)</h2>



<p class="wp-block-paragraph">今度は逆方向、つまりVBAのDictionaryやCollectionから<strong>JSON文字列を作る(生成する)</strong>パターンです、こちらは <code>ConvertToJson</code> 関数を使います</p>



<p class="wp-block-paragraph">「VBAで作ったデータをAPIに送りたい」「JSON形式でファイルに保存したい」みたいなときに出番があります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Sub CreateJsonString()
    Dim postData As Object
    Dim skillsCollection As Collection
    Dim jsonString As String

    &#39; データを格納する親オブジェクトを準備
    Set postData = CreateObject(&quot;Scripting.Dictionary&quot;)

    &#39; 基本的なキーと値を追加
    postData(&quot;name&quot;) = &quot;鈴木 一郎&quot;
    postData(&quot;age&quot;) = 25

    &#39; 配列用のオブジェクトを「Collection」で準備
    Set skillsCollection = New Collection

    &#39; Collectionにデータを追加
    skillsCollection.Add &quot;Word&quot;
    skillsCollection.Add &quot;PowerPoint&quot;

    &#39; 親オブジェクトにCollectionを追加
    postData.Add &quot;skills&quot;, skillsCollection

    &#39; DictionaryをJSON文字列に変換
    jsonString = ConvertToJson(postData)

    &#39; 結果をイミディエイトウィンドウに出力
    Debug.Print jsonString
    &#39; 想定される出力: {&quot;name&quot;:&quot;鈴木 一郎&quot;,&quot;age&quot;:25,&quot;skills&quot;:[&quot;Word&quot;,&quot;PowerPoint&quot;]}

    &#39; オブジェクトの解放
    Set postData = Nothing
    Set skillsCollection = Nothing
End Sub</code></pre></div>



<p class="wp-block-paragraph">ポイントは、<strong><span class="swl-marker mark_yellow">JSONの「{ }」はDictionary、「[ ]」はCollectionで組み立てる</span></strong>という点です、パースのときと逆の対応関係になっているだけなので、慣れると自然に書けるようになります</p>



<p class="wp-block-paragraph">この <code>jsonString</code> をWeb APIに送信(POSTなど)すれば、VBAで作ったデータをサーバーに送れます</p>



<h3 class="wp-block-heading">改行付きで見やすく出力したいとき</h3>



<p class="wp-block-paragraph">デフォルトのままだと、生成されるJSONは改行なしの一行になります、人が読む用にきれいに整形したいときは、<code>Whitespace</code> オプションを付けます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>&#39; インデント2つ分で改行を入れて整形
jsonString = ConvertToJson(postData, Whitespace:=2)</code></pre></div>



<p class="wp-block-paragraph">ファイルに保存して中身を確認したいときなんかは、こちらのほうが見やすくておすすめです</p>



<h2 class="wp-block-heading">VBA-JSONを使わずにJSONを扱う方法(JScript)</h2>



<p class="wp-block-paragraph">ここまでVBA-JSONをおすすめしてきましたが、「ライブラリを追加したくない」「配布先でインポートさせるのが面倒」というケースもありますよね</p>



<p class="wp-block-paragraph">そういうときの代替案として、<strong>Windows標準のJScriptエンジンを使ってJSONをパースする方法</strong>もあるので紹介しておきます</p>



<p class="wp-block-paragraph">JScriptはWindowsに最初から入っているスクリプト実行の仕組みで、これを <code>ScriptControl</code> という部品から呼び出すと、JavaScriptの <code>JSON.parse</code> をVBAから間接的に使えます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Sub ParseByJScript()
    Dim sc As Object
    Dim jsonText As String
    Dim parsed As Object

    jsonText = &quot;{&quot;&quot;name&quot;&quot;:&quot;&quot;Javeo&quot;&quot;,&quot;&quot;height&quot;&quot;:180}&quot;

    &#39; JScriptエンジンを用意
    Set sc = CreateObject(&quot;ScriptControl&quot;)
    sc.Language = &quot;JScript&quot;

    &#39; JavaScriptのJSON.parseで解析
    Set parsed = sc.Eval(&quot;(&quot; & jsonText & &quot;)&quot;)

    &#39; プロパティ名で値を取り出す
    Debug.Print parsed.name   &#39; → Javeo
    Debug.Print parsed.height &#39; → 180
End Sub</code></pre></div>



<p class="wp-block-paragraph">この方法のメリットは、外部ライブラリのインポートが要らないことです</p>



<p class="wp-block-paragraph">ただ、いくつか弱点もあって、正直なところ常用にはVBA-JSONのほうが向いています</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li><code>ScriptControl</code> は32bit版のOfficeでしか動かない(64bit版では別の書き方が必要)</li>



<li>取り出した値の扱い(配列やネスト)がVBA-JSONより少しクセがある</li>



<li>Macでは使えない</li>
</ul>



<p class="wp-block-paragraph">なので個人的には、<strong><span class="swl-marker mark_yellow">基本はVBA-JSON、どうしてもライブラリを足せない事情があるときだけJScript</span></strong>という使い分けがおすすめです</p>



<h2 class="wp-block-heading">VBA-JSONのよくあるつまずき・FAQ</h2>



<p class="wp-block-paragraph">VBA-JSONでハマりやすいポイントを、質問形式でまとめておきます、エラーが出たらまずここを確認してみてください</p>



<h3 class="wp-block-heading">「ユーザー定義型は定義されていません」と出る</h3>



<p class="wp-block-paragraph">これは <strong><span class="swl-marker mark_yellow">参照設定の漏れ</span></strong>がほぼ原因です</p>



<p class="wp-block-paragraph">VBA-JSONはDictionaryを使うので、WindowsのExcelなら「ツール → 参照設定」で <code>Microsoft Scripting Runtime</code> にチェックが入っているか確認してください、入っていなければチェックを入れて保存し、もう一度実行すれば直ります</p>



<p class="wp-block-paragraph">MacのExcelの場合は、前述のVBA-Dictionary(<code>Dictionary.cls</code>)を取り込んでいるかを確認しましょう</p>



<h3 class="wp-block-heading">「KeyNotFoundError」のようなエラーが出る</h3>



<p class="wp-block-paragraph">これは、<strong>JSONに存在しないキー名を指定して取り出そうとした</strong>ときに出るエラーです</p>



<p class="wp-block-paragraph">キー名のタイプミス、大文字小文字の違い、そもそもそのキーが無いJSONだった、あたりが定番の原因ですね</p>



<p class="wp-block-paragraph">このエラーはハマりやすいので、原因の切り分けと対処法を <a href="https://javeo.jp/vba-json-error/" target="_blank" rel="noopener noreferrer">VBA-JSONでKeyNotFoundErrorが発生するときの対処をまとめた記事</a> で別途くわしく解説しています、同じエラーで止まっている方はそちらをどうぞ</p>



<h3 class="wp-block-heading">日本語が文字化けする</h3>



<p class="wp-block-paragraph">Web APIから取得したJSONの日本語が文字化けする場合は、<strong>文字コードの取り違え</strong>が原因のことが多いです</p>



<p class="wp-block-paragraph">多くのAPIはUTF-8で返してくるので、<code>responseText</code> をそのまま使うとShift_JIS環境で化けることがあります、その場合は <code>responseBody</code>(バイト列)を取得して、UTF-8として読み直すと直ります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>Dim stream As Object
Set stream = CreateObject(&quot;ADODB.Stream&quot;)
stream.Open
stream.Type = 1               &#39; バイナリ
stream.Write http.responseBody
stream.Position = 0
stream.Type = 2               &#39; テキスト
stream.Charset = &quot;UTF-8&quot;       &#39; UTF-8として読み直す
jsonText = stream.ReadText
stream.Close</code></pre></div>



<h3 class="wp-block-heading">キーがあるか分からないとき、どう書けばいい？</h3>



<p class="wp-block-paragraph">キーが存在するか不安なときは、取り出す前に <code>.Exists</code> でチェックすると安全です(Dictionaryの機能です)</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="VBA"><code>If parsedData(1).Exists(&quot;weight&quot;) Then
    Debug.Print parsedData(1)(&quot;weight&quot;)
Else
    Debug.Print &quot;weightキーはありません&quot;
End If</code></pre></div>



<p class="wp-block-paragraph">これを挟んでおくと、キーが無いJSONが来てもエラーで止まらずに処理を続けられます</p>



<h2 class="wp-block-heading">VBA-JSONの活用例</h2>



<p class="wp-block-paragraph">導入と使い方が分かったところで、「で、実際どんなことに使えるの？」というイメージを少し具体的にしておきます</p>



<p class="wp-block-paragraph">いちばん多いのは、やはり <strong><span class="swl-marker mark_yellow">Web APIのレスポンス(JSON)をパースしてシートに展開する</span></strong>パターンです、為替レート・天気・在庫情報みたいな「外部の最新データ」をExcelに自動で取り込めると、手作業のコピペがまるごと無くなります</p>



<p class="wp-block-paragraph">たとえばフリマやECのAPIを叩いて、出品データや売上をExcelに集計する、みたいな使い方ですね、APIへリクエストを送る具体的な書き方は <a href="https://javeo.jp/ebay-api-request/" target="_blank" rel="noopener noreferrer">eBay APIにVBAでリクエストを送る方法の記事</a> にまとめているので、JSONパースと組み合わせると一通りの流れがつかめます</p>



<p class="wp-block-paragraph">逆に <code>ConvertToJson</code> 側だと、VBAで組み立てたデータをJSONにして、メール本文やAPIのリクエストボディに載せる、といった使い方ができます、VBAから自動でメールを送る仕組みは <a href="https://javeo.jp/vba-gmail-send/" target="_blank" rel="noopener noreferrer">VBAでGmailを送信する方法の記事</a> で扱っているので、データ生成と通知を組み合わせたい方はあわせてどうぞ</p>



<p class="wp-block-paragraph">そもそもVBA自体がはじめてで「Dim とか For Each の書き方からあやしい…」という方は、先に <a href="https://javeo.jp/vba-beginner-001/" target="_blank" rel="noopener noreferrer">VBA入門の記事</a> で基礎をさらっておくと、この記事のコードもぐっと読みやすくなると思います</p>



<h2 class="wp-block-heading">AIにVBA-JSONのコードを書いてもらうコツ</h2>



<p class="wp-block-paragraph">最近はClaudeやChatGPTにVBAコードを書いてもらう人も増えてきました、もちろんVBA-JSONを使ったコードも、頼めば書いてくれます</p>



<p class="wp-block-paragraph">ただ、AIにそのまま「VBAでJSONをパースして」と頼むと、<strong>意図しない実装を返してくる</strong>ことがあるんですよね</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li>VBA-JSONを使わず、自前のJSON解析関数をゼロから書こうとする</li>



<li>参照設定の前提がズレていて、そのままだと動かないコードを返す</li>



<li>標準機能だけで無理やり読もうとして、やたら長いコードになる</li>
</ul>



<p class="wp-block-paragraph">こうしたズレを避けるには、依頼するときに次のような前提を明示するのがおすすめです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-lang="AIへの依頼例"><code>VBAで○○のJSONデータをパースするコードを書いてほしい
前提:
- VBA-JSON(JsonConverter.bas)を導入済み
- ParseJson の戻り値を Dictionary / Collection として直接扱う
- 参照設定は Microsoft Scripting Runtime を入れている前提
- 配列は番号、オブジェクトはキー名でアクセスする形で</code></pre></div>



<p class="wp-block-paragraph">エラーが出たときも、コードとエラーメッセージをまとめて貼り付ければ、AIが原因と対処をだいたい提示してくれます、自分でハマる時間がかなり減らせるので、これは活用しない手はないです</p>



<p class="wp-block-paragraph">ClaudeでVBAコードを書いてもらう基本的な流れは <a href="https://javeo.jp/claude-howto-beginner/" target="_blank" rel="noopener noreferrer">Claudeの使い方を初心者向けに解説した記事</a> にまとめているので、AIにコードを頼むのが初めての方は、そちらから読むとスムーズだと思います</p>



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



<p class="wp-block-paragraph">VBA-JSONを使えば、これまでVBAでは扱いにくかったJSONが、ぐっと身近になります</p>



<p class="wp-block-paragraph">導入のポイントはこの2つだけです</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li><code>JsonConverter.bas</code> をVBEにインポートする</li>



<li><code>Microsoft Scripting Runtime</code> に参照設定する(Macは VBA-Dictionary)</li>
</ul>



<p class="wp-block-paragraph">使い方も、覚える関数は2つだけです</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li><strong>JSONを読み込むなら <code>ParseJson</code></strong>(配列は番号、オブジェクトはキー名で取り出す)</li>



<li><strong>JSONを書き出すなら <code>ConvertToJson</code></strong>(「{ }」はDictionary、「[ ]」はCollectionで組む)</li>
</ul>



<p class="wp-block-paragraph">この導入2ステップと関数2つさえ押さえれば、Web APIとの連携をはじめ、VBAでできることの幅がかなり広がります</p>



<p class="wp-block-paragraph">まずは手元の短いJSONを <code>ParseJson</code> に通して、<code>Debug.Print</code> で1個取り出してみるところから始めると、感覚がつかみやすいと思います</p>


<div class="p-blogParts post_content" data-partsID="4601">
<div class="jv-books" id="jv-books-vba" data-shelf="vba"><div class="jv-books-head"><span class="jv-books-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> VBAの独学に効く本</span><span class="jv-books-pr">PR</span></div><div class="jv-books-grid"><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240" alt="Excel VBA塾【動画×本で学ぶ!】" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel VBA塾【動画×本で学ぶ!】</p><p class="jv-book-author">たてばやし淳</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4839975728">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4839975728">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240" alt="パーフェクトExcel VBA" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">パーフェクトExcel VBA</p><p class="jv-book-author">高橋宣成</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4297108755">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4297108755">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240" alt="Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版</p><p class="jv-book-author">国本温子</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4815631298">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4815631298">楽天で見る</a></div></div></div></div><p class="jv-books-note">私のおすすめからランダムで3冊を表示しています</p></div>
<style>
.jv-books{border:1px solid #e0e0e0;border-radius:8px;padding:16px;margin:1.5em 0;background:#fff}
.jv-books-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.jv-books-title{font-weight:700;font-size:1.05em}
.jv-books-pr{font-size:.7em;color:#888;border:1px solid #ccc;border-radius:3px;padding:1px 6px;flex-shrink:0}
.jv-books-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;min-height:330px}
.jv-book-card{display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid #f0f0f0;border-radius:6px;padding:12px 8px;background:#fafafa}
.jv-book-cover img{width:auto;max-width:120px;height:170px;object-fit:contain}
.jv-book-info{width:100%;flex:1;display:flex;flex-direction:column}
.jv-book-title{font-size:.82em;font-weight:600;line-height:1.4;margin:8px 0 2px;min-height:2.8em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jv-book-author{font-size:.72em;color:#777;margin:0 0 8px}
.jv-book-btns{display:flex;flex-direction:column;gap:6px;width:100%;margin-top:auto}
.jv-btn{display:block;text-align:center;font-size:.78em;font-weight:600;color:#fff!important;text-decoration:none!important;border-radius:4px;padding:7px 4px;line-height:1.2}
.jv-btn-az{background:#e88b00}
.jv-btn-rk{background:#bf0000}
.jv-btn:hover{opacity:.85}
.jv-books-note{font-size:.7em;color:#999;text-align:right;margin:8px 0 0}
@media(max-width:599px){
.jv-books-grid{grid-template-columns:1fr;min-height:0}
.jv-book-card{flex-direction:row;text-align:left;gap:12px}
.jv-book-cover img{height:110px;max-width:80px}
.jv-book-info{min-width:0}
.jv-book-title{min-height:0}
.jv-book-btns{flex-direction:row}
.jv-btn{flex:1}
}
</style>
<script>
(function(){
var SHELF='vba';
var root=document.getElementById('jv-books-'+SHELF);
if(!root||root.dataset.init)return;
root.dataset.init='1';
var POOL=[{"t": "Excel VBA塾【動画×本で学ぶ!】", "a": "たてばやし淳", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F", "id": "4839975728"}, {"t": "パーフェクトExcel VBA", "a": "高橋宣成", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F", "id": "4297108755"}, {"t": "Excel マクロ&VBA［実践ビジネス入門講座］完全版 第3版", "a": "国本温子", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F", "id": "4815631298"}, {"t": "増強改訂版 できる イラストで学ぶ 入社1年目からのExcel VBA", "a": "きたみあきこ", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8414/9784295018414.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4295018414?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F", "id": "4295018414"}];
var REL='nofollow sponsored noopener noreferrer';
function el(tag,cls){var e=document.createElement(tag);if(cls)e.className=cls;return e;}
function btn(href,cls,label,mall,id){
var a=el('a','jv-btn '+cls);a.href=href;a.target='_blank';a.rel=REL;a.textContent=label;
a.setAttribute('data-shelf',SHELF);a.setAttribute('data-mall',mall);a.setAttribute('data-book',id);
return a;}
function card(b){
var d=el('div','jv-book-card');
var cover=el('a','jv-book-cover');cover.href=b.az;cover.target='_blank';cover.rel=REL;
var img=el('img');img.src=b.img;img.alt=b.t;img.width=120;img.height=170;img.loading='lazy';
cover.appendChild(img);
var info=el('div','jv-book-info');
var ttl=el('p','jv-book-title');ttl.textContent=b.t;
var au=el('p','jv-book-author');au.textContent=b.a;
var btns=el('div','jv-book-btns');
btns.appendChild(btn(b.az,'jv-btn-az','Amazonで見る','amazon',b.id));
if(b.rk){btns.appendChild(btn(b.rk,'jv-btn-rk','楽天で見る','rakuten',b.id));}
info.appendChild(ttl);info.appendChild(au);info.appendChild(btns);
d.appendChild(cover);d.appendChild(info);
return d;}
var pool=POOL.slice();
for(var i=pool.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1));var t=pool[i];pool[i]=pool[j];pool[j]=t;}
var grid=root.querySelector('.jv-books-grid');
grid.style.opacity='0';
while(grid.firstChild)grid.removeChild(grid.firstChild);
pool.slice(0,3).forEach(function(b){grid.appendChild(card(b));});
grid.style.transition='opacity .5s ease';
void grid.offsetWidth;
grid.style.opacity='1';
})();
</script>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/vba-json/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA】VBAでもWebDriverWaitを使いたい</title>
		<link>https://javeo.jp/vba-webdriverwait/</link>
					<comments>https://javeo.jp/vba-webdriverwait/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Sun, 07 Sep 2025 14:44:23 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[SeleniumBasic]]></category>
		<category><![CDATA[スクレイピング]]></category>
		<category><![CDATA[マクロ]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=3569</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2024/07/ExcelVBA-1024x512.jpg" class="webfeedsFeaturedVisual" /></p>待機処理が必要な理由 SeleniumでWebサイトを操作するときにありがちな内容がこちら これらを解決するには「要素が存在する・表示される・有効になる」まで待機処理が必要です WebDriverWaitクラスでできるこ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2024/07/ExcelVBA-1024x512.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p class="wp-block-paragraph">PythonでSeleniumを利用するときに利用必須ともいえるWebDriverWaitとexpected_conditionsですが、残念ながらVBAにはありません</p>



<p class="wp-block-paragraph">この記事では、<strong>VBAでWebDriverWait</strong>+expected_conditions<strong>を再現するクラス</strong>を作り、有用な待機処理を実現します</p>



<p class="wp-block-paragraph">※Pythonの場合はこちらをどうぞ</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-excel-python wp-block-embed-excel-python"><div class="wp-block-embed__wrapper">
https://javeo.jp/python_wait/
</div></figure>
</div>



<h2 class="wp-block-heading">待機処理が必要な理由</h2>



<p class="wp-block-paragraph">SeleniumでWebサイトを操作するときにありがちな内容がこちら</p>



<ul class="wp-block-list">
<li>ページロードが完了していないうちに要素を取得してエラー</li>



<li>JavaScriptで動的に生成されるボタンや入力欄がまだ非表示</li>



<li>ボタンが表示されてもクリック可能になる前に操作しようとしてエラー</li>
</ul>



<p class="wp-block-paragraph">これらを解決するには「要素が存在する・表示される・有効になる」まで待機処理が必要です</p>



<h2 class="wp-block-heading">WebDriverWaitクラスでできること</h2>



<p class="wp-block-paragraph">今回作ったVBAクラス <code>WebDriverWait</code> は、PythonのWebDriverWaitに近い操作性で以下の条件を待機できます</p>



<figure class="wp-block-table"><table><thead><tr><th>メソッド</th><th>説明</th></tr></thead><tbody><tr><td><code>UntilPresence(By)</code></td><td>DOM上に指定した <code>By</code> が存在するまで待機</td></tr><tr><td><code>UntilVisibleLocated(By)</code></td><td>画面上に <code>By</code> で指定した要素が表示されるまで待機 (<code>IsDisplayed</code>)</td></tr><tr><td><code>UntilVisible(element)</code></td><td>指定した <code>WebElement</code> が表示されるまで待機</td></tr><tr><td><code>UntilEnableLocated(By)</code></td><td>画面上に <code>By</code> で指定した要素が利用可能になるまで待機 (<code>IsDisplayed &amp; IsEnabled</code>)</td></tr><tr><td><code>UntilEnable(element)</code></td><td>指定した <code>WebElement</code> が利用可能になるまで待機</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ポイント：</p>



<ul class="wp-block-list">
<li>成功時は <code>WebElement</code> を返す</li>



<li>タイムアウト時は <code>Nothing</code> を返す</li>



<li>Pythonのように例外処理に頼らずVBAらしい安全な設計</li>
</ul>



<h2 class="wp-block-heading">VBA版WebDriverWaitの実装例</h2>



<p class="wp-block-paragraph">以下のクラスモジュールをVBAに追加してください※クラス名は <strong><code>WebDriverWait</code></strong> にしています</p>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2025/09/image.jpg"><img decoding="async" width="1024" height="538" src="https://javeo.jp/wp-content/uploads/2025/09/image-1024x538.jpg" alt="" class="wp-image-3570" srcset="https://javeo.jp/wp-content/uploads/2025/09/image-1024x538.jpg 1024w, https://javeo.jp/wp-content/uploads/2025/09/image-300x158.jpg 300w, https://javeo.jp/wp-content/uploads/2025/09/image-150x79.jpg 150w, https://javeo.jp/wp-content/uploads/2025/09/image-768x403.jpg 768w, https://javeo.jp/wp-content/uploads/2025/09/image.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<div class="wp-block-cocoon-blocks-toggle-box-1 toggle-wrap toggle-box block-box not-nested-style cocoon-block-toggle"><input id="toggle-checkbox-202509242213270" class="toggle-checkbox" type="checkbox"/><label class="toggle-button" for="toggle-checkbox-202509242213270">プログラムを見る</label><div class="toggle-content">
<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-file="WebDriverWait " data-lang="Visual Basic + VBA"><code>&#39;--- クラス名: WebDriverWait ---
Option Explicit
&#39;====================================================================================================
&#39; PythonのWebDriverWaitの一部を再現したクラス
&#39; ※条件に合致した場合はWebElementを返して一致しなかった場合はNothingを返す
&#39;   - UntilPresenceeLocated・DOM上に指定したelementが表示されるまで待機は発生し得ないから準備していない
&#39;   - UntilPresence・・・・・DOM上に指定したByが表示されるまで待機
&#39;   - UntilVisibleLocated・・画面上に指定したelementが表示されるまで待機（IsDisplayed）
&#39;   - UntilVisible ・・・・・画面上に指定したByが表示されるまで待機（IsDisplayed）
&#39;   - UntilEnableLocated・・画面上に指定したelementが利用できるまで待機（IsDisplayed & IsEnabled）
&#39;   - UntilEnable ・・・・・画面上に指定したByが利用できるまで待機（IsDisplayed & IsEnabled）
&#39;====================================================================================================
Private pDriver As Selenium.WebDriver
Private pTimeout As Double
Private pInterval As Double

Public Sub Init(driver As Selenium.WebDriver, Optional timeoutSeconds As Double = 10, Optional intervalSeconds As Double = 0.5)
    Set pDriver = driver
    pTimeout = timeoutSeconds
    pInterval = intervalSeconds
End Sub

&#39; Presence
Public Function UntilPresence(By As Selenium.By) As Selenium.WebElement
    Dim start As Double: start = Timer
    Dim elem As Selenium.WebElement
    
    Do
        On Error Resume Next
        Set elem = pDriver.FindElement(By)
        On Error GoTo 0
        
        If Not elem Is Nothing Then
            Set UntilPresence = elem
            Exit Function
        End If
        
        DoEvents
        Application.wait Now + TimeSerial(0, 0, pInterval)
    Loop While Timer - start &lt; pTimeout
    
    Set UntilPresence = Nothing
End Function

&#39; Visibility (By指定)
Public Function UntilVisibleLocated(By As Selenium.By) As Selenium.WebElement
    Dim start As Double: start = Timer
    Dim elem As Selenium.WebElement
    
    Do
        On Error Resume Next
        Set elem = pDriver.FindElement(By)
        On Error GoTo 0
        
        If Not elem Is Nothing Then
            If elem.IsDisplayed Then
                Set UntilVisibleLocated = elem
                Exit Function
            End If
        End If
        
        DoEvents
        Application.wait Now + TimeSerial(0, 0, pInterval)
    Loop While Timer - start &lt; pTimeout
    
    Set UntilVisibleLocated = Nothing
End Function

&#39; Visibility (element指定)
Public Function UntilVisible(elem As Selenium.WebElement) As Selenium.WebElement
    Dim start As Double: start = Timer
    
    Do
        If Not elem Is Nothing Then
            If elem.IsDisplayed Then
                Set UntilVisible = elem
                Exit Function
            End If
        End If
        
        DoEvents
        Application.wait Now + TimeSerial(0, 0, pInterval)
    Loop While Timer - start &lt; pTimeout
    
    Set UntilVisible = Nothing
End Function

&#39; Enable (By指定)
Public Function UntilEnableLocated(By As Selenium.By) As Selenium.WebElement
    Dim start As Double: start = Timer
    Dim elem As Selenium.WebElement
    
    Do
        On Error Resume Next
        Set elem = pDriver.FindElement(By)
        On Error GoTo 0
        
        If Not elem Is Nothing Then
            If elem.IsDisplayed And elem.IsEnabled Then
                Set UntilEnableLocated = elem
                Exit Function
            End If
        End If
        
        DoEvents
        Application.wait Now + TimeSerial(0, 0, pInterval)
    Loop While Timer - start &lt; pTimeout
    
    Set UntilEnableLocated = Nothing
End Function

&#39; Enable (element指定)
Public Function UntilEnable(elem As Selenium.WebElement) As Selenium.WebElement
    Dim start As Double: start = Timer
    
    Do
        If Not elem Is Nothing Then
            If elem.IsDisplayed And elem.IsEnabled Then
                Set UntilEnable = elem
                Exit Function
            End If
        End If
        
        DoEvents
        Application.wait Now + TimeSerial(0, 0, pInterval)
    Loop While Timer - start &lt; pTimeout
    
    Set UntilEnable = Nothing
End Function
</code></pre></div>
</div></div>



<h2 class="wp-block-heading">使い方サンプル</h2>



<p class="wp-block-paragraph">このブログの練習用ページでテストできるようにしていますので自由にテストしてください</p>



<p class="wp-block-paragraph">ポイントはInit部分で引数は下記の通りです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>wait.Init driver, {最大待機秒数}, {判定間隔}</code></pre></div>



<div class="wp-block-cocoon-blocks-toggle-box-1 toggle-wrap toggle-box block-box not-nested-style cocoon-block-toggle"><input id="toggle-checkbox-202509242213271" class="toggle-checkbox" type="checkbox"/><label class="toggle-button" for="toggle-checkbox-202509242213271">プログラムを見る</label><div class="toggle-content">
<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Sub test()
    Dim driver As New Selenium.ChromeDriver
    Dim By As New Selenium.By
    
    driver.Get &quot;https://javeo.jp/practice_scraping/&quot;

    Dim wait As New WebDriverWait
    wait.Init driver, 10, 0.5

    &#39; presence_of_element_located(By)
    Dim elemUser As Selenium.WebElement
    Set elemUser = wait.UntilPresence(By.Css(&quot;#input_test&quot;))
    

    &#39; visibility_of_element_located(By)
    Dim elemPass As Selenium.WebElement
    Set elemPass = wait.UntilVisibleLocated(By.Css(&quot;#textarea_test&quot;))

    &#39; element_to_be_clickable(By)
    Dim elemBtn As Selenium.WebElement
    Set elemBtn = wait.UntilClickableLocated(By.Css(&quot;[name=&quot;&quot;checkbox_test&quot;&quot;]&quot;))

    
    elemUser.SendKeys &quot;testuser&quot;
    elemPass.SendKeys &quot;secret&quot;
    elemBtn.Click
End Sub
</code></pre></div>
</div></div>



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



<p class="wp-block-paragraph">個人的にPythonでもSeleniumを使うのでWebDriverWaitが使えない不便さを感じていました</p>



<p class="wp-block-paragraph">PythonとVBAでは思想も違うので適当にいじってますが、ほぼ同じように使えてスッキリです！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/vba-webdriverwait/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA】VBA-JSON不要！VBAでChromedriverを自動更新</title>
		<link>https://javeo.jp/vba-chromedriver-auto-update-lite/</link>
					<comments>https://javeo.jp/vba-chromedriver-auto-update-lite/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Sun, 07 Sep 2025 13:09:12 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[SeleniumBasic]]></category>
		<category><![CDATA[スクレイピング]]></category>
		<category><![CDATA[マクロ]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=3564</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2024/07/ExcelVBA-1024x512.jpg" class="webfeedsFeaturedVisual" /></p>やっていること 以前作成したVBAはJSON API endpointsを総当たりで取得していたのでJSONをパースする必要がありましたが、APIでドライバのバージョンを直接取得できることに気づいて少し手順を簡略化できま [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2024/07/ExcelVBA-1024x512.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p class="wp-block-paragraph">以前に別で作成したVBAのChromedriver自動更新プログラムですが色々見直すと実はVBA-JSONなしでも十分ってことに気づいて別途作成しました</p>



<p class="wp-block-paragraph">条件付きの簡略版ではありますのでご自身の環境に合わせて使い分けてください</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-excel-python wp-block-embed-excel-python"><div class="wp-block-embed__wrapper">
https://javeo.jp/vba-chromedriver-auto-update/
</div></figure>
</div>



<h2 class="wp-block-heading">やっていること</h2>



<ol class="wp-block-list has-watery-yellow-background-color has-background">
<li>chromedriverの保存先は端末環境によって違うので候補となる3箇所のフォルダ有無を確認</li>



<li>chromeの保存先も端末環境によって違うので候補となる3箇所のフォルダ有無を確認</li>



<li>PowerShellでchromeのバージョンを取得する<br>※なので一瞬PowerShellの画面がチラつきます</li>



<li>APIでChrome.exeのビルドまで一致している最新chromedriverのダウンロードパスを取得</li>



<li>ダウンロードしたzipファイルを解凍してをseleniumbasic用のフォルダへコピーする</li>
</ol>



<p class="wp-block-paragraph">以前作成したVBAはJSON API endpointsを総当たりで取得していたのでJSONをパースする必要がありましたが、APIでドライバのバージョンを直接取得できることに気づいて少し手順を簡略化できました</p>



<p class="wp-block-paragraph">処理としては数秒しか変わりませんがVBA-JSOＮ不要になったのは個人的にGoodポイント</p>



<p class="is-style-information-box has-box-style wp-block-paragraph">ここからは以前と同じことを書いてますが単独でこのページを見ていただいた方向けです</p>



<h2 class="wp-block-heading">必要な参照設定</h2>



<p class="wp-block-paragraph">このプログラムを実行するために設定した参照設定</p>



<figure class="wp-block-image size-full"><a href="https://javeo.jp/wp-content/uploads/2023/07/image-4.png"><img decoding="async" width="455" height="317" src="https://javeo.jp/wp-content/uploads/2023/07/image-4.png" alt="" class="wp-image-3282" srcset="https://javeo.jp/wp-content/uploads/2023/07/image-4.png 455w, https://javeo.jp/wp-content/uploads/2023/07/image-4-300x209.png 300w, https://javeo.jp/wp-content/uploads/2023/07/image-4-150x105.png 150w" sizes="(max-width: 455px) 100vw, 455px" /></a></figure>



<p class="wp-block-paragraph">追加したのは下記3つ</p>



<ul class="wp-block-list has-watery-yellow-background-color has-background">
<li>Microsoft Scripting Runtime</li>



<li>Microsoft XML, v6.0</li>



<li>Selenium Type Library</li>
</ul>



<p class="wp-block-paragraph">ここは旧バージョンと変わりありません</p>



<h2 class="wp-block-heading">ファイルへの反映手順</h2>



<p class="wp-block-paragraph">サンプルファイルとソースは下部に準備していますがファイルへの反映方法がわからない方向けに反映と使い方です</p>



<p class="wp-block-paragraph">そんなことわかってるからはよソースを！って方は<a href="#program-source" data-type="internal" data-id="#program-source">下部のソース</a>まで飛んじゃってください</p>



<h3 class="wp-block-heading">プロパティウィンドウを表示しておく</h3>



<p class="wp-block-paragraph">あとからモジュール名を変更したいので、もし表示されていない時は表示しておく</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box">
<p class="wp-block-paragraph">ヘッダーメニュー：表示　→　プロパティウィンドウ　※F4がショートカットキー</p>
</div>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_44.png"><img decoding="async" width="1024" height="555" src="https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_44-1024x555.png" alt="" class="wp-image-1298" srcset="https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_44-1024x555.png 1024w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_44-300x163.png 300w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_44-150x81.png 150w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_44-768x416.png 768w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_44-1536x832.png 1536w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_44.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">標準モジュールを追加</h3>



<p class="wp-block-paragraph">自動更新プログラム用にモジュールを追加する</p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box">
<p class="wp-block-paragraph">ヘッダーメニュー：挿入　→　標準モジュール</p>
</div>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_54.png"><img decoding="async" width="1024" height="555" src="https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_54-1024x555.png" alt="" class="wp-image-1299" srcset="https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_54-1024x555.png 1024w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_54-300x163.png 300w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_54-150x81.png 150w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_54-768x416.png 768w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_54-1536x832.png 1536w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h03_54.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">モジュール名を変更する</h3>



<p class="wp-block-paragraph">必須ではないんですが、わかりやすい運用のためにはモジュール名変更推奨です</p>



<p class="wp-block-paragraph">今回は&#8221;<span class="marker-under">ChromeDriverAutoUpdateModule</span>&#8220;にします</p>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h05_04.png"><img decoding="async" width="1024" height="555" src="https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h05_04-1024x555.png" alt="" class="wp-image-1300" srcset="https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h05_04-1024x555.png 1024w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h05_04-300x163.png 300w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h05_04-150x81.png 150w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h05_04-768x416.png 768w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h05_04-1536x832.png 1536w, https://javeo.jp/wp-content/uploads/2023/08/2023-08-01_09h05_04.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">プログラムの使い方</h3>



<p class="wp-block-paragraph">「<span class="marker-under">&lt;モジュール名&gt;.&lt;プロシージャ名&gt;()</span>  ※&#8221;&lt;モジュール名&gt;.&#8221;は省略可」でプログラムを呼び出せるので、本体プログラムの最初に「<span class="marker-under">ChromeDriverAutoUpdateModule.ChromeDriverAutoUpdate()</span>」を追加すれば必要なときにchromedriverが自動更新されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-file="sample" data-lang="Visual Basic + VBA"><code>Sub main()
&#39;---Chromedriverの自動更新 ※別モジュールを参照
If ChromeDriverAutoUpdateModule.ChromeDriverAutoUpdate Then
    Exit Sub
End If

&#39;－－・－－・－－以下にプログラムを－－・－－・－－
End Sub</code></pre></div>



<h2 class="wp-block-heading">Chromedriverの書き込み権限がない時</h2>



<p class="wp-block-paragraph">Winsows11からセキュリティ周りが厳しくなったのか管理者権限でSeleniumBasicをインストールした場合、Chromedriverを更新しようとすると書き込み権限なしエラーが発生するので対応まとめました</p>



<p class="wp-block-paragraph">画像の通りですが下記手順で権限設定ができます</p>



<ol class="wp-block-list has-watery-blue-background-color has-background">
<li>&#8220;C:\Program Files&#8221;にある&#8221;SeleniumBasic&#8221;フォルダを右クリック</li>



<li>右クリックメニューで&#8221;プロパティ&#8221;をクリック</li>



<li>セキュリティタブに移って&#8221;編集&#8221;ボタンをクリック</li>



<li>&#8220;Users（{コンピュータ名}\Users）&#8221;をクリック</li>



<li>&#8220;フルコントロール&#8221;にチェックがついていないはずなのでクリックしてチェックを付ける</li>



<li>&#8220;適用&#8221;ボタンをクリック</li>
</ol>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2023/07/2025-08-01_08h03_25.png"><img decoding="async" width="1024" height="538" src="https://javeo.jp/wp-content/uploads/2023/07/2025-08-01_08h03_25-1024x538.png" alt="" class="wp-image-3175" srcset="https://javeo.jp/wp-content/uploads/2023/07/2025-08-01_08h03_25-1024x538.png 1024w, https://javeo.jp/wp-content/uploads/2023/07/2025-08-01_08h03_25-300x158.png 300w, https://javeo.jp/wp-content/uploads/2023/07/2025-08-01_08h03_25-150x79.png 150w, https://javeo.jp/wp-content/uploads/2023/07/2025-08-01_08h03_25-768x403.png 768w, https://javeo.jp/wp-content/uploads/2023/07/2025-08-01_08h03_25.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h2 class="wp-block-heading">サンプルファイル</h2>



<p class="wp-block-paragraph">JSON-VBA含めて最低限のモジュールをセットしたファイル準備したので一から作る時のベースにしていただければ</p>





<h2 class="wp-block-heading" id="program-source">最後に実際のソース</h2>



<p class="wp-block-paragraph">まずはGithubをご利用の方向けはこちら</p>



<p class="wp-block-paragraph"><a href="https://github.com/javeo2022/webdriver_manager_VBA_Lite" target="_blank" rel="noreferrer noopener">https://github.com/javeo2022/webdriver_manager_VBA_Lite</a></p>



<p class="wp-block-paragraph">例によってコピペ用はこちらです</p>



<div class="wp-block-cocoon-blocks-toggle-box-1 toggle-wrap toggle-box block-box not-nested-style cocoon-block-toggle"><input id="toggle-checkbox-202510131456140" class="toggle-checkbox" type="checkbox"/><label class="toggle-button" for="toggle-checkbox-202510131456140">ソースを見る</label><div class="toggle-content">
<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function URLDownloadToFile Lib &quot;urlmon&quot; Alias &quot;URLDownloadToFileA&quot; _
                        (ByVal pCaller As Long, _
                         ByVal szURL As String, _
                         ByVal szFileName As String, _
                         ByVal dwReserved As Long, _
                         ByVal lpfnCB As Long) As Long
Private Declare PtrSafe Function SHCreateDirectoryEx Lib &quot;shell32.dll&quot; Alias &quot;SHCreateDirectoryExA&quot; _
                        (ByVal hwnd As LongPtr, ByVal pszPath As String, ByVal psa As LongPtr) As Long
#Else
Private Declare Function URLDownloadToFile Lib &quot;urlmon&quot; Alias &quot;URLDownloadToFileA&quot; _
                        (ByVal pCaller As Long, _
                         ByVal szURL As String, _
                         ByVal szFileName As String, _
                         ByVal dwReserved As Long, _
                         ByVal lpfnCB As Long) As Long
Private Declare Function SHCreateDirectoryEx Lib &quot;shell32.dll&quot; Alias &quot;SHCreateDirectoryExA&quot; _
                        (ByVal hwnd As LongPtr, ByVal pszPath As String, ByVal psa As LongPtr) As Long
#End If

Private Type VersionType &#39;---本当はクラスオブジェクトにしたいけどこれだけのためにモジュール作りたくない
    Major As Long
    Minor As Long
    Build As Long
    Revision As Long
    BuildVersion As String
    RevisionVersion As String
End Type
Const ZIP_FILE As String = &quot;chromedriver.zip&quot;
Const DRIVER_EXE As String = &quot;chromedriver.exe&quot;
Dim workPath As String
Sub test()
Call ChromeDriverAutoUpdate
End Sub
Public Function ChromeDriverAutoUpdate(Optional ByVal ForcedExecution As Boolean = False) As Boolean
&#39;====================================================================================================
&#39;chrome.exeとchromedriver.exeのバージョンを比較してchromedriverを自動更新する
&#39;もしくは強制実行フラグ（ForcedExecution）がTrueでも実行する
&#39;====================================================================================================
    Dim chromePath As String &#39;---chrome.exeが保存されているパス
    Dim chromeFullpath As String &#39;---chrome.exeまで含めたフルパス
    Dim chromeVersion As VersionType
    Dim chromedriverPath As String
    Dim chromedriverFullPath As String
    Dim objFso As New Scripting.FileSystemObject
    &#39; ---chromedriverをダウンロード用のフォルダを作成する　※Seleniumのキャッシュ構造に合わせている
    workPath = Environ(&quot;USERPROFILE&quot;) & &quot;\.cache\selenium\seleniumbasic&quot;
    Select Case SHCreateDirectoryEx(0&, workPath, 0&)
        Case 0:
            &#39; ---作成成功
        Case 183
            &#39; ---作成済み
        Case Else:
            &#39; ---作成できなかった時
            MsgBox &quot;ダウンロード用フォルダを作成できませんでした&quot; & vbCrLf & Error(Err), vbCritical
            ChromeDriverAutoUpdate = False
            Exit Function
    End Select
    
    &#39;---chrome本体のフォルダを探す
    Select Case True
        Case objFso.FolderExists(Environ(&quot;LOCALAPPDATA&quot;) & &quot;\Google\Chrome\Application&quot;)
            chromePath = Environ(&quot;LOCALAPPDATA&quot;) & &quot;\Google\Chrome\Application&quot;
        Case objFso.FolderExists(Environ(&quot;ProgramW6432&quot;) & &quot;\Google\Chrome\Application&quot;)
            chromePath = Environ(&quot;ProgramW6432&quot;) & &quot;\Google\Chrome\Application&quot;
        Case objFso.FolderExists(Environ(&quot;ProgramFiles&quot;) & &quot;\Google\Chrome\Application&quot;)
            chromePath = Environ(&quot;ProgramFiles&quot;) & &quot;\Google\Chrome\Application&quot;
        Case Else
            MsgBox &quot;&#39;chrome&#39;フォルダが見つかりません&quot;, vbCritical
            ChromeDriverAutoUpdate = False
            Exit Function
    End Select
    
    &#39;---念のためchrome.exeを確認する
    If objFso.FileExists(chromePath & &quot;\chrome.exe&quot;) = True Then
        chromeFullpath = chromePath & &quot;\chrome.exe&quot;
    Else
        MsgBox &quot;&#39;chrome.exe&#39;が見つかりません&quot;, vbCritical
        Exit Function
    End If
    
    &#39;---SeleniumBasicのフォルダを探す
    Select Case True
        Case objFso.FolderExists(Environ(&quot;LOCALAPPDATA&quot;) & &quot;\SeleniumBasic&quot;)
            chromedriverPath = Environ(&quot;LOCALAPPDATA&quot;) & &quot;\SeleniumBasic&quot;
        Case objFso.FolderExists(Environ(&quot;ProgramW6432&quot;) & &quot;\SeleniumBasic&quot;)
            chromedriverPath = Environ(&quot;ProgramW6432&quot;) & &quot;\SeleniumBasic&quot;
        Case objFso.FolderExists(Environ(&quot;ProgramFiles&quot;) & &quot;\SeleniumBasic&quot;)
            chromedriverPath = Environ(&quot;ProgramFiles&quot;) & &quot;\SeleniumBasic&quot;
        Case Else
            MsgBox &quot;&#39;SeleniumBasic&#39;のフォルダが見つかりません&quot;, vbCritical
            ChromeDriverAutoUpdate = False
            Exit Function
    End Select
    
    &#39;---念のためchromedriver.exeを確認する
    If objFso.FileExists(chromedriverPath & &quot;\&quot; & DRIVER_EXE) = False Then
        Debug.Print &quot;&#39;chromedriver.exe&#39;が見つかりませんでした&quot;
    End If
    chromedriverFullPath = chromedriverPath & &quot;\&quot; & DRIVER_EXE
        
    &#39;---chrome.exeのバージョンを取得する
    If GetChromeVersion(chromeFullpath, chromeVersion) = False Then &#39;---chrome.exeのバージョンを取得する
        MsgBox &quot;&#39;chrome.exe&#39;のバージョンが取得できませんでした&quot;, vbCritical
        ChromeDriverAutoUpdate = False
        Exit Function
    End If
    
    &#39;---chrome.exeのバージョンに合わせたchromedriver.exeをダウンロードする
    If ChromedriverQuickCheck(chromedriverPath, chromeVersion) = False Then &#39;---chromedriverのバージョンを取得する
        MsgBox &quot;&#39;chromedriver.exe&#39;のバージョンが取得できませんでした&quot;, vbCritical
        ChromeDriverAutoUpdate = False
        Exit Function
    End If
    
    &#39;---結果として更新していない場合もあるが、更新失敗じゃなくて更新不要な判定だからTrueを返す
    ChromeDriverAutoUpdate = True
Exit Function
ErrLabel:     &#39;---予期せぬエラーの分岐
    MsgBox &quot;chromedriver の入替に失敗しました&quot; & vbCrLf & Error(Err) & vbCrLf & &quot;※この画面のキャプチャを作成者へ送ってください&quot;
    ChromeDriverAutoUpdate = False
End Function
Private Function GetChromeVersion(ByVal chromeFullpath As String, ByRef chromeVersion As VersionType) As Boolean
&#39;====================================================================================================
&#39;PowerShellでchrome.exeのバージョン情報を取得する　※一瞬PowerShellが立ち上がる
&#39;====================================================================================================
    Dim command As String
    Dim objRet As Object
    
    On Error GoTo ErrLabel
        &#39;---chromeバージョン情報の初期値
        chromeVersion.Major = 1
        chromeVersion.Minor = 0
        chromeVersion.Build = 0
        chromeVersion.Revision = 0
        &#39;---chrome.exeのバージョンを取得するPowerShellコマンド
        command = &quot;powershell.exe -NoProfile -ExecutionPolicy Bypass (Get-Item -Path &#39;&quot; & chromeFullpath & &quot;&#39;).VersionInfo.FileVersion&quot;
        &#39;---PowerShellの実行結果をセット
        Set objRet = CreateObject(&quot;WScript.Shell&quot;).Exec(command)
        &#39;---PowerShellのコマンドレットの実行結果を取得
        chromeVersion.RevisionVersion = Trim(objRet.StdOut.ReadAll)
        &#39;---情報の取得が終わったらオブジェクトをクリアする
        Set objRet = Nothing
        &#39;---改行コードが含まれているから削除する
        chromeVersion.RevisionVersion = Trim(Replace(Replace(Replace(chromeVersion.RevisionVersion, vbCrLf, vbNullString), vbCr, vbNullString), vbLf, vbNullString))
        &#39;---バージョン情報を分けて返す
        With CreateObject(&quot;VBScript.RegExp&quot;) &#39;---正規表現の準備
            .Pattern = &quot;\d+\.\d+\.\d+(\.\d+)?&quot;
            .Global = True
            If .test(chromeVersion.RevisionVersion) Then &#39;---念のため正規表現でバージョン情報をチェックする
                chromeVersion.Major = CLng(Split(chromeVersion.RevisionVersion, &quot;.&quot;)(0))
                chromeVersion.Minor = CLng(Split(chromeVersion.RevisionVersion, &quot;.&quot;)(1))
                chromeVersion.Build = CLng(Split(chromeVersion.RevisionVersion, &quot;.&quot;)(2))
                If UBound(Split(chromeVersion.RevisionVersion, &quot;.&quot;)) &gt;= 3 Then &#39;---リビジョン番号がなければ9999を仮でセット※基本あるはず
                    chromeVersion.Revision = CLng(Split(chromeVersion.RevisionVersion, &quot;.&quot;)(3))
                Else
                    chromeVersion.Revision = 9999
                End If
                chromeVersion.BuildVersion = Join(Array(chromeVersion.Major, chromeVersion.Minor, chromeVersion.Build), &quot;.&quot;) &#39;---リビジョンを覗いたショートバージョン情報をセットする
                Debug.Print &quot;Chromeのバージョン：&quot; & chromeVersion.RevisionVersion
            Else &#39;---正規表現不一致なら失敗で返す
                MsgBox &quot;chrome.exe のバージョン情報取得に失敗しました&quot; & vbCrLf & &quot;[取得バージョン情報：&quot; & chromeVersion.RevisionVersion & &quot;]&quot; & vbCrLf & &quot;※この画面のキャプチャを作成者へ送ってください&quot;
                GetChromeVersion = False
                Exit Function
            End If
        End With
        GetChromeVersion = True
    On Error GoTo 0
    Exit Function
ErrLabel:     &#39;---予期せぬエラーの分岐
    MsgBox &quot;chrome.exe のバージョン情報取得に失敗しました&quot; & vbCrLf & &quot;[&quot; & Error(Err) & &quot;]&quot; & vbCrLf & &quot;※この画面のキャプチャを作成者へ送ってください&quot;
    GetChromeVersion = False
End Function
Private Function ChromedriverQuickCheck(chromedriverPath, chromeVersion As VersionType) As Boolean
    Dim objHttp As New MSXML2.XMLHTTP60
    Dim targetVarsion As String
    Dim uri As String
    Dim api_endpoints As String
    Dim downloadPath As String
    Dim objFso As New Scripting.FileSystemObject
    Const TARGET_PLATFORM As String = &quot;win64&quot;

    api_endpoints = &quot;https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_&quot; & chromeVersion.BuildVersion
    On Error GoTo ErrLabel
        With objHttp
            .Open &quot;GET&quot;, api_endpoints, False
            .Send
            targetVarsion = .responseText &#39;---JSON endpoints から情報を収集する
            downloadPath = workPath & &quot;\&quot; & targetVarsion
            &#39;--- 念のためリビジョンバージョンを比較する
            If chromeVersion.Major &gt;= CLng(Split(targetVarsion, &quot;.&quot;)(0)) Then
                &#39;--- まだダウンロードしていなかったらダウンロードする
                If objFso.FileExists(downloadPath & &quot;\&quot; & DRIVER_EXE) = False Then
                    uri = &quot;https://storage.googleapis.com/chrome-for-testing-public/&quot; & targetVarsion & &quot;/&quot; & TARGET_PLATFORM & &quot;/chromedriver-&quot; & TARGET_PLATFORM & &quot;.zip&quot;
                    Call DownloadChromedriver(uri, targetVarsion)
                    Call objFso.DeleteFile(chromedriverPath & &quot;\&quot; & DRIVER_EXE, True)
                    Debug.Print &quot;インストールしたChromedriverのバージョン：&quot; & targetVarsion
                End If
                &#39;--- chromedriverはいつでも上書きする
                Call objFso.GetFile(downloadPath & &quot;\&quot; & DRIVER_EXE).Copy(chromedriverPath & &quot;\&quot; & DRIVER_EXE, True)
            Else
                Debug.Print &quot;Chromeのバージョンが古いためChromedriverは更新しません&quot;
            End If
        End With
    On Error GoTo 0
    ChromedriverQuickCheck = True
    Exit Function
ErrLabel:     &#39;---予期せぬエラーの分岐
    MsgBox &quot;chromedriver.exe の更新に失敗しました&quot; & vbCrLf & &quot;[&quot; & Error(Err) & &quot;]&quot; & vbCrLf & &quot;※この画面のキャプチャを作成者へ送ってください&quot;
    ChromedriverQuickCheck = False
End Function
Private Function DownloadChromedriver(ByVal url As String, targetVersion As String) As Boolean
    Dim rc As Long
    Dim downloadPath As String
    Dim newDriverPath As String
    Dim objFso As New Scripting.FileSystemObject
    Dim objFolder As Scripting.Folder
    downloadPath = workPath & &quot;\&quot; & targetVersion
    &#39; ---chromedriverのフォルダを作成する
    Select Case SHCreateDirectoryEx(0&, downloadPath, 0&)
        Case 0:
            &#39; ---作成成功
        Case 183
            &#39; ---作成済み
        Case Else:
            &#39; ---作成できなかった時
            MsgBox &quot;ChromeDriver用フォルダを作成できませんでした&quot; & vbCrLf & Error(Err), vbCritical
            DownloadChromedriver = False
            Exit Function
    End Select
    
    &#39;---ファイルをダウンロードする
    If URLDownloadToFile(0, url, workPath & &quot;\&quot; & ZIP_FILE, 0, 0) &lt;&gt; 0 Then
        MsgBox &quot;ChromeDriverをダウンロードできませんでした&quot; & vbCrLf & Error(Err), vbCritical
        DownloadChromedriver = False
        Exit Function
    End If
    Application.DisplayAlerts = False
    &#39;---zipを既定のフォルダに向けて解凍する
    With CreateObject(&quot;Shell.Application&quot;) &#39;---zipを既定のフォルダに向けて解凍する
        .Namespace((downloadPath)).CopyHere .Namespace((workPath & &quot;\&quot; & ZIP_FILE)).Items
    End With
    &#39;--- 解凍したフォルダから再起処理してchromedriver.exeのフルパスを取得する
    newDriverPath = SearchFilesRecursively(downloadPath & &quot;\&quot;, &quot;chromedriver.exe&quot;)
    If newDriverPath = &quot;&quot; Then
        MsgBox &quot;chromedriver.exe の更新に失敗しました&quot;
        DownloadChromedriver = False
    End If
    &#39;---chromedriverをバージョンフォルダ直下に移動する
    Call objFso.MoveFile(newDriverPath, downloadPath & &quot;\&quot;)
    &#39;---chromedriverがなくなった不要フォルダを削除する
    For Each objFolder In objFso.GetFolder(downloadPath).SubFolders
        objFolder.Delete True
    Next
    &#39;---zipファイルを削除する
    Call objFso.DeleteFile(workPath & &quot;\&quot; & ZIP_FILE, True)
    Application.DisplayAlerts = True
    DownloadChromedriver = True
End Function
Function SearchFilesRecursively(ByVal folderPath As String, fileName As String) As String
    &#39;====================================================================================================
    &#39; folderPathを起点に再帰処理でサブフォルダまで対象にしてfileNameを探してフルパスを返す
    &#39;====================================================================================================
    Dim objFso As New Scripting.FileSystemObject
    Dim objFolder As Scripting.Folder
    Dim subFolder As Scripting.Folder
    Dim objFile As Scripting.File
    Dim result As String

    &#39; ファイル一覧をチェック
    For Each objFile In objFso.GetFolder(folderPath).Files
        If objFile.Name = fileName Then
            SearchFilesRecursively = objFile.Path
            Exit Function
        End If
    Next objFile

    &#39; サブフォルダを再帰的に探索
    For Each subFolder In objFso.GetFolder(folderPath).SubFolders
        result = SearchFilesRecursively(subFolder.Path, fileName)
        If result &lt;&gt; &quot;&quot; Then
            SearchFilesRecursively = result
            Exit Function
        End If
    Next subFolder

    &#39; 見つからなかった場合
    SearchFilesRecursively = &quot;&quot;
End Function
</code></pre></div>
</div></div>



<h2 class="wp-block-heading">あとがき</h2>



<p class="wp-block-paragraph">こちらが後出しなので簡易版としましたがむしろこちらを正規版で過去作成した方を特殊版にした方がいいかなと思っているレベル</p>



<p class="wp-block-paragraph">今後改修するとしたらこちらになる予定です</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/vba-chromedriver-auto-update-lite/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VBAのループ処理 ForとDoの違いと使い分け</title>
		<link>https://javeo.jp/vba-loop/</link>
					<comments>https://javeo.jp/vba-loop/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Wed, 03 Sep 2025 11:50:43 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[初心者]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=3538</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/vba-loop-1-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>VBAのループ処理を For Next・For Each・Do Loop の3系統に分けて初心者向けに解説します。Stepや逆順、最終行までの処理、無限ループの止め方、配列で速くするコツ、構文の使い分けまで一通りまとめました]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/vba-loop-1-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">今回はプログラミングで通る道のひとつ、VBAのループ処理を解説します</p>



<p class="wp-block-paragraph">Excelの作業では「1行ずつ順番に」「一番下の行になるまで」のように、同じ処理を繰り返したい場面がとても多いです<br>この記事では、VBAのループ処理を3つの系統に分けて、初心者の方にも分かりやすくまとめました</p>
</div></div>



<h2 class="wp-block-heading">VBAのループ処理とは？3つの系統で全体像をつかむ</h2>



<p class="wp-block-paragraph">VBAのループ処理とは、ある<strong><span class="swl-marker mark_yellow">条件の間</span></strong>や<strong><span class="swl-marker mark_yellow">条件を満たすまで</span></strong>、同じ処理を繰り返す仕組みのことです<br>セルA1からA10までの値を順番に読み取る、リストの中から条件に合うデータだけ抜き出す、といった作業で活躍します</p>



<p class="wp-block-paragraph">VBAのループ構文はいくつかありますが、ざっくり3系統に分けると全体像がつかみやすいです<br>まずはこの3つの違いをイメージしてもらえると、この先の話がすっと入ってきます</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li><strong>For Next</strong> … 繰り返す回数が決まっているときの基本形</li>



<li><strong>For Each</strong> … セル範囲やコレクションなど集まりを丸ごと処理する</li>



<li><strong>Do Loop</strong> … 回数が読めず、条件しだいで繰り返したいとき</li>
</ul>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>迷ったら「回数が決まってる？」をまず考えるといいですよ</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">この記事で分かること</p>



<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>3系統それぞれの正しい書き方</li>



<li>For・Do・Exit の違いと使い分け</li>



<li>無限ループの止め方と防ぎ方</li>



<li>重いループを速くするコツ</li>
</ul>
</div></div>



<p class="wp-block-paragraph">なお、ループのカウンターには変数を使います<br>変数や型がまだあやふやな方は、先に<a href="https://javeo.jp/variables-constants/" target="_blank" rel="noopener noreferrer">VBAの変数と定数の解説記事</a>に目を通しておくと、この先がぐっと読みやすくなります</p>



<h2 class="wp-block-heading">For Next:回数が決まった繰り返し</h2>



<p class="wp-block-paragraph"><strong>For Next</strong> は、指定した回数だけ繰り返す基本のループです<br>他の言語でもよく使う形なので、ここを押さえておくと応用が効きます</p>



<p class="wp-block-paragraph">VBAでは次の形で書きます<br>※[]の中は省略できる部分です</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>For Nextの構文</span></div><div class="cap_box_content">
<p class="wp-block-paragraph"><strong><span class="swl-marker mark_yellow" style="color:#e8313b">For counter = start To end [Step step]</span></strong> … 処理 … <strong>Next [counter]</strong></p>
</div></div>



<p class="wp-block-paragraph">counter はカウンター役の数値変数で、start が初期値、end が最終値です<br>古い解説だと To が2回出てくる書き方を見かけますが、それは誤りで、正しくは <strong>= start</strong> でカウンターに初期値を入れてから <strong>To end</strong> と続けます</p>



<p class="wp-block-paragraph">counter は数値が入るので、型は <strong>Long</strong> や <strong>Integer</strong> を選びます<br>下のサンプルは、1から10までの数字をカウンター変数で順番に表示する例です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim i As Long
For i = 1 To 10
    Debug.Print i
Next i</code></pre></div>



<p class="wp-block-paragraph">もし start が end より大きく、Step が正のままだと、本体の処理は実行されません<br>条件を満たさないと判断されて、いきなり Next の次へ進む動きになります</p>



<p class="wp-block-paragraph">Next の後ろのカウンター名(<strong>Next i</strong> の i)は、省略して <strong>Next</strong> だけでも動きます<br>ただ、入れ子のループになると「どの For に対応する Next なのか」が一目で分かりにくくなるので、書いておくと後から読みやすいです</p>



<p class="wp-block-paragraph">カウンターの型は、扱う回数の大きさで選びます<br>数万行を超えるような処理では Integer だと上限(32767)を超えてエラーになることがあるので、行数を回すなら <strong>Long</strong> を選んでおくのがおすすめです</p>



<h3 class="wp-block-heading">Stepで増減幅を変える(既定は1・負で逆順)</h3>



<p class="wp-block-paragraph">Step を省略するとカウンターは <strong><span class="swl-marker mark_yellow">1ずつ増える</span></strong> 動きになります<br>Step を付けると増える幅を自由に変えられて、たとえば奇数だけ回したいときは Step 2 を指定すれば、条件分岐を書かなくても1・3・5…と進みます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>For i = 1 To 10 Step 2
    Debug.Print i &#39; ---1，3，5，7，9
Next i</code></pre></div>



<p class="wp-block-paragraph">Step にマイナスを指定すると、カウンターを減らしながら回せます<br>このときは end を start より小さくするのがポイントで、下のサンプルは10から1へ逆順に表示します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim i As Long
For i = 10 To 1 Step -1
    Debug.Print i
Next i</code></pre></div>



<p class="wp-block-paragraph">逆順はただの小ネタに見えて、実務でしっかり効く場面があります<br>たとえば行を削除しながら回すとき、上から消すと番号がズレてしまうので、下の行から上へ逆順で回すのが定番のやり方です</p>



<h3 class="wp-block-heading">最終行まで処理する(実務で一番使う形)</h3>



<p class="wp-block-paragraph">実務でいちばん多いのは「データが入っている最終行まで回したい」というケースです<br>このときは <strong>Cells(Rows.Count, 1).End(xlUp).Row</strong> でA列の最終行を取り、その行数まで For Next で回します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

Dim i As Long
For i = 1 To lastRow
    Debug.Print Cells(i, 1).Value
Next i</code></pre></div>



<p class="wp-block-paragraph">データの行数は日々変わるので、固定の数字で回すと取りこぼしや空行の処理が起きやすいです<br>最終行を毎回求めてから回す形にしておくと、行が増えても減ってもそのまま動いてくれます</p>



<p class="wp-block-paragraph">ここで使っている <strong>Cells(Rows.Count, 1)</strong> は、シートのいちばん下のセルを指しています<br>そこから <strong>End(xlUp)</strong> で上へジャンプすると、データが入っている最後の行に止まるので、その行番号を最終行として使う、という流れです</p>



<p class="wp-block-paragraph">列の番号(ここでは1=A列)は、いちばんデータが詰まっている列を選ぶのがコツです<br>途中に空白セルが混ざる列を基準にすると、そこで止まって最終行を取りこぼすことがあるので注意します</p>



<h3 class="wp-block-heading">二重ループで表(行×列)を処理する</h3>



<p class="wp-block-paragraph">表のように行と列の両方を回したいときは、For Next を入れ子(二重ループ)にします<br>外側で行を回し、その中でさらに内側のループで列を回す、という組み立てです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim r As Long, c As Long
For r = 1 To 3
    For c = 1 To 3
        Debug.Print Cells(r, c).Value
    Next c
Next r</code></pre></div>



<p class="wp-block-paragraph">入れ子にすると、後で出てくる Exit の挙動に少し注意が必要になります<br>内側のループで抜けても、抜けるのはその1段だけ、という点は途中抜けのところで改めて触れます</p>



<p class="wp-block-paragraph">このサンプルは3行×3列の決め打ちですが、実務では行も列も最終位置を求めて回すことが多いです<br>外側を最終行まで、内側を最終列まで回すようにすると、表の大きさが変わっても同じコードでそのまま処理できます</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>内側と外側でカウンター変数を別にするのを忘れずに</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h2 class="wp-block-heading">For Each Next:コレクション・配列をまるごと処理</h2>



<p class="wp-block-paragraph"><strong>For Each Next</strong> は、複数の要素を持つコレクションや配列を、丸ごと順番に処理するループです<br>構文は <strong>For Each element In group</strong> … 処理 … <strong>Next [element]</strong> という形になります</p>



<p class="wp-block-paragraph">ループ変数の element は、相手によって向いている型が変わります<br>セル範囲のようなコレクションが相手ならオブジェクト型(またはVariant)、配列が相手なら <strong>Variant</strong> を使うのがVBAでのお作法です</p>



<p class="wp-block-paragraph">For Each の良さは、要素数を自分で数えなくていいところです<br>対象の数が不定でも「中身ぜんぶ」を相手にしてくれるので、コレクションを扱うときに特に書きやすくなります</p>



<p class="wp-block-paragraph">For Next との違いは、何番目かを表すカウンターを自分で持たない点です<br>「3番目だけ処理したい」のように位置で指定したいなら For Next、「中身を順番に全部」でよいなら For Each、と分けて考えると選びやすくなります</p>



<h3 class="wp-block-heading">セル範囲を1つずつ処理する</h3>



<p class="wp-block-paragraph">まずは定番、セル範囲を1つずつ取り出す例です<br>下のサンプルは、A1からA10までのセルの値を順番に表示します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim cell As Range
For Each cell In Range(&quot;A1:A10&quot;)
    Debug.Print cell.Value
Next cell</code></pre></div>



<h3 class="wp-block-heading">配列を回す(For Nextでも代替できる)</h3>



<p class="wp-block-paragraph">配列が相手なら、For Each でも For Next でも回せます<br>For Next を使うときは、<strong>LBound</strong> と <strong>UBound</strong> でインデックスの最小値と最大値を取り、その範囲を順番に指定します</p>



<p class="wp-block-paragraph">下の2つは、どちらも同じ結果になります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim sample As Variant
Dim v As Variant

sample = Array(&quot;a&quot;, &quot;b&quot;, &quot;c&quot;, &quot;d&quot;, &quot;e&quot;)
For Each v In sample
    Debug.Print v
Next

Dim i As Long
For i = LBound(sample) To UBound(sample)
    Debug.Print sample(i)
Next</code></pre></div>



<p class="wp-block-paragraph">配列の要素数は <strong>UBound &#8211; LBound + 1</strong> で求められます<br>LBound が0始まりなのか1始まりなのかを気にせず数えられるので、覚えておくと地味に便利です</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">For Each で取り出した要素は、基本は「読み取り向き」と考えておくのが安全です<br>配列の中身そのものを書き換えたいときは、For Next と添字(LBound〜UBound)で要素を直接指す形にすると確実です</p>
</div></div>



<h3 class="wp-block-heading">ブック内のシートを全部処理する</h3>



<p class="wp-block-paragraph">For Each がいちばん書きやすさを発揮するのが、シートのような「集まり」を相手にするときです<br>ブックに何枚シートがあるか数えなくても、<strong>Worksheets</strong> をそのまま渡せば全シートを順番に処理できます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
    Debug.Print ws.Name
Next ws</code></pre></div>



<p class="wp-block-paragraph">シートの枚数は追加・削除でよく変わるので、枚数を数字で決め打ちするとズレやすいです<br>For Each なら「いまブックにある分ぜんぶ」を相手にしてくれるので、枚数が変わってもそのまま動きます</p>



<p class="wp-block-paragraph">同じ書き方で <strong>Workbooks</strong> を渡せば、開いているブックを順番に処理することもできます<br>「シートを左から順に」「開いているブックを全部」のような作業は、For Each の出番だと覚えておくと選びやすいです</p>



<h3 class="wp-block-heading">辞書(Dictionary)やコレクションを回す</h3>



<p class="wp-block-paragraph">キーと値をペアで持てる <strong>Dictionary</strong> や、要素を順に足していける <strong>Collection</strong> も、For Each で回せます<br>件数が決まっていない集計やリスト管理で使うと、要素数を気にせず中身を取り出せて楽です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim dic As Object
Set dic = CreateObject(&quot;Scripting.Dictionary&quot;)
dic.Add &quot;apple&quot;, 100
dic.Add &quot;banana&quot;, 200

Dim k As Variant
For Each k In dic.Keys
    Debug.Print k &amp; &quot; : &quot; &amp; dic(k)
Next k</code></pre></div>



<p class="wp-block-paragraph">Dictionary の場合は <strong>Keys</strong> を回して、キーから値を取り出すのが定番の形です<br>受け取る変数の型は、相手が文字列でも数値でも対応できる <strong>Variant</strong> にしておくと無難です</p>



<h2 class="wp-block-heading">Do Loop:条件しだいで繰り返す</h2>



<p class="wp-block-paragraph"><strong>Do Loop</strong> は、条件に応じて繰り返すループです<br>終了条件を柔軟に決められるので、回数が読めない処理に向いていて、骨組みは <strong>Do</strong> … 処理 … <strong>Loop</strong> だけとシンプルです</p>



<p class="wp-block-paragraph">シンプルなぶん、条件の付け方で動きが変わります<br>ここでは While・Until・前判定と後判定の違いを、順番に見ていきます</p>



<p class="wp-block-paragraph">For Next と Do Loop の使い分けは、<strong><span class="swl-marker mark_yellow">回数が先に決まるかどうか</span></strong>で考えると分かりやすいです<br>「10回」「最終行まで」のように回数や終わりが先に分かるなら For Next、「条件を満たすまで」「データが続く限り」のように終わりが読めないなら Do Loop が向いています</p>



<h3 class="wp-block-heading">Do While(条件が真の間)</h3>



<p class="wp-block-paragraph"><strong>While</strong> は「条件が真の間、繰り返す」という意味です<br>Do Loop の中ではいちばんよく使う形で、体感では大半がこの書き方になります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim i As Integer
i = 1
Do While i &lt;= 10
    Debug.Print i
    i = i + 1
Loop</code></pre></div>



<p class="wp-block-paragraph">ここで大事なのが、ループの中でカウンターを <strong>i = i + 1</strong> と変化させている点です<br>これを忘れると条件がいつまでも真のままになり、後で触れる無限ループの原因になります</p>



<h3 class="wp-block-heading">Do Until(条件が真になるまで)</h3>



<p class="wp-block-paragraph"><strong>Until</strong> は「条件が真になるまで繰り返す」という意味で、While とは逆向きの考え方です<br>「この状態になったら終わり」という書き方をしたいときに合います</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim i As Integer
i = 1
Do Until i &gt; 10
    Debug.Print i
    i = i + 1
Loop</code></pre></div>



<p class="wp-block-paragraph">While と Until は、慣れるまで頭の中で逆に取りやすいところです<br>同じ動きを While でも Until でも書けることが多いので、自分が読みやすいと感じる方に寄せておくと迷いません</p>



<h3 class="wp-block-heading">前判定と後判定(Doの後ろ・Loopの後ろ)</h3>



<p class="wp-block-paragraph">While・Until は、Do の後ろにも Loop の後ろにも書けます<br>Do の後ろに書くのが前判定、Loop の後ろに書くのが後判定で、両方ちゃんと動きます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Do While i &lt;= 10
    &#39; 処理
Loop

Do
    &#39; 処理
Loop While i &lt;= 10</code></pre></div>



<p class="wp-block-paragraph">大きな違いは、後判定だと <strong><span class="swl-marker mark_yellow" style="color:#e8313b">条件に関係なく最低1回は処理が実行される</span></strong> 点です<br>前判定は入る前に条件を見るので0回もありえますが、後判定は中身を1回やってから判定します</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">後判定が活きるのは「まず1回やってから判定したい」場面です<br>入力チェックやリトライ処理のように、とりあえず一度実行してから続けるか決めたいときに向いています</p>
</div></div>



<h3 class="wp-block-heading">While Wend(古い書き方)</h3>



<p class="wp-block-paragraph"><strong>While Wend</strong> という古い構文もあって、これは Do While Loop と同じ前判定ループの動きをします<br>誰かが書いた古いコードで見かけることがあるので、読めるようにしておくと十分です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim i As Integer
i = 1
While i &lt;= 10
    Debug.Print i
    i = i + 1
Wend</code></pre></div>



<p class="wp-block-paragraph">動き自体は Do While Loop と同じ前判定なので、新しく書くなら Do Loop の方が一般的です<br>あえて While Wend を選ぶ理由は少ないので、読み解き用の知識として持っておけば問題ありません</p>



<h3 class="wp-block-heading">空セルになるまで下へ回す(実務例)</h3>



<p class="wp-block-paragraph">Do Loop が実務で活きるのは「どこまでデータがあるか分からない」ケースです<br>最終行を先に求めなくても、<strong>セルが空になるまで下へ進む</strong> という書き方で、データの終わりまで回せます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim i As Long
i = 1
Do While Cells(i, 1).Value &lt;&gt; &quot;&quot;
    Debug.Print Cells(i, 1).Value
    i = i + 1
Loop</code></pre></div>



<p class="wp-block-paragraph">For Next で最終行まで回す形と似ていますが、こちらは行数を先に計算しないのが違いです<br>データの途中に空行が混ざらない前提なら、書き方がシンプルで読みやすくなります</p>



<h3 class="wp-block-heading">Withと組み合わせて書きやすくする</h3>



<p class="wp-block-paragraph">同じオブジェクトを何度も書く場面では、<strong>With</strong> と組み合わせると見通しがよくなります<br>ループの中で同じシートやセル範囲を繰り返し指すとき、毎回フルで書かずに済むので、コードがすっきりします</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim i As Long
With ThisWorkbook.Worksheets(&quot;Sheet1&quot;)
    For i = 1 To 10
        .Cells(i, 1).Value = i
    Next i
End With</code></pre></div>



<p class="wp-block-paragraph">With の中では、先頭にドットを付けるだけで対象のオブジェクトを指せます<br>シート名を何度も書く手間が減り、後から対象を変えたいときも一か所の修正で済むのが利点です</p>


<div class="p-blogParts post_content" data-partsID="4601">
<div class="jv-books" id="jv-books-vba" data-shelf="vba"><div class="jv-books-head"><span class="jv-books-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> VBAの独学に効く本</span><span class="jv-books-pr">PR</span></div><div class="jv-books-grid"><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240" alt="Excel VBA塾【動画×本で学ぶ!】" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel VBA塾【動画×本で学ぶ!】</p><p class="jv-book-author">たてばやし淳</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4839975728">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4839975728">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240" alt="パーフェクトExcel VBA" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">パーフェクトExcel VBA</p><p class="jv-book-author">高橋宣成</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4297108755">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4297108755">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240" alt="Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版</p><p class="jv-book-author">国本温子</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4815631298">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4815631298">楽天で見る</a></div></div></div></div><p class="jv-books-note">私のおすすめからランダムで3冊を表示しています</p></div>
<style>
.jv-books{border:1px solid #e0e0e0;border-radius:8px;padding:16px;margin:1.5em 0;background:#fff}
.jv-books-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.jv-books-title{font-weight:700;font-size:1.05em}
.jv-books-pr{font-size:.7em;color:#888;border:1px solid #ccc;border-radius:3px;padding:1px 6px;flex-shrink:0}
.jv-books-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;min-height:330px}
.jv-book-card{display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid #f0f0f0;border-radius:6px;padding:12px 8px;background:#fafafa}
.jv-book-cover img{width:auto;max-width:120px;height:170px;object-fit:contain}
.jv-book-info{width:100%;flex:1;display:flex;flex-direction:column}
.jv-book-title{font-size:.82em;font-weight:600;line-height:1.4;margin:8px 0 2px;min-height:2.8em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jv-book-author{font-size:.72em;color:#777;margin:0 0 8px}
.jv-book-btns{display:flex;flex-direction:column;gap:6px;width:100%;margin-top:auto}
.jv-btn{display:block;text-align:center;font-size:.78em;font-weight:600;color:#fff!important;text-decoration:none!important;border-radius:4px;padding:7px 4px;line-height:1.2}
.jv-btn-az{background:#e88b00}
.jv-btn-rk{background:#bf0000}
.jv-btn:hover{opacity:.85}
.jv-books-note{font-size:.7em;color:#999;text-align:right;margin:8px 0 0}
@media(max-width:599px){
.jv-books-grid{grid-template-columns:1fr;min-height:0}
.jv-book-card{flex-direction:row;text-align:left;gap:12px}
.jv-book-cover img{height:110px;max-width:80px}
.jv-book-info{min-width:0}
.jv-book-title{min-height:0}
.jv-book-btns{flex-direction:row}
.jv-btn{flex:1}
}
</style>
<script>
(function(){
var SHELF='vba';
var root=document.getElementById('jv-books-'+SHELF);
if(!root||root.dataset.init)return;
root.dataset.init='1';
var POOL=[{"t": "Excel VBA塾【動画×本で学ぶ!】", "a": "たてばやし淳", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F", "id": "4839975728"}, {"t": "パーフェクトExcel VBA", "a": "高橋宣成", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F", "id": "4297108755"}, {"t": "Excel マクロ&VBA［実践ビジネス入門講座］完全版 第3版", "a": "国本温子", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F", "id": "4815631298"}, {"t": "増強改訂版 できる イラストで学ぶ 入社1年目からのExcel VBA", "a": "きたみあきこ", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8414/9784295018414.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4295018414?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F", "id": "4295018414"}];
var REL='nofollow sponsored noopener noreferrer';
function el(tag,cls){var e=document.createElement(tag);if(cls)e.className=cls;return e;}
function btn(href,cls,label,mall,id){
var a=el('a','jv-btn '+cls);a.href=href;a.target='_blank';a.rel=REL;a.textContent=label;
a.setAttribute('data-shelf',SHELF);a.setAttribute('data-mall',mall);a.setAttribute('data-book',id);
return a;}
function card(b){
var d=el('div','jv-book-card');
var cover=el('a','jv-book-cover');cover.href=b.az;cover.target='_blank';cover.rel=REL;
var img=el('img');img.src=b.img;img.alt=b.t;img.width=120;img.height=170;img.loading='lazy';
cover.appendChild(img);
var info=el('div','jv-book-info');
var ttl=el('p','jv-book-title');ttl.textContent=b.t;
var au=el('p','jv-book-author');au.textContent=b.a;
var btns=el('div','jv-book-btns');
btns.appendChild(btn(b.az,'jv-btn-az','Amazonで見る','amazon',b.id));
if(b.rk){btns.appendChild(btn(b.rk,'jv-btn-rk','楽天で見る','rakuten',b.id));}
info.appendChild(ttl);info.appendChild(au);info.appendChild(btns);
d.appendChild(cover);d.appendChild(info);
return d;}
var pool=POOL.slice();
for(var i=pool.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1));var t=pool[i];pool[i]=pool[j];pool[j]=t;}
var grid=root.querySelector('.jv-books-grid');
grid.style.opacity='0';
while(grid.firstChild)grid.removeChild(grid.firstChild);
pool.slice(0,3).forEach(function(b){grid.appendChild(card(b));});
grid.style.transition='opacity .5s ease';
void grid.offsetWidth;
grid.style.opacity='1';
})();
</script>
</div>


<h2 class="wp-block-heading">ループを途中で抜ける・スキップする(Exit / Continue代替)</h2>



<p class="wp-block-paragraph">条件しだいでループを途中でやめたいときは <strong>Exit For</strong> や <strong>Exit Do</strong> を使います<br>他の言語の break にあたる役割で、If や Select Case の中に書いて「ここで抜ける」を表現します</p>



<p class="wp-block-paragraph">下のコードは1〜4まで表示して、iが5になったところでループを抜けます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>For i = 1 To 10
    If i = 5 Then Exit For
    Debug.Print i
Next i</code></pre></div>



<p class="wp-block-paragraph">Do Loop でも考え方は同じで、Exit Do を使えば途中で抜けられます<br>While や Until を付けない Do … Loop でも、中で条件を見て Exit Do すれば終了できます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Do
    If 条件 Then Exit Do
    &#39; 処理
Loop</code></pre></div>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">多重ループで Exit を使っても、抜けるのは <strong><span class="swl-marker mark_yellow">そのループ1段だけ</span></strong> です<br>内側の Exit For で全部のループから抜けられると思い込むと、外側がそのまま回り続けて意図しない動きになります</p>
</div></div>



<p class="wp-block-paragraph">他の言語にある continue(その回だけスキップして次へ進む)は、VBAにはありません<br>似た動きは <strong>GoTo</strong> とラベルで作れて、下のコードは i が5のときだけ表示をスキップします</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>For i = 1 To 10
    If i = 5 Then GoTo Skip
    Debug.Print i
Skip:
Next i</code></pre></div>



<p class="wp-block-paragraph">GoTo は便利に見えますが、増えると処理の流れが追いにくくなってデバッグが大変になります<br>使うとしても最小限にとどめ、できれば If でくくる形に書き換える方が後で読みやすいです</p>



<h3 class="wp-block-heading">目的のデータが見つかったら抜ける(検索パターン)</h3>



<p class="wp-block-paragraph">Exit がいちばん役立つのは、リストを上から見ていって「探していたものが見つかったら終わり」にしたいときです<br>全部回さずに見つかった時点で抜けられるので、データが多いほど処理の無駄を減らせます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim i As Long, foundRow As Long
foundRow = 0
For i = 1 To 1000
    If Cells(i, 1).Value = &quot;target&quot; Then
        foundRow = i
        Exit For
    End If
Next i

Debug.Print foundRow</code></pre></div>



<p class="wp-block-paragraph">見つかった行を変数に控えてから Exit For で抜けると、ループの後でその行を使えます<br>もし最後まで見つからなければ、初期値の0のままなので「無かった」判定にも使えて便利です</p>



<h2 class="wp-block-heading">無限ループの止め方と防ぎ方</h2>



<p class="wp-block-paragraph">ループを書いていていちばん怖いのが無限ループです<br>終了条件にたどり着かず、いつまでも処理が終わらない状態で、画面が固まったように見えてヒヤッとします</p>



<p class="wp-block-paragraph">起きる原因はだいたい決まっていて、条件が変わらないことと、カウンターの更新忘れです<br>Do While の中で <strong>i = i + 1</strong> を書き忘れる、というのが定番のパターンになります</p>



<p class="wp-block-paragraph">もうひとつ多いのが、終了条件が一生満たされないケースです<br>たとえば「空セルになるまで」と書いたのに、途中の空行を飛ばす処理を入れてしまうと、終わりにたどり着けず回り続けることがあります</p>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">もし無限ループに入ってしまっても、慌てなくて大丈夫です<br>止めるときは <strong><span class="swl-marker mark_yellow" style="color:#e8313b">Esc または Ctrl + Break</span></strong> を押せば、実行中の処理を中断できます</p>
</div></div>



<p class="wp-block-paragraph">VBAの編集画面で <strong>Ctrl + Break</strong> を押すと処理が止まり、いま実行している行が黄色く反転して教えてくれます<br>その行のまわりを見れば、どの条件が変わっていないのか・カウンターの更新が抜けていないかを確かめやすくなります</p>



<p class="wp-block-paragraph">止め方を知っていれば怖くないですが、そもそも起こさないのがいちばんです<br>無限ループを防ぐコツは、次の3つを意識しておくと大きく減らせます</p>



<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li>ループの中で、条件に関わる値を毎回更新する</li>



<li>Do内のカウンター更新(<strong>i = i + 1</strong> など)を忘れない</li>



<li>保険として、一定回数を超えたら Exit Do で抜ける仕掛けを入れておく</li>
</ul>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>固まっても焦らず Esc を押せば戻ってこれますよ</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h2 class="wp-block-heading">ループを速くする2つのコツ</h2>



<p class="wp-block-paragraph">扱う行数が増えてくると、ループの遅さが気になってきます<br>処理が重いと感じたときに効きやすい、定番の2つのコツを紹介します</p>



<h3 class="wp-block-heading">コツ1:配列に一括で読み込んで処理する</h3>



<p class="wp-block-paragraph">セルを1つずつ読み書きすると、そのたびにExcelとのやり取りが発生して時間がかかります<br>そこで、セル範囲をいったん配列にまとめて読み込み、ループで処理してから一括で書き戻すと、ぐっと速くなることが多いです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim data As Variant
data = Range(&quot;A1:A10000&quot;).Value   &#39; セル範囲を一括で配列に読み込む

Dim i As Long
For i = 1 To UBound(data, 1)
    data(i, 1) = data(i, 1) * 2
Next i

Range(&quot;A1:A10000&quot;).Value = data   &#39; 配列を一括で書き戻す</code></pre></div>



<p class="wp-block-paragraph">複数セルのRangeをValueで受け取ると、中身は2次元配列になります<br>だから添字は <strong>data(行, 列)</strong> の形になり、A列1列でも data(i, 1) のように列番号の1が要ります</p>



<p class="wp-block-paragraph">なぜ速くなるかというと、セルへのアクセスは1回ごとにExcel側とのやり取りが走るからです<br>1万行を1つずつ読み書きすると、そのやり取りが1万回起きてしまいますが、配列なら読み込みと書き戻しの2回で済むので、処理時間に差が出ます</p>



<p class="wp-block-paragraph">行数が数百くらいなら体感差は小さいですが、数千・数万と増えるほど効いてきます<br>「ループが重いな」と感じたら、まずこの配列一括の形に書き換えられないか考えてみると改善しやすいです</p>



<h3 class="wp-block-heading">コツ2:画面更新をオフにする</h3>



<p class="wp-block-paragraph">重いループの間、Excelが画面をいちいち描き直すのも遅さの一因です<br><strong>Application.ScreenUpdating = False</strong> で更新を止めてからループを回すと、見た目のちらつきも処理時間も抑えられます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Application.ScreenUpdating = False

&#39; ここで重い繰り返し処理を実行

Application.ScreenUpdating = True</code></pre></div>



<p class="wp-block-paragraph">ここで大事なのが、処理が終わったら忘れず <strong>= True</strong> に戻すことです<br>戻し忘れると画面が固まったように見えてしまうので、オフにしたらセットで戻す、とペアで覚えておきましょう</p>



<p class="wp-block-paragraph">同じ発想で、自動計算を <strong>Application.Calculation = xlCalculationManual</strong> で一時的に止める手もあります<br>関数が多く入ったシートだと、書き込むたびに再計算が走って重くなるので、ループの間だけ止めると効きます<br>これも処理後に <strong>xlCalculationAutomatic</strong> へ戻すのを忘れないようにします</p>



<div class="wp-block-group is-style-big_icon_good"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">軽い処理にまで毎回これを使う必要はありません<br>行数が多くて重いと感じたループだけに使えば十分で、まずは普通に書いてみて遅かったら足す、くらいの感覚で問題ありません</p>
</div></div>



<h2 class="wp-block-heading">まとめ:構文の使い分け早見表</h2>



<p class="wp-block-paragraph">最後に、ここまでの内容を早見表にまとめます<br>判断の目安はシンプルで、回数が決まるなら For Next、集まりを全部なら For Each、条件しだいなら Do Loop、まず1回やりたいなら後判定です</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table"><table style="--table-width:800px;"><thead><tr><th>構文</th><th>向いている場面</th><th>覚えておく点</th></tr></thead><tbody><tr><td>For Next</td><td>繰り返す回数が決まっている</td><td>Step で増減や逆順、最終行まで回す定番</td></tr><tr><td>For Each</td><td>コレクションや配列を全部処理</td><td>要素は読み取り向き、書き換えは For Next 添字</td></tr><tr><td>Do While / Until</td><td>回数が読めず条件で続けたい</td><td>前判定と後判定、後判定は最低1回</td></tr><tr><td>While Wend</td><td>古い書き方(読めれば十分)</td><td>いまは Do While Loop が一般的</td></tr><tr><td>Exit For / Exit Do</td><td>条件で途中で抜けたい</td><td>多重ループでは1段だけ抜ける</td></tr><tr><td>GoTo(continue代替)</td><td>今回だけスキップしたい</td><td>VBAにContinueは無い、多用しない</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ループはVBAの基礎ですが、ここを押さえると書けるマクロの幅が一気に広がります<br>まずは For Next と Do While あたりから手を動かして、必要になったら For Each や高速化のコツを足していくのがおすすめです</p>



<p class="wp-block-paragraph">ループと組み合わせると便利なテーマとして、データを扱う型まわりの知識があります<br>変数や型をもう一段固めたい方は<a href="https://javeo.jp/variables-constants/" target="_blank" rel="noopener noreferrer">VBAの変数と定数の解説記事</a>、JSONのようなデータ処理に進みたい方は<a href="https://javeo.jp/vba-json/" target="_blank" rel="noopener noreferrer">VBAでJSONを扱う記事</a>もあわせてどうぞ</p>


<div class="p-blogParts post_content" data-partsID="4601">
<div class="jv-books" id="jv-books-vba" data-shelf="vba"><div class="jv-books-head"><span class="jv-books-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> VBAの独学に効く本</span><span class="jv-books-pr">PR</span></div><div class="jv-books-grid"><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240" alt="Excel VBA塾【動画×本で学ぶ!】" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel VBA塾【動画×本で学ぶ!】</p><p class="jv-book-author">たてばやし淳</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4839975728">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4839975728">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240" alt="パーフェクトExcel VBA" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">パーフェクトExcel VBA</p><p class="jv-book-author">高橋宣成</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4297108755">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4297108755">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240" alt="Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版</p><p class="jv-book-author">国本温子</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4815631298">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4815631298">楽天で見る</a></div></div></div></div><p class="jv-books-note">私のおすすめからランダムで3冊を表示しています</p></div>
<style>
.jv-books{border:1px solid #e0e0e0;border-radius:8px;padding:16px;margin:1.5em 0;background:#fff}
.jv-books-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.jv-books-title{font-weight:700;font-size:1.05em}
.jv-books-pr{font-size:.7em;color:#888;border:1px solid #ccc;border-radius:3px;padding:1px 6px;flex-shrink:0}
.jv-books-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;min-height:330px}
.jv-book-card{display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid #f0f0f0;border-radius:6px;padding:12px 8px;background:#fafafa}
.jv-book-cover img{width:auto;max-width:120px;height:170px;object-fit:contain}
.jv-book-info{width:100%;flex:1;display:flex;flex-direction:column}
.jv-book-title{font-size:.82em;font-weight:600;line-height:1.4;margin:8px 0 2px;min-height:2.8em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jv-book-author{font-size:.72em;color:#777;margin:0 0 8px}
.jv-book-btns{display:flex;flex-direction:column;gap:6px;width:100%;margin-top:auto}
.jv-btn{display:block;text-align:center;font-size:.78em;font-weight:600;color:#fff!important;text-decoration:none!important;border-radius:4px;padding:7px 4px;line-height:1.2}
.jv-btn-az{background:#e88b00}
.jv-btn-rk{background:#bf0000}
.jv-btn:hover{opacity:.85}
.jv-books-note{font-size:.7em;color:#999;text-align:right;margin:8px 0 0}
@media(max-width:599px){
.jv-books-grid{grid-template-columns:1fr;min-height:0}
.jv-book-card{flex-direction:row;text-align:left;gap:12px}
.jv-book-cover img{height:110px;max-width:80px}
.jv-book-info{min-width:0}
.jv-book-title{min-height:0}
.jv-book-btns{flex-direction:row}
.jv-btn{flex:1}
}
</style>
<script>
(function(){
var SHELF='vba';
var root=document.getElementById('jv-books-'+SHELF);
if(!root||root.dataset.init)return;
root.dataset.init='1';
var POOL=[{"t": "Excel VBA塾【動画×本で学ぶ!】", "a": "たてばやし淳", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F", "id": "4839975728"}, {"t": "パーフェクトExcel VBA", "a": "高橋宣成", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F", "id": "4297108755"}, {"t": "Excel マクロ&VBA［実践ビジネス入門講座］完全版 第3版", "a": "国本温子", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F", "id": "4815631298"}, {"t": "増強改訂版 できる イラストで学ぶ 入社1年目からのExcel VBA", "a": "きたみあきこ", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8414/9784295018414.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4295018414?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F", "id": "4295018414"}];
var REL='nofollow sponsored noopener noreferrer';
function el(tag,cls){var e=document.createElement(tag);if(cls)e.className=cls;return e;}
function btn(href,cls,label,mall,id){
var a=el('a','jv-btn '+cls);a.href=href;a.target='_blank';a.rel=REL;a.textContent=label;
a.setAttribute('data-shelf',SHELF);a.setAttribute('data-mall',mall);a.setAttribute('data-book',id);
return a;}
function card(b){
var d=el('div','jv-book-card');
var cover=el('a','jv-book-cover');cover.href=b.az;cover.target='_blank';cover.rel=REL;
var img=el('img');img.src=b.img;img.alt=b.t;img.width=120;img.height=170;img.loading='lazy';
cover.appendChild(img);
var info=el('div','jv-book-info');
var ttl=el('p','jv-book-title');ttl.textContent=b.t;
var au=el('p','jv-book-author');au.textContent=b.a;
var btns=el('div','jv-book-btns');
btns.appendChild(btn(b.az,'jv-btn-az','Amazonで見る','amazon',b.id));
if(b.rk){btns.appendChild(btn(b.rk,'jv-btn-rk','楽天で見る','rakuten',b.id));}
info.appendChild(ttl);info.appendChild(au);info.appendChild(btns);
d.appendChild(cover);d.appendChild(info);
return d;}
var pool=POOL.slice();
for(var i=pool.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1));var t=pool[i];pool[i]=pool[j];pool[j]=t;}
var grid=root.querySelector('.jv-books-grid');
grid.style.opacity='0';
while(grid.firstChild)grid.removeChild(grid.firstChild);
pool.slice(0,3).forEach(function(b){grid.appendChild(card(b));});
grid.style.transition='opacity .5s ease';
void grid.offsetWidth;
grid.style.opacity='1';
})();
</script>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/vba-loop/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA入門】変数と定数の使い方を徹底解説</title>
		<link>https://javeo.jp/variables-constants/</link>
					<comments>https://javeo.jp/variables-constants/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Sun, 31 Aug 2025 07:48:53 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[初心者]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=3520</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/variables-constants-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>VBAの変数と定数を入門者向けにまとめました 宣言の書き方・データ型・スコープ・Option Explicit・Constの使い方まで、実例とつまずきポイント込みで解説します]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/variables-constants-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">VBAでマクロを書きはじめると、ボチボチ嫌でも出会うのが変数と定数です<br>この2つは、計算した値や設定をいったん入れておく「箱」のような存在で、ここを押さえておくとコードの読みやすさが一気に変わります</p>



<p class="wp-block-paragraph">この記事では、変数と定数の書き方からデータ型・スコープ・命名規則・Constまで、初心者の方がつまずきやすいところを実例つきでまとめました</p>
</div></div>



<h2 class="wp-block-heading">そもそもVBAの変数とは？基礎から押さえる</h2>



<p class="wp-block-paragraph">結論から言うと、変数は<strong><span class="swl-marker mark_yellow">中身を入れ替えられる箱</span></strong>です<br>数値や文字を一度しまっておいて、あとから取り出したり書き換えたりできます</p>



<h3 class="wp-block-heading">変数とは「中身が変わる箱」</h3>



<p class="wp-block-paragraph">イメージとしては、Excelのセルが近いです<br>セルA1に数値を入れて、あとで別の数値で上書きできるのと同じで、変数も値を入れたり入れ替えたりできる入れ物だと思ってください</p>



<p class="wp-block-paragraph">たとえば合計金額を計算するなら、計算結果をいったん変数にしまっておいて、あとで表示したりセルに書き戻したりします<br>セルに直接書き込み続けるより、いったん変数を経由したほうがコードが追いやすくなります</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>最初は「ラベルを貼った箱」くらいの感覚でOKです</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h3 class="wp-block-heading">変数を使う3つのメリット</h3>



<p class="wp-block-paragraph">なぜわざわざ変数を使うのか、メリットは大きく3つあります</p>



<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li><strong>処理効率が上がる</strong> … 一度計算した値を使い回せるので、同じ計算を何度も書かずに済みます</li>



<li><strong>保守しやすい</strong> … 値を1か所にまとめておけば、後から直すときもその変数だけ見ればよくなります</li>



<li><strong>読みやすい</strong> … targetRow のように意味のある名前を付けると、コードが何をしているか一目で伝わります</li>
</ul>



<p class="wp-block-paragraph">とくに最後の「読みやすさ」は、あとからじわじわ効いてきます<br>セルの座標を数字で直書きすると後から見て意味が分からなくなりますが、名前のある変数なら自分にもチームにもやさしいコードになります</p>



<h3 class="wp-block-heading">変数の書き方(Dimで宣言する)</h3>



<p class="wp-block-paragraph">変数を使う前に「これから使いますよ」と宣言します<br>基本の形は <strong>Dim 変数名 As データ型</strong> です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim score As Integer
Dim name As String</code></pre></div>



<p class="wp-block-paragraph"><strong>Dim</strong> は「宣言する」を意味するキーワード、その後ろに自分で決めた変数名、<strong>As</strong> の後ろにデータ型を書きます<br>上の例だと、score という整数の箱と、name という文字の箱を用意した、と読めます</p>



<p class="wp-block-paragraph">データ型は「この箱には何を入れるか」を決める指定です<br>整数なら Integer、文字なら String といった具合で、種類は後ほどまとめて紹介します</p>



<h3 class="wp-block-heading">Option Explicitで宣言を強制する</h3>



<p class="wp-block-paragraph">ここが入門者にとって一番の押しどころです<br>モジュールの先頭に <strong>Option Explicit</strong> と書いておくと、宣言していない変数を使った瞬間にエラーで教えてくれます</p>



<p class="wp-block-paragraph">何がうれしいかというと、<strong><span class="swl-marker mark_yellow" style="color:#e8313b">変数名のタイプミスをコンパイル時に弾いてくれる</span></strong>ところです<br>たとえば targetRow と書くつもりが targetRwo と打ち間違えても、Option Explicit があれば「そんな変数は宣言されてないよ」と止めてくれます</p>



<p class="wp-block-paragraph">これが無いと、打ち間違えた名前が新しい空っぽの変数として勝手に作られてしまいます<br>計算が合わないのに原因が分からない、やっかいなバグの温床です</p>



<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">Option Explicit はモジュールの先頭(どのプロシージャよりも前)に1行書くだけです<br>毎回手で書くのが面倒なら、VBEの「ツール → オプション → エディター」タブにある<strong>変数の宣言を強制する</strong>にチェックを入れておく方法もあります<br>これから作る新しいモジュールに自動で Option Explicit が入るので、書き忘れそのものを防げます</p>



<p class="wp-block-paragraph">この設定はあまり知られていませんが、宣言忘れのケアレスミスがまとめて減るので、最初に済ませておくと安心です</p>
</div></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>私はこれを入れてから、typoバグでハマる回数がぐっと減りました</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h2 class="wp-block-heading">変数の命名規則(VBA公式ルールと慣習)</h2>



<p class="wp-block-paragraph">変数名は自由に付けられますが、いくつか守るべきルールと、守ると読みやすくなる慣習があります<br>ここを分けて理解しておくと、名付けで迷いにくくなります</p>



<h3 class="wp-block-heading">公式の命名ルール</h3>



<p class="wp-block-paragraph">まず、VBAの仕様として決まっている制約はこちらです</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li>先頭は文字(アルファベットや日本語)で始める、数字や記号からは始められません</li>



<li>スペースや一部の記号(.(ピリオド)! @ &amp; $ #)は使えません</li>



<li>長さは255文字以内に収めます</li>



<li>VBAの関数名やステートメント名と同じ名前(予約語)は避けます<br>衝突するので別の名前にします</li>
</ul>



<p class="wp-block-paragraph">予約語については「使えない」より「避ける」が正確です<br>たとえば Date のような語と同じ名前を付けると意味が衝突するので、別の名前にしておくのが無難です</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">VBAは大文字小文字を区別しません<br>score と Score は同じ変数として扱われます<br>ただし宣言したときの表記は保持されるので、自分で決めた書き方で統一しておくと見やすくなります</p>
</div></div>



<h3 class="wp-block-heading">よく使う命名スタイル</h3>



<p class="wp-block-paragraph">次は慣習の話です<br>変数名の付け方にはいくつか流派があって、どれもルールではなく<strong><span class="swl-marker mark_yellow">読みやすさのための慣習</span></strong>です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim targetRow As Long   &#39; ---キャメルケース
Dim lngRow As Long      &#39; ---ハンガリアン記法
Dim target_row As Long  &#39; ---スネークケース 
Dim TargetRow As Long   &#39; ---パスカルケース
Dim 対象行 As Long       &#39; ---日本語は非推奨</code></pre></div>



<ul class="wp-block-list -list-under-dashed">
<li><strong>キャメルケース</strong> … 2語目以降の頭を大文字に(targetRow)、読みやすく人気のスタイル</li>



<li><strong>ハンガリアン記法</strong> … 型を示す接頭辞を付ける(lngRow なら Long)、ひと目で型が分かります</li>



<li><strong>スネークケース</strong> … 単語をアンダースコアでつなぐ(target_row)</li>



<li><strong>パスカルケース</strong> … すべての単語の頭を大文字に(TargetRow)</li>



<li><strong>日本語</strong> … 動きはしますが文字化けや入力切替の手間があり非推奨です</li>
</ul>



<p class="wp-block-paragraph">大事なのは、どれが正解かではなく<strong>1つのプロジェクトで統一する</strong>点です<br>キャメルケースとハンガリアン記法が混ざっていると逆に読みにくくなるので、自分なりのルールを決めて揃えると安心です</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>こんなのもあるんだー、くらいでまずは大丈夫です</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h2 class="wp-block-heading">変数のスコープ(適用範囲)を理解する</h2>



<p class="wp-block-paragraph">スコープとは、その変数が<strong><span class="swl-marker mark_yellow">どこまで使えるか</span></strong>という範囲のことです<br>結論を先に言うと、宣言する場所によって「使える範囲」が変わります</p>



<figure class="wp-block-image size-large is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2025/08/image-24.png"><img decoding="async" width="1024" height="538" src="https://javeo.jp/wp-content/uploads/2025/08/image-24-1024x538.png" alt="VBAの変数スコープ(適用範囲)を表した図" class="wp-image-3522" srcset="https://javeo.jp/wp-content/uploads/2025/08/image-24-1024x538.png 1024w, https://javeo.jp/wp-content/uploads/2025/08/image-24-300x158.png 300w, https://javeo.jp/wp-content/uploads/2025/08/image-24-150x79.png 150w, https://javeo.jp/wp-content/uploads/2025/08/image-24-768x403.png 768w, https://javeo.jp/wp-content/uploads/2025/08/image-24.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">宣言する場所による違い</h3>



<p class="wp-block-paragraph">変数を宣言する場所はざっくり2か所あります<br>プロシージャ(Sub や Function)の中で宣言するか、モジュールの先頭(どのプロシージャよりも前)で宣言するかです</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table"><table style="--table-width:1200px;"><thead><tr><th>宣言する場所</th><th>使える範囲</th><th>使うキーワード</th></tr></thead><tbody><tr><td>プロシージャの中</td><td>そのプロシージャの中だけ</td><td><strong>Dim</strong> / <strong>Static</strong></td></tr><tr><td>モジュールの先頭</td><td>そのモジュール内のすべてのプロシージャ</td><td><strong>Dim</strong> / <strong>Private</strong></td></tr><tr><td>モジュールの先頭(全体公開)</td><td>すべてのモジュールから</td><td><strong>Public</strong></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">プロシージャの中で Dim したローカル変数は、そのプロシージャを抜けると消えます<br>逆にモジュールの先頭で宣言すると、そのモジュールの複数のプロシージャから同じ変数を共有できます</p>



<h3 class="wp-block-heading">PrivateとPublicステートメント</h3>



<p class="wp-block-paragraph">モジュールの先頭で宣言するとき、<strong>Private</strong> と <strong>Public</strong> で公開範囲を変えられます<br>違いは、他のモジュールから触れるかどうかです</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table"><table style="--table-width:1200px;"><thead><tr><th>キーワード</th><th>同じモジュール内から</th><th>他のモジュールから</th></tr></thead><tbody><tr><td><strong>Private</strong></td><td>○</td><td>×</td></tr><tr><td><strong>Public</strong></td><td>○</td><td>○</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">ちなみに、モジュールの先頭で Dim をそのまま使うと、これは Private と同じ扱いになります<br>つまり同じモジュール内からは使えるけれど、他のモジュールからは触れません</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">モジュールレベルの無修飾 Dim は Private と同等の扱いになります(他のモジュールからは触れません)<br>「自動的に Private と宣言される」というより「事実上 Private と同じ動き」と覚えておくと正確です</p>
</div></div>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">同じ名前の変数は、同一スコープの中では重複して宣言できません<br>ただしスコープが違えばOKで、たとえばモジュールレベルの age とプロシージャ内の age は同居できます</p>
</div></div>



<p class="wp-block-paragraph">もう1つ覚えておくと便利なのが <strong>Static</strong> です<br>プロシージャ内で Static を使って宣言すると、プロシージャを抜けても値が残ります<br>呼び出すたびに1ずつ増えるカウンターを作りたいときに使えます</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>まずは「Dim=その場だけ」「Public=全体で共有」を押さえればOKです</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div class="p-blogParts post_content" data-partsID="4601">
<div class="jv-books" id="jv-books-vba" data-shelf="vba"><div class="jv-books-head"><span class="jv-books-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> VBAの独学に効く本</span><span class="jv-books-pr">PR</span></div><div class="jv-books-grid"><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240" alt="Excel VBA塾【動画×本で学ぶ!】" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel VBA塾【動画×本で学ぶ!】</p><p class="jv-book-author">たてばやし淳</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4839975728">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4839975728">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240" alt="パーフェクトExcel VBA" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">パーフェクトExcel VBA</p><p class="jv-book-author">高橋宣成</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4297108755">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4297108755">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240" alt="Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版</p><p class="jv-book-author">国本温子</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4815631298">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4815631298">楽天で見る</a></div></div></div></div><p class="jv-books-note">私のおすすめからランダムで3冊を表示しています</p></div>
<style>
.jv-books{border:1px solid #e0e0e0;border-radius:8px;padding:16px;margin:1.5em 0;background:#fff}
.jv-books-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.jv-books-title{font-weight:700;font-size:1.05em}
.jv-books-pr{font-size:.7em;color:#888;border:1px solid #ccc;border-radius:3px;padding:1px 6px;flex-shrink:0}
.jv-books-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;min-height:330px}
.jv-book-card{display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid #f0f0f0;border-radius:6px;padding:12px 8px;background:#fafafa}
.jv-book-cover img{width:auto;max-width:120px;height:170px;object-fit:contain}
.jv-book-info{width:100%;flex:1;display:flex;flex-direction:column}
.jv-book-title{font-size:.82em;font-weight:600;line-height:1.4;margin:8px 0 2px;min-height:2.8em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jv-book-author{font-size:.72em;color:#777;margin:0 0 8px}
.jv-book-btns{display:flex;flex-direction:column;gap:6px;width:100%;margin-top:auto}
.jv-btn{display:block;text-align:center;font-size:.78em;font-weight:600;color:#fff!important;text-decoration:none!important;border-radius:4px;padding:7px 4px;line-height:1.2}
.jv-btn-az{background:#e88b00}
.jv-btn-rk{background:#bf0000}
.jv-btn:hover{opacity:.85}
.jv-books-note{font-size:.7em;color:#999;text-align:right;margin:8px 0 0}
@media(max-width:599px){
.jv-books-grid{grid-template-columns:1fr;min-height:0}
.jv-book-card{flex-direction:row;text-align:left;gap:12px}
.jv-book-cover img{height:110px;max-width:80px}
.jv-book-info{min-width:0}
.jv-book-title{min-height:0}
.jv-book-btns{flex-direction:row}
.jv-btn{flex:1}
}
</style>
<script>
(function(){
var SHELF='vba';
var root=document.getElementById('jv-books-'+SHELF);
if(!root||root.dataset.init)return;
root.dataset.init='1';
var POOL=[{"t": "Excel VBA塾【動画×本で学ぶ!】", "a": "たてばやし淳", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F", "id": "4839975728"}, {"t": "パーフェクトExcel VBA", "a": "高橋宣成", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F", "id": "4297108755"}, {"t": "Excel マクロ&VBA［実践ビジネス入門講座］完全版 第3版", "a": "国本温子", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F", "id": "4815631298"}, {"t": "増強改訂版 できる イラストで学ぶ 入社1年目からのExcel VBA", "a": "きたみあきこ", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8414/9784295018414.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4295018414?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F", "id": "4295018414"}];
var REL='nofollow sponsored noopener noreferrer';
function el(tag,cls){var e=document.createElement(tag);if(cls)e.className=cls;return e;}
function btn(href,cls,label,mall,id){
var a=el('a','jv-btn '+cls);a.href=href;a.target='_blank';a.rel=REL;a.textContent=label;
a.setAttribute('data-shelf',SHELF);a.setAttribute('data-mall',mall);a.setAttribute('data-book',id);
return a;}
function card(b){
var d=el('div','jv-book-card');
var cover=el('a','jv-book-cover');cover.href=b.az;cover.target='_blank';cover.rel=REL;
var img=el('img');img.src=b.img;img.alt=b.t;img.width=120;img.height=170;img.loading='lazy';
cover.appendChild(img);
var info=el('div','jv-book-info');
var ttl=el('p','jv-book-title');ttl.textContent=b.t;
var au=el('p','jv-book-author');au.textContent=b.a;
var btns=el('div','jv-book-btns');
btns.appendChild(btn(b.az,'jv-btn-az','Amazonで見る','amazon',b.id));
if(b.rk){btns.appendChild(btn(b.rk,'jv-btn-rk','楽天で見る','rakuten',b.id));}
info.appendChild(ttl);info.appendChild(au);info.appendChild(btns);
d.appendChild(cover);d.appendChild(info);
return d;}
var pool=POOL.slice();
for(var i=pool.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1));var t=pool[i];pool[i]=pool[j];pool[j]=t;}
var grid=root.querySelector('.jv-books-grid');
grid.style.opacity='0';
while(grid.firstChild)grid.removeChild(grid.firstChild);
pool.slice(0,3).forEach(function(b){grid.appendChild(card(b));});
grid.style.transition='opacity .5s ease';
void grid.offsetWidth;
grid.style.opacity='1';
})();
</script>
</div>


<h2 class="wp-block-heading">VBAのデータ型一覧と選び方</h2>



<p class="wp-block-paragraph">データ型は「この箱に何を入れるか」を決める指定です<br>適切な型を選ぶと、メモリの無駄が減り、想定外の値が入るのを防げます</p>



<h3 class="wp-block-heading">基本的なデータ型</h3>



<p class="wp-block-paragraph">まずは入門でよく使う型をまとめました<br>全部覚える必要はなく、最初は Long(整数)String(文字)Double(小数)あたりを押さえれば十分です</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table"><table style="--table-width:900px;"><thead><tr><th>データ型</th><th>入れるもの</th><th>範囲・特徴</th><th>初期値</th></tr></thead><tbody><tr><td><strong>String</strong></td><td>文字列</td><td>テキスト全般</td><td>空文字(&#8220;&#8221;)</td></tr><tr><td><strong>Long</strong></td><td>整数</td><td>約 -21億 〜 21億</td><td>0</td></tr><tr><td><strong>Integer</strong></td><td>整数(小さめ)</td><td>-32,768 〜 32,767</td><td>0</td></tr><tr><td><strong>Byte</strong></td><td>整数(極小)</td><td>0 〜 255</td><td>0</td></tr><tr><td><strong>Double</strong></td><td>小数</td><td>とても大きい/小さい小数まで</td><td>0</td></tr><tr><td><strong>Boolean</strong></td><td>真偽</td><td>True か False</td><td>False(※挙動上)</td></tr><tr><td><strong>Date</strong></td><td>日付・時刻</td><td>西暦100年〜9999年の日付</td><td>シリアル値0として</td></tr><tr><td><strong>Currency</strong></td><td>通貨</td><td>小数点以下4桁固定でお金に強い</td><td>0</td></tr></tbody></table></figure>



<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">整数を扱うなら、Integer より <strong>Long</strong> を選ぶのがおすすめです<br>Integer は範囲が狭く、行数のように大きくなりうる数値だと上限を超えてオーバーフローのエラーで止まってしまいます<br>現代のパソコンでは Long を使ってもメモリ差はほとんど気にならないので、迷ったら Long で問題ありません</p>
</div></div>



<p class="wp-block-paragraph">お金の計算をするなら <strong><span class="swl-marker mark_yellow">Currency</span></strong> が向いています<br>小数点以下4桁で固定されるので、Double で起きがちな小さな誤差が出にくく、金額の足し引きに強いです</p>



<p class="wp-block-paragraph">Boolean と Date の初期値には「※」を添えています<br>これは公式に「初期値はこれ」と名指しされているわけではなく、挙動上 Boolean は False、Date はシリアル値0として扱われる、という意味の注記です</p>



<h3 class="wp-block-heading">オブジェクト型とSet</h3>



<p class="wp-block-paragraph">セルやワークブックそのものを変数に入れたいときは、オブジェクト型を使います<br>このとき普通の <strong>=</strong> ではなく <strong>Set</strong> から始めるのがポイントです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Dim name As String
Dim wb As Workbook

name = &quot;ジャベ雄&quot;
Set wb = Thisworkbook &#39; ---オブジェクトへの代入はSetから始める</code></pre></div>



<p class="wp-block-paragraph">文字や数値はそのまま = で代入できますが、ワークブックやワークシートのようなオブジェクトは Set を付けないと代入できません<br>うっかり Set を忘れるとエラーになるので、オブジェクトには Set とセットで覚えておくと安心です</p>



<p class="wp-block-paragraph">なお、オブジェクト型の変数はまだ何も入れていない状態だと <strong>Nothing</strong>(どのオブジェクトも参照していない)になります<br>Set で実際のオブジェクトを代入してはじめて使えるようになります</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">文字列は <strong>name = &#8220;ジャベ雄&#8221;</strong> のように二重引用符(&#8220;)で囲みます<br>VBAでは単一引用符(&#8216;)はコメントの開始として扱われるので、文字列の囲みに使うと値が入らず思わぬ動きになります</p>
</div></div>



<h3 class="wp-block-heading">万能型のVariantとObject</h3>



<p class="wp-block-paragraph"><strong>Variant</strong> は何でも入る万能型です<br>データ型を指定しない(As を省略する)と、原則この Variant が割り当てられます</p>


<div class="c-scrollHint sp_"><span>スクロールできます <i class="icon-more_arrow"></i></span></div>
<figure data-table-scrollable="sp" class="wp-block-table"><table style="--table-width:1200px;"><thead><tr><th>型</th><th>入るもの</th><th>初期値</th></tr></thead><tbody><tr><td><strong>Variant</strong></td><td>何でも(数値・文字・配列など)</td><td>Empty</td></tr><tr><td><strong>Object</strong></td><td>オブジェクト参照全般</td><td>Nothing</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">便利そうに見えますが、Variant は基本的に避けたい型です<br>型が決まっていないぶん想定外の値が入りやすく、typo にも気づきにくくなります<br>配列を柔軟に扱いたいときなど、必要な場面に絞って使うのがおすすめです</p>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">1行で複数の変数を宣言するとき、型の付け方に落とし穴があります<br><strong>Dim a, b, c As Integer</strong> と書くと、Integer になるのは c だけで、a と b は Variant になってしまいます<br>全部 Integer にしたいなら、面倒でも各変数に As を付けて宣言してください</p>
</div></div>



<h3 class="wp-block-heading">列挙型(Enum)とユーザー定義型(Type)</h3>



<p class="wp-block-paragraph">少し発展的な型として、Enum と Type も紹介しておきます<br>こんなのもあるんだー、ぐらいで読み飛ばしてもらって大丈夫です</p>



<p class="wp-block-paragraph">まず <strong>Enum</strong>(列挙型)は、関連する数値に名前を付けてまとめられる型です<br>曜日や区分のように、決まった選択肢を分かりやすく扱いたいときに便利です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Enum WeekDay
    Sunday      &#39; 0
    Monday      &#39; 1
    Tuesday     &#39; 2
    Wednesday   &#39; 3
    Thursday    &#39; 4
    Friday      &#39; 5
    Saturday    &#39; 6
End Enum

Sub ShowDay()
    MsgBox &quot;今日の曜日は: &quot; & WeekDay.Monday  &#39; 結果は「1」
End Sub</code></pre></div>



<p class="wp-block-paragraph">次に <strong>Type</strong>(ユーザー定義型)は、複数のデータを1つにまとめた自作の型です<br>下の例だと、名前・年齢・給与をひとかたまりの「従業員」として扱えます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Type Employee
    Name As String
    Age As Integer
    Salary As Double
End Type

Sub ShowEmployee()
    Dim emp As Employee
    emp.Name = &quot;田中 太郎&quot;
    emp.Age = 30
    emp.Salary = 5000000

    MsgBox &quot;氏名: &quot; & emp.Name & vbCrLf & _
           &quot;年齢: &quot; & emp.Age & vbCrLf & _
           &quot;給与: &quot; & emp.Salary & &quot;円&quot;
End Sub
</code></pre></div>



<p class="wp-block-paragraph">このあたりは慣れてきてから使えば十分です<br>最初は基本のデータ型を使いこなすところを優先しましょう</p>



<h2 class="wp-block-heading">定数(Const)の使い方</h2>



<p class="wp-block-paragraph">定数は、一度決めたら<strong><span class="swl-marker mark_yellow">中身が変わらない箱</span></strong>です<br>変数が「入れ替えられる箱」なのに対して、定数は「最初に決めた値で固定する箱」だと考えてください</p>



<h3 class="wp-block-heading">定数とは(変わらない値)</h3>



<p class="wp-block-paragraph">たとえば消費税率や、決まった上限値のように、プログラムの途中で変わってほしくない値を入れるのに向いています<br>定数は宣言時に値を確定させ、その後は書き換えられません</p>



<h3 class="wp-block-heading">定数を使うメリット</h3>



<ul class="wp-block-list is-style-check_list -list-under-dashed">
<li><strong>安全</strong> … 実行中にうっかり書き換わる心配がありません</li>



<li><strong>一括変更できる</strong> … 値を1か所にまとめておけば、変更があってもそこだけ直せば済みます</li>



<li><strong>読みやすい</strong> … 0.1 のような数字を直書きするより、TAX_RATE のような名前のほうが意味が伝わります</li>
</ul>



<p class="wp-block-paragraph">ここで大事になるのが<strong><span class="swl-marker mark_yellow">マジックナンバーの回避</span></strong>です<br>0.1 や 100 のようにコードへ直接書かれた意味の分かりにくい数字をマジックナンバーと呼びますが、TAX_RATE のような定数に置き換えると、名前そのものが値の説明になってくれます</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>「あちこちに同じ数字を直書きしてた…」が無くなるのは大きいです</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<h3 class="wp-block-heading">定数の書き方</h3>



<p class="wp-block-paragraph">定数の宣言は <strong>Const 名 As 型 = 値</strong> の形です<br>変数の Dim と違い、宣言と同時に値まで決めてしまうのが特徴です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Const score As Integer = 100
Const name As String = &quot;ジャベ雄&quot;</code></pre></div>



<p class="wp-block-paragraph">定数の式には、ほかの定数やリテラル(直接書いた数値や文字)、四則演算は使えますが、変数や関数は使えません<br>あくまで「最初に確定できる値」だけを入れる、と覚えておくと迷いません</p>



<p class="wp-block-paragraph">定数にもスコープがあります<br>モジュールの先頭で宣言して Public を付ければ他のモジュールから使えますが、プロシージャの中で書いた定数はそのプロシージャの中だけで、公開範囲は変えられません</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">自分で Const を定義しなくても、最初から使える組み込み定数もあります<br>改行を表す <strong>vbCrLf</strong> やタブの <strong>vbTab</strong> がその例で、メッセージを整形するときによく使います</p>
</div></div>



<h3 class="wp-block-heading">定数の命名規則</h3>



<p class="wp-block-paragraph">定数は変数と区別しやすいよう、<strong><span class="swl-marker mark_yellow">すべて大文字+アンダースコア</span></strong>で書く慣習があります<br>これも仕様ではなく慣習ですが、コードの中で「ここは固定値だな」と一目で分かるので便利です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Const MAX_USER_COUNT As Integer = 100
Const DEFAULT_FONT_SIZE As Double = 12.5
Const API_ENDPOINT_URL As String = &quot;https://example.com/api&quot;</code></pre></div>



<p class="wp-block-paragraph">このように大文字で書いておくと、後からコードを読んだときに変数と定数がすぐ見分けられます<br>小さな工夫ですが、保守のしやすさにつながります</p>



<h2 class="wp-block-heading">変数・定数のよくある質問(FAQ)</h2>



<p class="wp-block-paragraph">最後に、初心者の方からよく出る疑問をまとめました<br>つまずきやすいポイントなので、気になるところだけでも目を通してみてください</p>



<div class="swell-block-faq" data-q="col-text" data-a="col-text">
<div class="swell-block-faq__item"><h3 class="faq_q">変数と定数、どっちを使えばいい？</h3><div class="faq_a">
<p class="wp-block-paragraph">処理の途中で値が変わるなら変数、最初に決めたら変えたくない値なら定数です<br>消費税率や上限値のように固定したいものは定数にしておくと、うっかり書き換わる事故を防げます</p>
</div></div>



<div class="swell-block-faq__item"><h3 class="faq_q">Variantは使ってもいい？</h3><div class="faq_a">
<p class="wp-block-paragraph">使えますが、基本は避けたほうが無難です<br>型が決まらないぶん想定外の値が入りやすく、typo にも気づきにくくなります<br>配列を柔軟に扱いたいなど、必要な場面に絞って使うのがおすすめです</p>
</div></div>



<div class="swell-block-faq__item"><h3 class="faq_q">同じ名前の変数は宣言できない？</h3><div class="faq_a">
<p class="wp-block-paragraph">同一スコープの中では重複して宣言できません<br>ただしスコープが違えばOKで、モジュールレベルの age とプロシージャ内の age は別物として同居できます<br>「一切ダメ」ではなく「同じスコープの中ではダメ」が正確です</p>
</div></div>



<div class="swell-block-faq__item"><h3 class="faq_q">Dim a, b As Long で両方Longになる？</h3><div class="faq_a">
<p class="wp-block-paragraph">なりません<br>この書き方だと Long になるのは b だけで、a は Variant になります<br>両方 Long にしたいなら <strong>Dim a As Long, b As Long</strong> のように各変数に型を付けてください</p>
</div></div>
</div>



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



<p class="wp-block-paragraph">VBAの変数と定数を一通り見てきました<br>最後に押さえておきたいポイントを振り返ります</p>



<ul style="background-color:#FFFFDC80" class="wp-block-list -list-under-dashed has-background">
<li>変数は<strong>中身が変わる箱</strong>、定数は<strong>中身を固定する箱</strong></li>



<li>宣言は <strong>Dim 変数名 As データ型</strong>、型を指定すると無駄やミスが減る</li>



<li>モジュール先頭に <strong>Option Explicit</strong> を入れて宣言を強制し、typo を防ぐ</li>



<li>スコープ(使える範囲)は宣言する場所で決まる</li>
</ul>



<p class="wp-block-paragraph">変数の代表的な使いどころのひとつが、ループのカウンター変数です<br>繰り返し処理で「今が何回目か」を数えるのに変数を使うので、変数になじんだら<a href="https://javeo.jp/vba-loop/" target="_blank" rel="noopener noreferrer">VBAのループ処理</a>もあわせて読むと、コードの幅がぐっと広がります</p>



<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">実は、こうしたVBAコードはClaudeのようなAIに頼んで書いてもらうこともできます<br>「Excelの最終行まで合計を計算するVBAを、変数に型を付けて書いて」のように、やりたいことと条件を伝えるとたたき台を作ってくれます</p>



<p class="wp-block-paragraph">その際は<strong>書き込む前にコードの内容を私に説明してから貼ってね</strong>と一言添えておくと、中身を理解しないまま実行する事故を防げます</p>
</div></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -circle"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://javeo.jp/wp-content/uploads/2026/05/cropped-サイトアイコン2.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">ジャベ雄</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>まずは Dim と型、Option Explicit から始めてみてくださいね</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div class="p-blogParts post_content" data-partsID="4601">
<div class="jv-books" id="jv-books-vba" data-shelf="vba"><div class="jv-books-head"><span class="jv-books-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> VBAの独学に効く本</span><span class="jv-books-pr">PR</span></div><div class="jv-books-grid"><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240" alt="Excel VBA塾【動画×本で学ぶ!】" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel VBA塾【動画×本で学ぶ!】</p><p class="jv-book-author">たてばやし淳</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4839975728">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4839975728">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240" alt="パーフェクトExcel VBA" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">パーフェクトExcel VBA</p><p class="jv-book-author">高橋宣成</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4297108755">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4297108755">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240" alt="Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版</p><p class="jv-book-author">国本温子</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4815631298">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&#038;m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4815631298">楽天で見る</a></div></div></div></div><p class="jv-books-note">私のおすすめからランダムで3冊を表示しています</p></div>
<style>
.jv-books{border:1px solid #e0e0e0;border-radius:8px;padding:16px;margin:1.5em 0;background:#fff}
.jv-books-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.jv-books-title{font-weight:700;font-size:1.05em}
.jv-books-pr{font-size:.7em;color:#888;border:1px solid #ccc;border-radius:3px;padding:1px 6px;flex-shrink:0}
.jv-books-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;min-height:330px}
.jv-book-card{display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid #f0f0f0;border-radius:6px;padding:12px 8px;background:#fafafa}
.jv-book-cover img{width:auto;max-width:120px;height:170px;object-fit:contain}
.jv-book-info{width:100%;flex:1;display:flex;flex-direction:column}
.jv-book-title{font-size:.82em;font-weight:600;line-height:1.4;margin:8px 0 2px;min-height:2.8em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jv-book-author{font-size:.72em;color:#777;margin:0 0 8px}
.jv-book-btns{display:flex;flex-direction:column;gap:6px;width:100%;margin-top:auto}
.jv-btn{display:block;text-align:center;font-size:.78em;font-weight:600;color:#fff!important;text-decoration:none!important;border-radius:4px;padding:7px 4px;line-height:1.2}
.jv-btn-az{background:#e88b00}
.jv-btn-rk{background:#bf0000}
.jv-btn:hover{opacity:.85}
.jv-books-note{font-size:.7em;color:#999;text-align:right;margin:8px 0 0}
@media(max-width:599px){
.jv-books-grid{grid-template-columns:1fr;min-height:0}
.jv-book-card{flex-direction:row;text-align:left;gap:12px}
.jv-book-cover img{height:110px;max-width:80px}
.jv-book-info{min-width:0}
.jv-book-title{min-height:0}
.jv-book-btns{flex-direction:row}
.jv-btn{flex:1}
}
</style>
<script>
(function(){
var SHELF='vba';
var root=document.getElementById('jv-books-'+SHELF);
if(!root||root.dataset.init)return;
root.dataset.init='1';
var POOL=[{"t": "Excel VBA塾【動画×本で学ぶ!】", "a": "たてばやし淳", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F", "id": "4839975728"}, {"t": "パーフェクトExcel VBA", "a": "高橋宣成", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F", "id": "4297108755"}, {"t": "Excel マクロ&VBA［実践ビジネス入門講座］完全版 第3版", "a": "国本温子", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F", "id": "4815631298"}, {"t": "増強改訂版 できる イラストで学ぶ 入社1年目からのExcel VBA", "a": "きたみあきこ", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8414/9784295018414.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4295018414?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F", "id": "4295018414"}];
var REL='nofollow sponsored noopener noreferrer';
function el(tag,cls){var e=document.createElement(tag);if(cls)e.className=cls;return e;}
function btn(href,cls,label,mall,id){
var a=el('a','jv-btn '+cls);a.href=href;a.target='_blank';a.rel=REL;a.textContent=label;
a.setAttribute('data-shelf',SHELF);a.setAttribute('data-mall',mall);a.setAttribute('data-book',id);
return a;}
function card(b){
var d=el('div','jv-book-card');
var cover=el('a','jv-book-cover');cover.href=b.az;cover.target='_blank';cover.rel=REL;
var img=el('img');img.src=b.img;img.alt=b.t;img.width=120;img.height=170;img.loading='lazy';
cover.appendChild(img);
var info=el('div','jv-book-info');
var ttl=el('p','jv-book-title');ttl.textContent=b.t;
var au=el('p','jv-book-author');au.textContent=b.a;
var btns=el('div','jv-book-btns');
btns.appendChild(btn(b.az,'jv-btn-az','Amazonで見る','amazon',b.id));
if(b.rk){btns.appendChild(btn(b.rk,'jv-btn-rk','楽天で見る','rakuten',b.id));}
info.appendChild(ttl);info.appendChild(au);info.appendChild(btns);
d.appendChild(cover);d.appendChild(info);
return d;}
var pool=POOL.slice();
for(var i=pool.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1));var t=pool[i];pool[i]=pool[j];pool[j]=t;}
var grid=root.querySelector('.jv-books-grid');
grid.style.opacity='0';
while(grid.firstChild)grid.removeChild(grid.firstChild);
pool.slice(0,3).forEach(function(b){grid.appendChild(card(b));});
grid.style.transition='opacity .5s ease';
void grid.offsetWidth;
grid.style.opacity='1';
})();
</script>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/variables-constants/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA入門】今から始めるVBA</title>
		<link>https://javeo.jp/vba-beginner-001/</link>
					<comments>https://javeo.jp/vba-beginner-001/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Sat, 30 Aug 2025 09:52:53 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[マクロ]]></category>
		<category><![CDATA[初心者]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=2673</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2025/08/VBA入門-1-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>VBAを始める前に VBAを始める前にまずVBAの概要とExcelの準備です VBAとは VBA（Visual Basic for Applications）は、Microsoft 365・Office製品（Excel、 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2025/08/VBA入門-1-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<div class="wp-block-cocoon-blocks-info-box block-box info-box">
<p class="wp-block-paragraph">皆さんプログラミングしていますか？</p>



<p class="wp-block-paragraph">プログラミングなんて簡単！・・とは言いませんが、これだけITが発展した現代においては一定の知識を持っていて損はないですし、業務効率の代名詞と言える&#8221;システム化&#8221;を担当するには必須レベル</p>



<p class="wp-block-paragraph">IT職ではない人でも身近でトライ＆エラーし放題、身に着けたスキルがすぐに活かせるEXCELとVBAがいいんじゃないかと言うことで今さらではありますがVBA入門を私なりにまとめます</p>
</div>



<h2 class="wp-block-heading">VBAを始める前に</h2>



<p class="wp-block-paragraph">VBAを始める前にまずVBAの概要とExcelの準備です</p>



<h3 class="wp-block-heading">VBAとは</h3>



<p class="wp-block-paragraph"><strong>VBA</strong>（<strong>V</strong>isual <strong>B</strong>asic for <strong>A</strong>pplications）は、Microsoft 365・Office製品（Excel、Accessなど）で使用できるプログラミング言語です</p>



<p class="wp-block-paragraph">よくVBAとマクロの違いみたいな話を見ますがマクロは機能名でVBAはその中身って感じで会話の中では同じものとして扱って大丈夫かなと</p>



<p class="wp-block-paragraph">VBAを使いこなせば、これまで何時間もかかっていた作業が<strong>ボタン一つで一瞬で終わる</strong>、なんてことも夢ではありません</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">VBAでできる作業例</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li>定型的なメールの作成・送信</li>



<li>毎月のレポート作成</li>



<li>大量のデータ整形・転記</li>



<li>ブラウザを自動操作してエクセル情報の転記</li>
</ul>
</div></div>



<h3 class="wp-block-heading">開発者タブを表示しよう</h3>



<p class="wp-block-paragraph">ExcelでVBA始めるならまず開発タブを表示しましょう</p>



<p class="wp-block-paragraph">正直慣れるとVBEの画面は&#8221;<strong>Alt+F11</strong>&#8220;で開くしマクロは&#8221;<strong>Alt+F8</strong>&#8220;で実行しちゃうので使う頻度は減りますが最初はあったほうが便利です</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">開発者タブの表示手順</span></div><div class="tab-caption-box-content block-box-content box-content">
<ol style="border-radius:20px" class="wp-block-list">
<li>「ファイル」タブ → 「オプション」をクリック</li>



<li>「リボンのユーザー設定」を開く</li>



<li>右側の「メインタブ」の一覧から「開発」にチェックを入れ、「OK」をクリック</li>
</ol>
</div></div>



<figure class="wp-block-image size-large"><a href="https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1.png"><img decoding="async" width="1024" height="555" src="https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-1024x555.png" alt="" class="wp-image-2680" srcset="https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-1024x555.png 1024w, https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-300x163.png 300w, https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-150x81.png 150w, https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-768x416.png 768w, https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1-1536x832.png 1536w, https://javeo.jp/wp-content/uploads/2024/10/2024-10-06_21h55_20-1.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h2 class="wp-block-heading">VBAで押さえておきたい基本</h2>



<p class="wp-block-paragraph">VBAを学ぶ上で、最低限知っておきたい基本的な概念をいくつか紹介します</p>



<p class="wp-block-paragraph">最初は難しく感じるかもしれませんが、深堀は別でやりますので今は「こういうものがあるんだな」くらいの気持ちで読み進めてください</p>



<h3 class="wp-block-heading">変数と定数</h3>



<p class="wp-block-paragraph">プログラミングでは、データ（数値や文字列など）を一時的に保存しておくための「箱」のようなものを使いますが、この箱のことを<strong>変数</strong>や<strong>定数</strong>と呼びます</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">変数と定数について</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li><strong>変数</strong>: 中身を自由に入れ替えられる箱</li>



<li><strong>定数</strong>: 一度入れたら中身を変えられない箱</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Sub test()
Const tax_rate As Double = 0.1 &#39;---税率
Dim price_excluding_tax As Long &#39;---税抜き価格
Dim price_including_tax As Long &#39;---税込み価格

price_excluding_tax = 1980
price_including_tax = price_excluding_tax * (1 + tax_rate)
Debug.Print (price_including_tax)
End Sub
</code></pre></div>
</div></div>



<h3 class="wp-block-heading">データ型</h3>



<p class="wp-block-paragraph">変数や定数には、どんな種類のデータを入れるかをあらかじめ決めておく必要があり、これを<strong>データ型</strong>と呼びます</p>



<p class="wp-block-paragraph">例えば、数値を扱うのか、文字を扱うのか、日付を扱うのか、といった区別です</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout" style="border-width:1px"><thead><tr><th>データ型</th><th>内容</th><th>例</th></tr></thead><tbody><tr><td>Long</td><td>整数</td><td>1, 100, -50</td></tr><tr><td>String</td><td>文字列</td><td>&#8220;こんにちは&#8221;, &#8220;Excel&#8221;</td></tr><tr><td>Date</td><td>日付・時刻</td><td>2025/08/30</td></tr><tr><td>Boolean</td><td>真偽値 (True/False)</td><td>True, False</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">条件分岐、ループ処理などのフロー制御</h3>



<p class="wp-block-paragraph">プログラムは基本的に上から下へ順番に実行されますが、<strong>フロー制御</strong>を使うことで状況に応じて処理の流れを変えることができます</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">フロー制御の例</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li><strong>ループ処理 (For, Do Whileなど)</strong>: 同じ処理を何度も繰り返したい場合に使います<br>例えば「○○を10回繰り返す」「△△という条件が満たされるまで繰り返す」といった処理が可能です</li>



<li><strong>条件分岐 (If)</strong>: 「もし○○ならAの処理、そうでなければBの処理をする」というように、条件によって処理を分けます</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>&#39; A1～A10のセルの中で300以上の数字だったら文字を赤くする
Sub test()
Dim i As Long
For i = 1 To 10
    If Cells(i, 1).Value &gt;= 300 Then
        Cells(i, 1).Font.Color = RGB(255, 0, 0)
    End If
Next
End Sub</code></pre></div>
</div></div>



<h3 class="wp-block-heading">メインプロシージャとサブプロシージャ</h3>



<p class="wp-block-paragraph">VBAでは、一連の処理のまとまりを<strong>プロシージャ</strong>と呼びます</p>



<p class="wp-block-paragraph">機能や仕組みではなく、役割や考え方みたいな位置づけなので必ずしもこの二つが必要ってわけではなく簡単なプログラムならプロシージャー1つなんてことも多々ありますし、サブプロシージャーのさらにサブプロシージャーを作ったりすることもあります</p>



<p class="wp-block-paragraph">車でいうとメインプロシージャが車の組み立て、サブプロシージャーが各部品の作成のイメージですね</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">プロシージャーについて</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li><strong>メインプロシージャ</strong>: 一連の処理を始めて完了させる主たるプログラム</li>



<li><strong>サブプロシージャ</strong>: 特定の処理（例えば、ボディを作る、エンジンを作る）を部品として独立させたプログラム※メインプロシージャから呼び出して使います</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Sub MainProcedure()
    Debug.Print (&quot;これがメインプロシージャーです&quot;)
    Call SubProcedure1
    Call SubProcedure2
End Sub
Sub SubProcedure1()
    Debug.Print (&quot;これがメインプロシージャー1です&quot;)
End Sub
Sub SubProcedure2()
    Debug.Print (&quot;これがメインプロシージャー2です&quot;)
End Sub

</code></pre></div>
</div></div>



<h3 class="wp-block-heading">可読性の重要性</h3>



<p class="wp-block-paragraph">VBAは自分だけでなく、他の人がコードを読む（または将来の自分が見返す）可能性もあります</p>



<p class="wp-block-paragraph">誰が見ても分かりやすい、<strong>可読性の高いコード</strong>を書くことは非常に重要です</p>



<h4 class="wp-block-heading">インデントについて</h4>



<p class="wp-block-paragraph"><strong>インデント</strong>とは、行頭の字下げのことで処理の塊（ブロック）を視覚的に分かりやすくするために行います</p>



<p class="wp-block-paragraph">If文やFor文などフロー制御の中の処理は、インデントを下げるのが一般的です</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">インデントについて</span></div><div class="tab-caption-box-content block-box-content box-content">
<p class="wp-block-paragraph">処理の塊で行頭にタブキーかスペース（一般的には半角スペース×4）を付けます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>&#39; 悪い例
If Range(&quot;A1&quot;).Value &gt; 10 Then
MsgBox &quot;10より大きいです&quot;
End If

&#39; 良い例
If Range(&quot;A1&quot;).Value &gt; 10 Then
    MsgBox &quot;10より大きいです&quot;
End If</code></pre></div>
</div></div>



<h4 class="wp-block-heading">変数などの命名規則について</h4>



<p class="wp-block-paragraph">変数やプロシージャの名前は、その役割がひと目で分かるように付けることが大切です</p>



<p class="wp-block-paragraph">例えば、&#8221;<code>a"</code>や&#8221;<code>b"</code>のような無意味な名前ではなく、<code>"userName"</code>（ユーザー名）や<code>"calculateTotalPrice"</code>（合計金額を計算する）のように一見して意味が分かるようにすることが望ましいです</p>



<p class="wp-block-paragraph">書き方にも規則性がありまして&#8221;定数は全て大文字にする&#8221;、&#8221;プレフィックスでデータ型を示す&#8221;、&#8221;単語を特定の文字で繋ぐ&#8221;などなど言語や時代によって変化はありますが少なくとも一つのプログラムの中では一貫したルールにすべきです</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">代表的な命名規則</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li>キャメルケース</li>



<li>スネークケース</li>



<li>ケバブケース</li>
</ul>
</div></div>



<h3 class="wp-block-heading">モジュールの種類</h3>



<p class="wp-block-paragraph">VBAのコードを記述する場所を<strong>モジュール</strong>と呼びます</p>



<p class="wp-block-paragraph">モジュールにはいくつか種類がありますが、初心者がまず覚えておくべきなのは以下の2つです</p>



<div class="wp-block-cocoon-blocks-tab-caption-box-1 tab-caption-box block-box has-border-color has-green-border-color not-nested-style cocoon-block-tab-caption-box" style="--cocoon-custom-border-color:#3eb370"><div class="tab-caption-box-label block-box-label box-label fab-pencil"><span class="tab-caption-box-label-text block-box-label-text box-label-text">モジュールについて</span></div><div class="tab-caption-box-content block-box-content box-content">
<ul class="wp-block-list">
<li><strong>標準モジュール</strong>: 一般的なプロシージャ（SubやFunction）を記述する、最も基本的なモジュールです</li>



<li><strong>クラスモジュール</strong>: 小規模なプログラムになりがちなVBAの世界では見かける頻度は低いですが、いわゆるオブジェクト指向という考え方に基づいたもので、より複雑で大規模なプログラムを作る際に役立ちます。</li>
</ul>
</div></div>



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



<p class="wp-block-paragraph">今回は、VBAの魅力とその基本的な概念についてお話ししました。最初は覚えることが多くて大変に感じるかもしれませんが、一つ一つは決して難しいものではありません。</p>



<p class="wp-block-paragraph">VBAを学ぶ最大のメリットは、<strong>日々の業務に直結するスキル</strong>であるということです。学習したことがすぐに実践で活かせ、成果が目に見えやすいので、モチベーションを維持しやすいのも特徴です。</p>



<p class="wp-block-paragraph">このブログでは、今後もVBAの具体的な書き方や便利なテクニックをどんどん紹介していきます。ぜひ、次回の記事もチェックして、退屈な繰り返し作業から解放され、より創造的な仕事に時間を使えるようになりましょう！<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>


<p>[temp id=2]</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/vba-beginner-001/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA】マクロのパスワードを解除する方法 仕組みと注意点</title>
		<link>https://javeo.jp/vba-password-unlock/</link>
					<comments>https://javeo.jp/vba-password-unlock/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Sun, 05 Jan 2025 22:00:00 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[セキュリティ]]></category>
		<category><![CDATA[マクロ]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=2838</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/vba-password-unlock-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>パスワードを忘れて自作マクロの中身を直せない、そんなときにVBAのプログラムを実行してロックされたコードを確認する手順をまとめました、仕組みと注意点、自分のファイルに使うときのマナーも解説します]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2026/06/vba-password-unlock-1024x538.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<p class="wp-block-paragraph">理由はさておきVBAのパスワードを解除したくなることってありませんか？</p>



<p class="wp-block-paragraph">自分で作ったマクロにパスワードをかけたのに肝心の合言葉を忘れてしまって中身を直せない、なんて話は私も身に覚えがあります</p>



<p class="wp-block-paragraph">古くはバイナリエディタで書き換える手もありましたが、今は<strong>VBAのプログラムを実行するだけ</strong>でロックされたコードを確認できるようになっています</p>



<p class="wp-block-paragraph">このページでは<strong><span class="swl-marker mark_yellow">自分のファイル(自作マクロのパスワード忘れ)を救済する前提</span></strong>で手順をまとめます、他人や業務で受け取ったファイルへ無断で使うものではないので、そこだけ先にお伝えしておきますね</p>



<div class="wp-block-group is-style-big_icon_memo"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">解除に使うプログラムは記事の下のほうに置いてあります、先にコードだけ見たい方はそちらまで飛んでください</p>
</div></div>



<h2 class="wp-block-heading">そもそもVBAのパスワード保護とは</h2>



<p class="wp-block-paragraph">手順に入る前に、なぜパスワードがかかっているのに回避できてしまうのかを軽く押さえておきます</p>



<p class="wp-block-paragraph">VBAProject(マクロのコードを束ねている入れ物)にかけるパスワードは、ファイルの中身をガッチリ暗号化しているわけではなくて、<strong><span class="swl-marker mark_yellow">エディタ上でコードを表示させないための制限</span></strong>に近い仕組みです</p>



<p class="wp-block-paragraph">正しいパスワードを入れたかどうかをExcel側が確認して、合っていればコードを開く、という判定をしているだけなんですね</p>



<p class="wp-block-paragraph">裏を返すと、その判定の部分に「もう正解が入りましたよ」と思い込ませることができれば、パスワードを知らなくてもコードが開けてしまうわけです</p>



<p class="wp-block-paragraph">今回紹介するプログラムは、まさにこの判定をすり抜けるアプローチをとっています、つまり<strong><span class="swl-marker mark_yellow" style="color:#e8313b">VBAのパスワードはセキュリティとしては弱め</span></strong>で、おまけ程度の鍵だと思っておくのが現実的です</p>



<div class="wp-block-group is-style-big_icon_point"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">VBAProjectのパスワードは「コードの表示を抑える程度の保護」です、機密データを守る暗号化とは別物なので、本当に見られたくない情報をマクロ内に直書きするのは避けるのがおすすめです</p>
</div></div>



<h2 class="wp-block-heading">解除手順</h2>



<p class="wp-block-paragraph">細かい操作はほとんどないので、サクッと4ステップにまとめました</p>



<div class="swell-block-step" data-num-style="circle">
<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">パスワードを解除したいエクセルファイルを開く</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">とりあえず対象のファイルを開いておきます、このあと操作するExcelと同じウィンドウで開いている状態にしておくのがポイントです</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">新規ファイルを作成</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">プログラムを実行するための作業用ファイルを新しく作ります、対象ファイル自体をいじるのではなく、別のブックから操作する形ですね</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">新規ファイルでモジュールを作成</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">新規ファイルのVBエディタを開いて標準モジュールを挿入し、このあと載せるプログラムをまるごと貼り付けます</p>



<p class="wp-block-paragraph">プログラムは記事の下にあるので、そこからコピペしてください</p>
</div></div>



<div class="swell-block-step__item"><div class="swell-block-step__number u-bg-main"><span class="__label">STEP</span></div><div class="swell-block-step__title u-fz-l">貼り付けたプログラムを実行</div><div class="swell-block-step__body">
<p class="wp-block-paragraph">貼り付けた<strong>VBAProjectパスワード解除</strong>のプロシージャを実行して、成功のメッセージが出れば完了です</p>



<p class="wp-block-paragraph">本来ならパスワードを入れないと展開されないはずの対象ファイルのプロジェクトが、そのまま開けるようになっています</p>
</div></div>
</div>



<h2 class="wp-block-heading">保護解除プログラム</h2>



<p class="wp-block-paragraph">実際に使うプログラムはこちらなので、新規ファイルの標準モジュールにコピペでどうぞ↓↓</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Option Explicit
   
Private Const PAGE_EXECUTE_READWRITE = &H40
   
Private Declare PtrSafe Sub MoveMemory Lib &quot;kernel32&quot; Alias &quot;RtlMoveMemory&quot; (Destination As LongPtr, Source As LongPtr, ByVal Length As LongPtr)
Private Declare PtrSafe Function VirtualProtect Lib &quot;kernel32&quot; (lpAddress As LongPtr, ByVal dwSize As LongPtr, ByVal flNewProtect As LongPtr, lpflOldProtect As LongPtr) As LongPtr
Private Declare PtrSafe Function GetModuleHandleA Lib &quot;kernel32&quot; (ByVal lpModuleName As String) As LongPtr
Private Declare PtrSafe Function GetProcAddress Lib &quot;kernel32&quot; (ByVal hModule As LongPtr, ByVal lpProcName As String) As LongPtr
Private Declare PtrSafe Function DialogBoxParam Lib &quot;user32&quot; Alias &quot;DialogBoxParamA&quot; (ByVal hInstance As LongPtr, ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer
 
Dim HookBytes(0 To 5) As Byte
Dim OriginBytes(0 To 5) As Byte
Dim pFunc As LongPtr
Dim Flag As Boolean
   
Private Function GetPtr(ByVal Value As LongPtr) As LongPtr
  GetPtr = Value
End Function
   
Private Sub RecoverBytes()
  If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 6
End Sub
   
Public Function Hook() As Boolean
  Dim TmpBytes(0 To 5) As Byte
  Dim p As LongPtr
  Dim OriginProtect As LongPtr
   
  Hook = False
  pFunc = GetProcAddress(GetModuleHandleA(&quot;user32.dll&quot;), &quot;DialogBoxParamA&quot;)
  If VirtualProtect(ByVal pFunc, 6, PAGE_EXECUTE_READWRITE, OriginProtect) &lt;&gt; 0 Then
    MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, 6
    If TmpBytes(0) &lt;&gt; &H68 Then
      MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 6
      p = GetPtr(AddressOf MyDialogBoxParam)
      HookBytes(0) = &H68
      MoveMemory ByVal VarPtr(HookBytes(1)), ByVal VarPtr(p), 4
      HookBytes(5) = &HC3
      MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 6
      Flag = True
      Hook = True
    End If
  End If
End Function
   
Private Function MyDialogBoxParam(ByVal hInstance As LongPtr, ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer
  If pTemplateName = 4070 Then
    MyDialogBoxParam = 1
  Else
    RecoverBytes
    MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, hWndParent, lpDialogFunc, dwInitParam)
    Hook
  End If
End Function
   
Public Sub VBAProjectパスワード解除()
  If Hook Then
    MsgBox &quot;VBAProjectのパスワード解除成功！&quot;, vbInformation, &quot;Congratulations&quot;
  End If
End Sub</code></pre></div>



<p class="wp-block-paragraph">このコードがやっているのは、Windowsがダイアログを出すときに呼び出す<strong>DialogBoxParamA</strong>という関数の動きを横取りすることです</p>



<p class="wp-block-paragraph">VBAのパスワード入力ダイアログが出ようとした瞬間に「もう正解が返ってきたことにする」よう差し替えるイメージで、専門的にはAPIフックと呼ばれる手法ですね</p>



<p class="wp-block-paragraph">差し替えのために<strong>VirtualProtect</strong>やMoveMemoryといったメモリ操作の関数を使っていて、ここがエラーになりやすいので軽くだけ補足しておきます</p>



<p class="wp-block-paragraph">掲載しているのは<strong><span class="swl-marker mark_yellow">64bit版Excelに対応したPtrSafe版</span></strong>です、各宣言に<strong>PtrSafe</strong>が付いていて型が<strong>LongPtr</strong>になっているのがその印で、今どきのExcel(Microsoft 365含む)なら基本このまま動きます</p>



<p class="wp-block-paragraph">もし古い32bit環境でコンパイルエラーが出る場合は、宣言の書き方を32bit向けに直す必要があります、このあたりはFAQでも触れるので、エラーで止まった方はそちらも見てみてください</p>



<h2 class="wp-block-heading">操作動画</h2>



<p class="wp-block-paragraph">手順を動画化しただけですが、文字だけだと伝わりにくい時の参考にどうぞ</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="VBA保護解除" width="500" height="281" src="https://www.youtube.com/embed/QRJPvxtMZmI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">注意点</h2>



<p class="wp-block-paragraph">便利な手順ですが、いくつか性質を知っておかないと「あれ？元に戻ってる？」と戸惑うことになります</p>



<p class="wp-block-paragraph">大事なのは、この手順を使っても<strong><span class="swl-marker mark_yellow" style="color:#e8313b">パスワードそのものが消えるわけではない</span></strong>という点です</p>



<p class="wp-block-paragraph">あくまでメモリ上で一時的にダイアログを回避しているだけなので、上書き保存をしてもファイルを閉じて<strong>開き直すと</strong>、また同じパスワードが効いた状態に戻ります</p>



<p class="wp-block-paragraph">そういう意味では「パスワードを解除する」というより<strong><span class="swl-marker mark_yellow">こっそり中身を覗く</span></strong>と言ったほうがしっくりくるかもしれないですね</p>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<p class="wp-block-paragraph">この方法は恒久的な解除ではなく一時的な閲覧です、開き直すとロックが戻るので、見られたコードは別ファイルに控えておくのがおすすめです</p>
</div></div>



<p class="wp-block-paragraph">もう一点、メモリを直接書き換える手法なので、環境によっては実行時にExcelが落ちることもあります</p>



<p class="wp-block-paragraph">大事なファイルでいきなり試すのは怖いので、<strong>事前にコピーをとってから</strong>作業するのが安心です</p>



<p class="wp-block-paragraph">ちなみに今回のAPIフック以外にも、古い<strong>.xls</strong>形式向けにバイナリエディタで<strong>vbaProject.bin</strong>の中の「DPB」というキーを書き換える方法も知られています</p>



<p class="wp-block-paragraph">こちらは仕組みとしては今でも紹介されていますが、書き換えをミスるとファイルが壊れる可能性があるので、扱いに慣れていないうちは今回のプログラム実行のほうが手軽だと思います、似た発想の「保護を後から外す」話として、PythonのExe化を逆コンパイルで覗く記事も書いているので興味があればどうぞ</p>



<p class="wp-block-paragraph"><a href="https://javeo.jp/decompile-pyinstaller/" target="_blank" rel="noopener noreferrer">PyInstallerでExe化したPythonを逆コンパイルする方法</a></p>



<h2 class="wp-block-heading">使うときのマナー</h2>



<p class="wp-block-paragraph">仕組みを知ると応用したくなるところですが、使いどころは落ち着いて見極めたいですね</p>



<p class="wp-block-paragraph">この手順が役に立つのは、<strong><span class="swl-marker mark_yellow">自分で作ったマクロのパスワードを忘れてしまった</span></strong>ような、自分のファイルを救済する場面です</p>



<p class="wp-block-paragraph">一方で、他人が作ったファイルや業務で配布されたファイルにはパスワードをかけた人の意図があります、中を見たいときは<strong>作成者や権利者に許可をとる</strong>のが筋だと思います</p>



<p class="wp-block-paragraph">このあたりは時点や状況によって考え方も変わりうるところなので、断定はしませんが、少なくとも無断で他人のロックを外して回るような使い方は避けておくのが無難です</p>



<div class="wp-block-group is-style-big_icon_caution"><div class="wp-block-group__inner-container">
<ul class="wp-block-list -list-under-dashed">
<li>自分のファイル(自作マクロのパスワード忘れ)を救済する用途で使う</li>



<li>他人や業務で受け取ったファイルは、作成者や権利者の許可を得てから</li>



<li>作業前にファイルのコピーをとっておく</li>
</ul>
</div></div>



<h2 class="wp-block-heading">よくある質問</h2>



<p class="wp-block-paragraph">つまずきやすいポイントをQ&amp;A形式でまとめておきます</p>



<div class="swell-block-accordion">
<details class="swell-block-accordion__item" data-swl-acc="wrapper"><summary class="swell-block-accordion__title" data-swl-acc="header"><span class="swell-block-accordion__label">32bit版のExcelでも動きますか？</span><span class="swell-block-accordion__icon c-switchIconBtn" data-swl-acc="icon" aria-hidden="true" data-opened="false"><i class="__icon--closed icon-caret-down"></i><i class="__icon--opened icon-caret-up"></i></span></summary><div class="swell-block-accordion__body" data-swl-acc="body">
<p class="wp-block-paragraph">掲載コードは64bit版に合わせたPtrSafe版です、32bit環境でコンパイルエラーが出る場合は、宣言部の<strong>LongPtr</strong>をLongに置き換えるなど32bit向けの書き方に直すと動くことが多いです、両対応にしたいときはVBA7で条件分岐させる書き方も知られています</p>
</div></details>



<details class="swell-block-accordion__item" data-swl-acc="wrapper"><summary class="swell-block-accordion__title" data-swl-acc="header"><span class="swell-block-accordion__label">xlsxやxlsmでも使えますか？</span><span class="swell-block-accordion__icon c-switchIconBtn" data-swl-acc="icon" aria-hidden="true" data-opened="false"><i class="__icon--closed icon-caret-down"></i><i class="__icon--opened icon-caret-up"></i></span></summary><div class="swell-block-accordion__body" data-swl-acc="body">
<p class="wp-block-paragraph">このAPIフック方式はファイルの拡張子に依存せず、VBエディタ上のダイアログを回避する仕組みなので<strong>xlsm</strong>でも考え方は同じです、なお<strong>xlsx</strong>はマクロを保存できない形式なのでVBAProject自体が入っていないことが多く、その場合はそもそも保護を外す対象がない点だけ覚えておいてください</p>
</div></details>



<details class="swell-block-accordion__item" data-swl-acc="wrapper"><summary class="swell-block-accordion__title" data-swl-acc="header"><span class="swell-block-accordion__label">実行するとエラーが出るのですが？</span><span class="swell-block-accordion__icon c-switchIconBtn" data-swl-acc="icon" aria-hidden="true" data-opened="false"><i class="__icon--closed icon-caret-down"></i><i class="__icon--opened icon-caret-up"></i></span></summary><div class="swell-block-accordion__body" data-swl-acc="body">
<p class="wp-block-paragraph">まずコンパイルエラーなら32bit/64bitの宣言が環境と合っているかを確認します、実行時に落ちる場合は、対象ファイルと作業用ファイルが同じExcelで開かれているか、対象ファイルを先に開いているかをチェックしてみてください、メモリ操作を伴う性質上、念のため作業前にファイルのコピーをとっておくと安心です</p>
</div></details>



<details class="swell-block-accordion__item" data-swl-acc="wrapper"><summary class="swell-block-accordion__title" data-swl-acc="header"><span class="swell-block-accordion__label">パスワードを恒久的に消すことはできますか？</span><span class="swell-block-accordion__icon c-switchIconBtn" data-swl-acc="icon" aria-hidden="true" data-opened="false"><i class="__icon--closed icon-caret-down"></i><i class="__icon--opened icon-caret-up"></i></span></summary><div class="swell-block-accordion__body" data-swl-acc="body">
<p class="wp-block-paragraph">今回の方法はメモリ上で一時的にダイアログを回避するものなので、開き直すとパスワードは戻ります、恒久的に外したいなら、開けている間にVBエディタのプロジェクトのプロパティから保護のチェックを外して保存し直す、あるいは古い形式向けには前述のDPBキー書き換えといった方法が知られています、ただし書き換え系はファイル破損のリスクがあるので、コピーで試すのがおすすめです</p>
</div></details>



<details class="swell-block-accordion__item" data-swl-acc="wrapper"><summary class="swell-block-accordion__title" data-swl-acc="header"><span class="swell-block-accordion__label">Macでも同じ手順でいけますか？</span><span class="swell-block-accordion__icon c-switchIconBtn" data-swl-acc="icon" aria-hidden="true" data-opened="false"><i class="__icon--closed icon-caret-down"></i><i class="__icon--opened icon-caret-up"></i></span></summary><div class="swell-block-accordion__body" data-swl-acc="body">
<p class="wp-block-paragraph">このコードはWindowsの<strong>kernel32</strong>やuser32といったDLLを呼び出すので、Mac版Excelではそのままでは動きません、Mac環境ではWindows用のAPI宣言が使えないため、別のアプローチを探すか、Windows環境で作業するのが現実的だと思います</p>
</div></details>
</div>



<h2 class="wp-block-heading">あとがき</h2>



<p class="wp-block-paragraph">VBAパスワードの解除方法は調べるといくつか出てきますが、今回のプログラム実行が一番手軽な気がします</p>



<p class="wp-block-paragraph">仕組みとしては<strong><span class="swl-marker mark_yellow">パスワード入力の判定をすり抜けているだけ</span></strong>なので、過信せず自分のファイルの救済に役立ててもらえたら嬉しいです</p>


<div class="p-blogParts post_content" data-partsID="4601">
<div class="jv-books" id="jv-books-vba" data-shelf="vba"><div class="jv-books-head"><span class="jv-books-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4da.png" alt="📚" class="wp-smiley" style="height: 1em; max-height: 1em;" /> VBAの独学に効く本</span><span class="jv-books-pr">PR</span></div><div class="jv-books-grid"><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240" alt="Excel VBA塾【動画×本で学ぶ!】" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel VBA塾【動画×本で学ぶ!】</p><p class="jv-book-author">たてばやし淳</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4839975728">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4839975728">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240" alt="パーフェクトExcel VBA" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">パーフェクトExcel VBA</p><p class="jv-book-author">高橋宣成</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4297108755">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4297108755">楽天で見る</a></div></div></div><div class="jv-book-card"><a class="jv-book-cover" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer"><img decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240" alt="Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版" width="120" height="170" loading="lazy"></a><div class="jv-book-info"><p class="jv-book-title">Excel マクロ&amp;VBA［実践ビジネス入門講座］完全版 第3版</p><p class="jv-book-author">国本温子</p><div class="jv-book-btns"><a class="jv-btn jv-btn-az" href="https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="amazon" data-book="4815631298">Amazonで見る</a><a class="jv-btn jv-btn-rk" href="https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F" target="_blank" rel="nofollow sponsored noopener noreferrer" data-shelf="vba" data-mall="rakuten" data-book="4815631298">楽天で見る</a></div></div></div></div><p class="jv-books-note">私のおすすめからランダムで3冊を表示しています</p></div>
<style>
.jv-books{border:1px solid #e0e0e0;border-radius:8px;padding:16px;margin:1.5em 0;background:#fff}
.jv-books-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.jv-books-title{font-weight:700;font-size:1.05em}
.jv-books-pr{font-size:.7em;color:#888;border:1px solid #ccc;border-radius:3px;padding:1px 6px;flex-shrink:0}
.jv-books-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;min-height:330px}
.jv-book-card{display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid #f0f0f0;border-radius:6px;padding:12px 8px;background:#fafafa}
.jv-book-cover img{width:auto;max-width:120px;height:170px;object-fit:contain}
.jv-book-info{width:100%;flex:1;display:flex;flex-direction:column}
.jv-book-title{font-size:.82em;font-weight:600;line-height:1.4;margin:8px 0 2px;min-height:2.8em;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.jv-book-author{font-size:.72em;color:#777;margin:0 0 8px}
.jv-book-btns{display:flex;flex-direction:column;gap:6px;width:100%;margin-top:auto}
.jv-btn{display:block;text-align:center;font-size:.78em;font-weight:600;color:#fff!important;text-decoration:none!important;border-radius:4px;padding:7px 4px;line-height:1.2}
.jv-btn-az{background:#e88b00}
.jv-btn-rk{background:#bf0000}
.jv-btn:hover{opacity:.85}
.jv-books-note{font-size:.7em;color:#999;text-align:right;margin:8px 0 0}
@media(max-width:599px){
.jv-books-grid{grid-template-columns:1fr;min-height:0}
.jv-book-card{flex-direction:row;text-align:left;gap:12px}
.jv-book-cover img{height:110px;max-width:80px}
.jv-book-info{min-width:0}
.jv-book-title{min-height:0}
.jv-book-btns{flex-direction:row}
.jv-btn{flex:1}
}
</style>
<script>
(function(){
var SHELF='vba';
var root=document.getElementById('jv-books-'+SHELF);
if(!root||root.dataset.init)return;
root.dataset.init='1';
var POOL=[{"t": "Excel VBA塾【動画×本で学ぶ!】", "a": "たてばやし淳", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/5722/9784839975722_1_2.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4839975728?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16918602%2F", "id": "4839975728"}, {"t": "パーフェクトExcel VBA", "a": "高橋宣成", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8755/9784297108755.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4297108755?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F16076590%2F", "id": "4297108755"}, {"t": "Excel マクロ&VBA［実践ビジネス入門講座］完全版 第3版", "a": "国本温子", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1291/9784815631291.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4815631298?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F18165619%2F", "id": "4815631298"}, {"t": "増強改訂版 できる イラストで学ぶ 入社1年目からのExcel VBA", "a": "きたみあきこ", "img": "https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/8414/9784295018414.jpg?_ex=240x240", "az": "https://www.amazon.co.jp/dp/4295018414?tag=javeo2022-22", "rk": "https://hb.afl.rakuten.co.jp/hgc/24ecde15.e492bb61.24ecde16.6c9a125b/?pc=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F&m=https%3A%2F%2Fbooks.rakuten.co.jp%2Frb%2F17725381%2F", "id": "4295018414"}];
var REL='nofollow sponsored noopener noreferrer';
function el(tag,cls){var e=document.createElement(tag);if(cls)e.className=cls;return e;}
function btn(href,cls,label,mall,id){
var a=el('a','jv-btn '+cls);a.href=href;a.target='_blank';a.rel=REL;a.textContent=label;
a.setAttribute('data-shelf',SHELF);a.setAttribute('data-mall',mall);a.setAttribute('data-book',id);
return a;}
function card(b){
var d=el('div','jv-book-card');
var cover=el('a','jv-book-cover');cover.href=b.az;cover.target='_blank';cover.rel=REL;
var img=el('img');img.src=b.img;img.alt=b.t;img.width=120;img.height=170;img.loading='lazy';
cover.appendChild(img);
var info=el('div','jv-book-info');
var ttl=el('p','jv-book-title');ttl.textContent=b.t;
var au=el('p','jv-book-author');au.textContent=b.a;
var btns=el('div','jv-book-btns');
btns.appendChild(btn(b.az,'jv-btn-az','Amazonで見る','amazon',b.id));
if(b.rk){btns.appendChild(btn(b.rk,'jv-btn-rk','楽天で見る','rakuten',b.id));}
info.appendChild(ttl);info.appendChild(au);info.appendChild(btns);
d.appendChild(cover);d.appendChild(info);
return d;}
var pool=POOL.slice();
for(var i=pool.length-1;i>0;i--){var j=Math.floor(Math.random()*(i+1));var t=pool[i];pool[i]=pool[j];pool[j]=t;}
var grid=root.querySelector('.jv-books-grid');
grid.style.opacity='0';
while(grid.firstChild)grid.removeChild(grid.firstChild);
pool.slice(0,3).forEach(function(b){grid.appendChild(card(b));});
grid.style.transition='opacity .5s ease';
void grid.offsetWidth;
grid.style.opacity='1';
})();
</script>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/vba-password-unlock/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA】再帰処理について解説</title>
		<link>https://javeo.jp/recursion-processing/</link>
					<comments>https://javeo.jp/recursion-processing/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Tue, 16 Jul 2024 23:00:00 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[マクロ]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=2478</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2024/07/ExcelVBA-1024x512.jpg" class="webfeedsFeaturedVisual" /></p>再帰処理とは 一言で表すと関数やプロシージャが自分自身を呼び出す処理のこと 処理方法の話なので当然VBAだけでなく他のプログラム言語でも使われる処理ですが、私が一番しっくりきたパソコンのフォルダ潜りながらフォルダ情報を収 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2024/07/ExcelVBA-1024x512.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p class="wp-block-paragraph"><a href="https://javeo.jp/vba-file-list-maker/" target="_blank" rel="noreferrer noopener">別のページ</a>で再帰処理を使ったプログラムを作ったわけですが、昔再帰処理を一生懸命後輩に教えたことを思い出したので個別に解説ページを作ってみました</p>



<p class="wp-block-paragraph">利用シーンはあまり多くないものの、知っておくと便利な処理なので是非一読を</p>
</div>



<h2 class="wp-block-heading">再帰処理とは</h2>



<p class="wp-block-paragraph">一言で表すと<strong><span class="marker-under">関数やプロシージャが自分自身を呼び出す処理の</span></strong>こと</p>



<p class="wp-block-paragraph">処理方法の話なので当然VBAだけでなく他のプログラム言語でも使われる処理ですが、私が一番しっくりきたパソコンのフォルダ潜りながらフォルダ情報を収集するプログラムを例に解説します</p>



<h2 class="wp-block-heading">サンプルプログラム</h2>



<p class="wp-block-paragraph">メチャメチャシンプルなサンプルプログラムです</p>



<p class="wp-block-paragraph">何をやっているかと言うとファイルが保存されているフォルダを起点にサブフォルダを照会して、今度はそのフォルダを起点にしてサブフォルダを照会して・・・を繰り返します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-file="RecursionProcessing" data-lang="Visual Basic + VBA"><code>Sub AddFolderList()
&#39;------------------------------
&#39; メインプロシージャ
&#39;------------------------------
Dim objFso As New Scripting.FileSystemObject

Debug.Print &quot;RootFolder：&quot; & ThisWorkbook.Path
Call SearchFolder(objFso.GetFolder(ThisWorkbook.Path), 1)
End Sub
&#39;------------------------------------------------------------------------------------------
Function SearchFolder(TargetFolder As Scripting.Folder, FolderLv As Long)
&#39;------------------------------
&#39; 再帰処理用プロシージャ
&#39;------------------------------
Dim objFld As Scripting.Folder

Call GetFolderInfo(TargetFolder, FolderLv)
For Each objFld In TargetFolder.SubFolders
    Call SearchFolder(objFld, FolderLv + 1)
Next
End Function
&#39;------------------------------------------------------------------------------------------
Function GetFolderInfo(TargetFolder As Scripting.Folder, FolderLv As Long)
&#39;------------------------------
&#39; フォルダ情報をイミディエイトに表示
&#39;------------------------------
Debug.Print String(FolderLv, &quot;　&quot;) & &quot;FolderName：&quot; & TargetFolder.Name
Debug.Print String(FolderLv + 2, &quot;　&quot;) & &quot;├FileCount：&quot; & TargetFolder.Files.Count
Debug.Print String(FolderLv + 2, &quot;　&quot;) & &quot;├TotalSize：&quot; & TargetFolder.Files.Count
Debug.Print String(FolderLv + 2, &quot;　&quot;) & &quot;├CreateDate：&quot; & TargetFolder.DateCreated
Debug.Print String(FolderLv + 2, &quot;　&quot;) & &quot;└UpdateDate：&quot; & TargetFolder.DateLastModified
End Function</code></pre></div>



<h2 class="wp-block-heading">再帰処理のイメージ</h2>



<div class="wp-block-media-text is-stacked-on-mobile is-vertically-aligned-top"><figure class="wp-block-media-text__media"><a href="https://javeo.jp/wp-content/uploads/2024/07/2024-07-14_01h12_52.png"><img decoding="async" width="727" height="900" src="https://javeo.jp/wp-content/uploads/2024/07/2024-07-14_01h12_52.png" alt="" class="wp-image-2485 size-full" srcset="https://javeo.jp/wp-content/uploads/2024/07/2024-07-14_01h12_52.png 727w, https://javeo.jp/wp-content/uploads/2024/07/2024-07-14_01h12_52-242x300.png 242w, https://javeo.jp/wp-content/uploads/2024/07/2024-07-14_01h12_52-121x150.png 121w" sizes="(max-width: 727px) 100vw, 727px" /></a></figure><div class="wp-block-media-text__content">
<p class="wp-block-paragraph">まず再帰処理を使わずに再現しようとした時のプログラムがこちら</p>



<p class="wp-block-paragraph">フォルダ1-Aを起点とするとその中にフォルダ2-A/2-Bがある、2-Aの中にフォルダ3-Aがあってさらにその中にフォルダ4-A/4-B/4-Cがある</p>



<p class="wp-block-paragraph">事前に構造がわかっていれば↓の別サンプルのようにFor Nextを必要回数入れ子にして対応することもできますが例えば4-Aの中に新しいフォルダが作成された時、階層がもう一段階深くなるので入れ子が足りず取得できません</p>



<p class="wp-block-paragraph">無理矢理運用するなら10回くらい入れ子にしておけば大体大丈夫ですがそれではイマイチ</p>
</div></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Function SearchFolder(main As Scripting.Folder)
&#39;------------------------------
&#39; 再帰処理しない時のプログラム例
&#39;------------------------------
Dim sub1 As Scripting.Folder, sub2 As Scripting.Folder, sub3 As Scripting.Folder

Call GetFolderInfo(main, 1)
For Each sub1 In TargetFolder.SubFolders
    Call SearchFolder(sub1, 2)
    For Each sub2 In sub1.SubFolders
        Call SearchFolder(sub2, 3)
        For Each sub3 In sub2.SubFolders
            Call SearchFolder(sub3, 4)
        Next
    Next
Next
End Function</code></pre></div>



<div class="wp-block-media-text is-stacked-on-mobile is-vertically-aligned-top"><figure class="wp-block-media-text__media"><a href="https://javeo.jp/wp-content/uploads/2024/07/2024-07-15_01h13_40.png"><img decoding="async" width="432" height="566" src="https://javeo.jp/wp-content/uploads/2024/07/2024-07-15_01h13_40.png" alt="" class="wp-image-2492 size-full" srcset="https://javeo.jp/wp-content/uploads/2024/07/2024-07-15_01h13_40.png 432w, https://javeo.jp/wp-content/uploads/2024/07/2024-07-15_01h13_40-229x300.png 229w, https://javeo.jp/wp-content/uploads/2024/07/2024-07-15_01h13_40-114x150.png 114w" sizes="(max-width: 432px) 100vw, 432px" /></a></figure><div class="wp-block-media-text__content">
<p class="wp-block-paragraph">そしてこちらが再帰処理のイメージ</p>



<p class="wp-block-paragraph">Mainフォルダに1-Aを代入すると2-A/2-BがSubフォルダとして取得できる</p>



<p class="wp-block-paragraph">Subフォルダ2-AをMainフォルダに代入すると次は3-AがSubフォルダに、続いて3-AをMainフォルダにすると4-A/4-B/4-CがSubフォルダになる</p>



<p class="wp-block-paragraph">ポイントはここでさらに下の階層があればループが続くし、なければここで処理が終わるところ</p>



<p class="wp-block-paragraph">プログラムも短くスッキリした感じになります</p>
</div></div>



<h2 class="wp-block-heading">再帰処理のメリット・デメリット</h2>



<p class="wp-block-paragraph">結局のところ再帰処理って必要な処理なの？メリット・デメリットは？ってことでまとめてみます</p>



<h3 class="wp-block-heading">メリット</h3>



<p class="wp-block-paragraph">繰り返すべき回数が可変なプログラムでも対応することができます</p>



<p class="wp-block-paragraph">今回のフォルダであれば起点から3階層潜ったわけですが当然もっと深い階層がある可能性もありますが<strong><span class="marker-under">サブフォルダがあればループする</span></strong>仕様になるのでプログラムとして最適化できます</p>



<h3 class="wp-block-heading">デメリット</h3>



<p class="wp-block-paragraph">再帰処理は処理の途中で別のことに手を付けるようなことなのでループする度メモリを使うことになり、やり過ぎはメモリ不足を招く可能性があります</p>



<p class="wp-block-paragraph">もう一点はデメリットと言うより注意点になりますが、処理方法については無限ループになってしまいます</p>



<p class="wp-block-paragraph">例えばこんな処理</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>&#39;==============================
&#39; 無限ループになるプログラム
&#39;==============================
Sub sample()
Dim i As Long

i = 1
Call AdditionFunc(i)
End Sub
&#39;-------------------------------
Function AdditionFunc(i As Long)
Debug.Print i
Call AdditionFunc(i + 1)
End Function</code></pre></div>



<p class="wp-block-paragraph">加算し続けるだけで終わりのない無限処理になってしまうのでループに条件を付けるもしくはループを抜ける分岐を付けてあげる必要があります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>&#39;==============================
&#39; 無限ループを回避したプログラム
&#39;==============================
Sub sample()
Dim i As Long

i = 1
Call AdditionFunc(i)
End Sub
&#39;------------------------------
Function AdditionFunc(i As Long)
Debug.Print i
&#39;---10未満の時だけ再帰処理する
If i &lt; 10 Then
    AdditionFunc = AdditionFunc(i + 1)
End If
End Function</code></pre></div>



<h2 class="wp-block-heading">あとがき</h2>



<p class="wp-block-paragraph">再帰処理をフォルダ検索を例に解説してみました</p>



<p class="wp-block-paragraph">わかるようでわからない再帰処理も実例があるとしっくりきませんか？私はきましたw</p>



<p class="wp-block-paragraph">他の言語でも考え方や書き方は同じなので参考にしてみてください</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/recursion-processing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【VBA】マクロでファイルリストを作る</title>
		<link>https://javeo.jp/vba-file-list-maker/</link>
					<comments>https://javeo.jp/vba-file-list-maker/#respond</comments>
		
		<dc:creator><![CDATA[ジャベ雄]]></dc:creator>
		<pubDate>Thu, 11 Jul 2024 23:00:00 +0000</pubDate>
				<category><![CDATA[Excel・VBA]]></category>
		<category><![CDATA[マクロ]]></category>
		<guid isPermaLink="false">https://javeo.jp/?p=2449</guid>

					<description><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2024/07/ExcelVBA-1024x512.jpg" class="webfeedsFeaturedVisual" /></p>ツールの仕様 VBAのことはいいからツールを使ってみたい！って方向けにまずはツールの仕様から 設定項目 絵が合った方が早いのでまずはエクセルの切り抜きから 対象フォルダ指定（グレー背景箇所） まずは取得対象とするフォルダ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://javeo.jp/wp-content/uploads/2024/07/ExcelVBA-1024x512.jpg" class="webfeedsFeaturedVisual" /></p><div class="codoc-evacuations" style="display:none;" data-shortcode=""></div>
<div class="wp-block-cocoon-blocks-info-box block-box primary-box">
<p class="wp-block-paragraph">突然ですが本業でマクロを使ったファイルリスト作成機を作りました！</p>



<p class="wp-block-paragraph">この時は動けばOK程度の荒めの仕様だったのですが、せっかくなので汎用的に使えるようにもうちょっとカスタマイズしたので説明付きでこのサイトに保管します</p>



<p class="wp-block-paragraph">こうやって残しておけば次必要な時にダウンロードするだけの半分自分向けですが良かったら使ってください</p>
</div>



<h2 class="wp-block-heading">ツールの仕様</h2>



<p class="wp-block-paragraph">VBAのことはいいからツールを使ってみたい！って方向けにまずはツールの仕様から</p>



<h3 class="wp-block-heading">設定項目</h3>



<p class="wp-block-paragraph">絵が合った方が早いのでまずはエクセルの切り抜きから</p>



<figure class="wp-block-image size-full has-custom-border is-style-shadow"><a href="https://javeo.jp/wp-content/uploads/2024/07/2024-07-10_22h57_23.png"><img decoding="async" width="849" height="405" src="https://javeo.jp/wp-content/uploads/2024/07/2024-07-10_22h57_23.png" alt="" class="has-border-color has-grey-border-color wp-image-2462" style="border-width:1px;object-fit:cover" srcset="https://javeo.jp/wp-content/uploads/2024/07/2024-07-10_22h57_23.png 849w, https://javeo.jp/wp-content/uploads/2024/07/2024-07-10_22h57_23-300x143.png 300w, https://javeo.jp/wp-content/uploads/2024/07/2024-07-10_22h57_23-150x72.png 150w, https://javeo.jp/wp-content/uploads/2024/07/2024-07-10_22h57_23-768x366.png 768w" sizes="(max-width: 849px) 100vw, 849px" /></a></figure>



<h4 class="wp-block-heading">対象フォルダ指定（グレー背景箇所）</h4>



<p class="wp-block-paragraph">まずは取得対象とするフォルダの指定</p>



<p class="wp-block-paragraph">サブフォルダも取得するようにすると対象フォルダ以下全てのフォルダが取得対象に</p>



<p class="wp-block-paragraph">ちなみにフォルダ名のところでダブルクリックするとダイアログで対象フォルダを選べる仕様にしています</p>



<h4 class="wp-block-heading">フォルダ名の指定（青背景箇所）</h4>



<p class="wp-block-paragraph">次はフォルダ名の指定</p>



<p class="wp-block-paragraph">各項目の入力条件で取得対象を制限できます</p>



<figure class="wp-block-table"><table><tbody><tr><th>フォルダ名検索</th><td>検索したい名前を指定※パイプ文字で区切って複数指定可</td></tr><tr><th>一致パターン</th><td>&#8220;部分一致&#8221;、&#8221;完全一致&#8221;、&#8221;前方一致&#8221;、&#8221;後方一致&#8221;の中から選ぶ</td></tr><tr><th>指定 or 除外</th><td>&#8220;フォルダ名検索&#8221;,&#8221;一致パターン&#8221;に該当した時に対象とするか対象外にするか</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo block-box">
<p class="wp-block-paragraph">パイプ文字は&#8221;|&#8221;のことでキーボードで言うと右上の&#8221;\&#8221;をshift押しながら押下で入力できます</p>



<figure class="wp-block-image size-full"><a href="https://javeo.jp/wp-content/uploads/2024/07/キーボード_パイプ.png"><img decoding="async" width="801" height="340" src="https://javeo.jp/wp-content/uploads/2024/07/キーボード_パイプ.png" alt="" class="wp-image-2455" srcset="https://javeo.jp/wp-content/uploads/2024/07/キーボード_パイプ.png 801w, https://javeo.jp/wp-content/uploads/2024/07/キーボード_パイプ-300x127.png 300w, https://javeo.jp/wp-content/uploads/2024/07/キーボード_パイプ-150x64.png 150w, https://javeo.jp/wp-content/uploads/2024/07/キーボード_パイプ-768x326.png 768w" sizes="(max-width: 801px) 100vw, 801px" /></a></figure>
</div>



<h4 class="wp-block-heading">ファイル名の指定（緑背景箇所）</h4>



<p class="wp-block-paragraph">ファイル名の指定もフォルダと同じ方法</p>



<p class="wp-block-paragraph">このファイル名に拡張子は含まないので注意</p>



<h4 class="wp-block-heading">拡張子の指定（オレンジ背景箇所）</h4>



<p class="wp-block-paragraph">フォルダ名、ファイル名の指定と同じ</p>



<p class="wp-block-paragraph">.（ドット）はいらないのでエクセルなら&#8221;xlsx&#8221;でOK</p>



<h2 class="wp-block-heading">プログラムについて</h2>



<p class="wp-block-paragraph">ここからVBAの説明に移ります</p>



<p class="wp-block-paragraph">コピペでそのまま使えるプログラムと各プロシージャの説明を</p>



<h3 class="wp-block-heading">必要な参照設定</h3>



<p class="wp-block-paragraph">フォルダ・ファイルの情報を扱うので必須レベルな&#8221;<strong>FileSystemObject</strong>&#8220;を使用しますから&#8221;<strong><span class="marker-under">Microsoft Scripting Runtime</span></strong>&#8220;の参照をどうぞ</p>



<p class="wp-block-paragraph">その他はありませんので魔改造する時に必要に応じて</p>



<figure class="wp-block-image size-full"><a href="https://javeo.jp/wp-content/uploads/2024/07/2024-07-07_23h49_05.png"><img decoding="async" width="455" height="317" src="https://javeo.jp/wp-content/uploads/2024/07/2024-07-07_23h49_05.png" alt="" class="wp-image-2457" srcset="https://javeo.jp/wp-content/uploads/2024/07/2024-07-07_23h49_05.png 455w, https://javeo.jp/wp-content/uploads/2024/07/2024-07-07_23h49_05-300x209.png 300w, https://javeo.jp/wp-content/uploads/2024/07/2024-07-07_23h49_05-150x105.png 150w" sizes="(max-width: 455px) 100vw, 455px" /></a></figure>



<h3 class="wp-block-heading">コピペ用 プログラムの全貌</h3>



<p class="wp-block-paragraph">説明なんぞ不要でファイルがあればいい、プログラムがあればいいって方向けに最初にVBAの全プログラムとそのまま使えるマクロファイルです</p>



<p class="wp-block-paragraph">長ったらしいので畳んでますが見たい方は広げてください</p>



<div class="wp-block-cocoon-blocks-toggle-box-1 toggle-wrap toggle-box block-box has-border-color has-key-color-border-color not-nested-style cocoon-block-toggle is-style-default" style="--cocoon-custom-border-color:#008dcb"><input id="toggle-checkbox-202410050013430" class="toggle-checkbox" type="checkbox"/><label class="toggle-button" for="toggle-checkbox-202410050013430">VBA 全プログラム</label><div class="toggle-content">
<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Option Explicit
Enum lngCol
    file_name = 1
    ext_name
    file_size
    create_date
    mod_date
    file_path
    file_path_split
End Enum
Dim objFso As New Scripting.FileSystemObject
Sub GetFileList()
Dim ws As Worksheet
Dim target_folder As String

&#39;---起点フォルダの確認
target_folder = Trim(Range(&quot;TARGET_FOLDER&quot;).Value)
If objFso.FolderExists(target_folder) = False Then
    MsgBox &quot;対象フォルダが見つかりません&quot;, vbCritical
    Exit Sub
End If

&#39;---フォルダ名の一致判定
If Len(Trim(Range(&quot;FOLDER_NAME&quot;).Value)) &gt; 0 Then
    If Len(Trim(Range(&quot;FOLDER_MATCH_TYPE&quot;).Value)) = 0 Then
        MsgBox &quot;フォルダ名の一致タイプ を入力してください&quot;, vbCritical
        Exit Sub
    End If
    If Len(Trim(Range(&quot;FOLDER_MATCH_PATTERN&quot;).Value)) = 0 Then
        MsgBox &quot;フォルダ名の一致パターン を入力してください&quot;, vbCritical
        Exit Sub
    End If
Else
    Range(&quot;FOLDER_NAME&quot;).Value = Trim(Range(&quot;FOLDER_NAME&quot;).Value)
End If

&#39;---ファイル名の一致判定
If Len(Trim(Range(&quot;FILE_NAME&quot;).Value)) &gt; 0 Then
    If Len(Trim(Range(&quot;FILE_MATCH_TYPE&quot;).Value)) = 0 Then
        MsgBox &quot;フォルダ名の一致タイプ を入力してください&quot;, vbCritical
        Exit Sub
    End If
    If Len(Trim(Range(&quot;FILE_MATCH_PATTERN&quot;).Value)) = 0 Then
        MsgBox &quot;フォルダ名の一致パターン を入力してください&quot;, vbCritical
        Exit Sub
    End If
End If

&#39;---拡張子の一致判定
If Len(Trim(Range(&quot;EXT_NAME&quot;).Value)) &gt; 0 Then
    If Len(Trim(Range(&quot;EXT_MATCH_TYPE&quot;).Value)) = 0 Then
        MsgBox &quot;拡張子の一致タイプ を入力してください&quot;, vbCritical
        Exit Sub
    End If
    If Len(Trim(Range(&quot;EXT_MATCH_PATTERN&quot;).Value)) = 0 Then
        MsgBox &quot;拡張子の一致パターン を入力してください&quot;, vbCritical
        Exit Sub
    End If
End If


Set ws = Sheet2
&#39;---テーブルをリセットする
With ws
    .Select
    &#39;---テーブルが空だとエラーになるのでエラーを無視するようにする
    On Error Resume Next
    .Range(Range(&quot;FILE_TABLE&quot;).Address).EntireRow.Delete
    On Error GoTo 0
End With

&#39;---まず指定フォルダのファイルを収集する
If Len(Trim(Range(&quot;FOLDER_NAME&quot;).Value)) &gt; 0 Then
    &#39;---指定の場合一致したらファイル情報を取得する
    If Range(&quot;FOLDER_MATCH_PATTERN&quot;).Value = &quot;指定&quot; Then
        If in_array(objFso.GetFolder(target_folder).Name, Split(Range(&quot;FOLDER_NAME&quot;).Value, &quot;|&quot;), Range(&quot;FOLDER_MATCH_TYPE&quot;).Value) = True Then
            Call GetFileData(ws, Range(&quot;FOLDER_NAME&quot;).Value)
        End If
    End If
    &#39;---除外の場合は不一致ならファイル情報取得して再帰処理する
    If Range(&quot;FOLDER_MATCH_PATTERN&quot;).Value = &quot;除外&quot; Then
        If in_array(objFso.GetFolder(target_folder).Name, Split(Range(&quot;FOLDER_NAME&quot;).Value, &quot;|&quot;), Range(&quot;FOLDER_MATCH_TYPE&quot;).Value) = False Then
            Call GetFileData(ws, Range(&quot;FOLDER_NAME&quot;).Value)
        End If
    End If
Else
    Call GetFileData(ws, Range(&quot;TARGET_FOLDER&quot;).Value)
End If


&#39;-サブフォルダを対象とするか
If Range(&quot;TARGET_SUBFOLDER&quot;).Value = &quot;する&quot; Then
    Call GetSubFoler(ws, target_folder)
End If
Set ws = Nothing
Application.StatusBar = False

&#39;---先頭行が空白だったら（絶対空白のはず）削除する
If Len(Trim(Range(&quot;FILE_TABLE&quot;).Item(1).Value)) = 0 Then
    On Error Resume Next
    Range(&quot;FILE_TABLE&quot;).ListObject.ListRows(1).Delete
    On Error GoTo 0
End If

Range(&quot;FILE_TABLE&quot;).Item(1).Select
MsgBox &quot;終了しました&quot;
End Sub
Sub DeleteFileList()
Dim ws As Worksheet
Set ws = Sheet2
&#39;---テーブルをリセットする
With ws
    .Select
    On Error Resume Next
    .Range(Range(&quot;FILE_TABLE&quot;).Address).EntireRow.Delete
    On Error GoTo 0
End With
Set ws = Nothing

Range(&quot;FILE_TABLE&quot;).Item(1).Select
MsgBox &quot;終了しました&quot;
End Sub
Private Function GetFileData(ws As Worksheet, target_folder As String)
&#39;======================================================================
&#39; 指定フォルダの中にあるファイル情報を取得してリストに反映する
&#39;======================================================================
Dim lngRow As Long
Dim file_path As String
Dim objFile As Scripting.File
Dim get_file_bool As Boolean

Application.StatusBar = target_folder & &quot; のファイル情報を取得中・・・&quot;
For Each objFile In objFso.GetFolder(target_folder).Files
    &#39;---ファイルの取得判定の初期値を設定（True）
    get_file_bool = True
    &#39;---ファイル名検索に指定があったら
    If Len(Trim(Range(&quot;FILE_NAME&quot;).Value)) &gt; 0 Then
        &#39;---ファイル名（拡張子除く）が条件と一致しているか確認
        If in_array(objFso.GetBaseName(objFile.Name), Split(Range(&quot;FILE_NAME&quot;).Value, &quot;|&quot;), Range(&quot;FILE_MATCH_TYPE&quot;).Value) = IIf(Range(&quot;FILE_MATCH_PATTERN&quot;).Value = &quot;指定&quot;, True, False) Then
            get_file_bool = True
        Else
            get_file_bool = False
            GoTo continue
        End If
    End If
    
    &#39;---拡張子に指定があったら
    If Len(Trim(Range(&quot;EXT_NAME&quot;).Value)) &gt; 0 Then
        If in_array(objFso.GetExtensionName(objFile.Name), Split(Range(&quot;EXT_NAME&quot;).Value, &quot;|&quot;), Range(&quot;EXT_MATCH_TYPE&quot;).Value) = IIf(Range(&quot;EXT_MATCH_PATTERN&quot;).Value = &quot;指定&quot;, True, False) Then
            get_file_bool = True
        Else
            get_file_bool = False
            GoTo continue
        End If
    End If
    
    &#39;---取得対象と判定されたら情報を取得して書き出す
    If get_file_bool = True Then
        With ws
            .Select
            &#39;---テーブルに行を追加する
            Range(&quot;FILE_TABLE&quot;).ListObject.ListRows.Add AlwaysInsert:=False
            lngRow = Range(&quot;FILE_TABLE&quot;).Item(Range(&quot;FILE_TABLE&quot;).Cells.Count).Row
            .Cells(lngRow, lngCol.file_name).Value = objFile.Name
            .Cells(lngRow, lngCol.ext_name).Value = objFso.GetExtensionName(objFile.Path)
            .Cells(lngRow, lngCol.file_size).Value = objFile.Size
            .Cells(lngRow, lngCol.create_date).Value = objFile.DateCreated
            .Cells(lngRow, lngCol.mod_date).Value = objFile.DateLastModified
            file_path = Replace(objFile.Path, &quot;\&quot; & objFile.Name, &quot;&quot;)
            .Cells(lngRow, lngCol.file_path).Value = Replace(objFile.Path, &quot;\&quot; & objFile.Name, &quot;&quot;)
            .Cells(lngRow, lngCol.file_path_split).Resize(, UBound(Split(file_path, &quot;\&quot;)) + 1) = Split(file_path, &quot;\&quot;)
        End With
    End If
continue:
Next
End Function
Private Function GetSubFoler(ws As Worksheet, target_folder As String)
&#39;======================================================================
&#39; 再帰処理でフォルダを潜りながらそのフォルダのファイルを取得する
&#39;======================================================================
Dim objFld As Scripting.Folder

For Each objFld In objFso.GetFolder(target_folder).SubFolders
    &#39;---フォルダ名検索に指定があったら
    If Len(Trim(Range(&quot;FOLDER_NAME&quot;).Value)) &gt; 0 Then
        &#39;---指定の場合一致したらファイル情報を取得する
        If Range(&quot;FOLDER_MATCH_PATTERN&quot;).Value = &quot;指定&quot; Then
            If in_array(objFld.Name, Split(Range(&quot;FOLDER_NAME&quot;).Value, &quot;|&quot;), Range(&quot;FOLDER_MATCH_TYPE&quot;).Value) = True Then
                Call GetFileData(ws, objFld.Path)
            End If
            &#39;---どちらにしても再帰処理はかける
            Call GetSubFoler(ws, objFld.Path)
        End If
        &#39;---除外の場合は不一致ならファイル情報取得して再帰処理する
        If Range(&quot;FOLDER_MATCH_PATTERN&quot;).Value = &quot;除外&quot; Then
            If in_array(objFld.Name, Split(Range(&quot;FOLDER_NAME&quot;).Value, &quot;|&quot;), Range(&quot;FOLDER_MATCH_TYPE&quot;).Value) = False Then
                Call GetFileData(ws, objFld.Path)
                Call GetSubFoler(ws, objFld.Path)
            End If
        End If
    Else
        Call GetFileData(ws, objFld.Path)
        Call GetSubFoler(ws, objFld.Path)
    End If
Next
End Function
Private Function in_array(target_str As String, target_array As Variant, Optional match_type As String = &quot;完全一致&quot;) As Boolean
&#39;======================================================================
&#39; パターンに合わせて一致判定を返す
&#39;======================================================================
Dim arr As Variant

For Each arr In target_array
    Select Case match_type
        Case &quot;完全一致&quot;
            If LCase(target_str) = LCase(arr) Then
                in_array = True
                Exit Function
            End If
        Case &quot;部分一致&quot;
            If LCase(target_str) Like &quot;*&quot; & LCase(arr) & &quot;*&quot; Then
                in_array = True
                Exit Function
            End If
        Case &quot;前方一致&quot;
            If LCase(target_str) Like LCase(arr) & &quot;*&quot; Then
                in_array = True
                Exit Function
            End If
        Case &quot;後方一致&quot;
            If LCase(target_str) Like &quot;*&quot; & LCase(arr) Then
                in_array = True
                Exit Function
            End If
        Case Else
    End Select
Next
in_array = False
End Function</code></pre></div>
</div></div>



<div class="wp-block-file"><a id="wp-block-file--media-fa4f42ab-9453-4581-a200-bc3ef4b36a2a" href="https://javeo.jp/wp-content/uploads/2024/07/FileListMaker_v1.0.xlsm">FileListMaker_v1.0</a><a href="https://javeo.jp/wp-content/uploads/2024/07/FileListMaker_v1.0.xlsm" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-fa4f42ab-9453-4581-a200-bc3ef4b36a2a">ダウンロード</a></div>



<p class="wp-block-paragraph">ここからはプログラムをプロシージャ別に解説していきます</p>



<h4 class="wp-block-heading">共通変数</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Option Explicit
Enum lngCol
    file_name = 1
    ext_name
    file_size
    create_date
    mod_date
    file_path
End Enum
Dim objFso As New Scripting.FileSystemObject</code></pre></div>



<p class="wp-block-paragraph">個人的な話ですが、昔はプロシージャ―の外に書く共通変数にしたがっていた時期がありましたが最近はなるべく共通変数は減らして値格納する変数はNGにしています</p>



<p class="wp-block-paragraph"><strong>Enum（列挙型）</strong>はExcelならではですが、列番号を宣言してあげると後から項目追加・削除したり編集する可能性があるなら便利ですよね</p>



<h4 class="wp-block-heading">GetFileList（メインプロシージャ―）</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Sub GetFileList()
Dim ws As Worksheet
Dim target_folder As String

&#39;---起点フォルダの確認
target_folder = Trim(Range(&quot;TARGET_FOLDER&quot;).Value)
If objFso.FolderExists(target_folder) = False Then
    MsgBox &quot;対象フォルダが見つかりません&quot;, vbCritical
    Exit Sub
End If

&#39;---フォルダ名の一致判定
If Len(Trim(Range(&quot;FOLDER_NAME&quot;).Value)) &gt; 0 Then
    If Len(Trim(Range(&quot;FOLDER_MATCH_TYPE&quot;).Value)) = 0 Then
        MsgBox &quot;フォルダ名の一致タイプ を入力してください&quot;, vbCritical
        Exit Sub
    End If
    If Len(Trim(Range(&quot;FOLDER_MATCH_PATTERN&quot;).Value)) = 0 Then
        MsgBox &quot;フォルダ名の一致パターン を入力してください&quot;, vbCritical
        Exit Sub
    End If
Else
    Range(&quot;FOLDER_NAME&quot;).Value = Trim(Range(&quot;FOLDER_NAME&quot;).Value)
End If

&#39;---ファイル名の一致判定
If Len(Trim(Range(&quot;FILE_NAME&quot;).Value)) &gt; 0 Then
    If Len(Trim(Range(&quot;FILE_MATCH_TYPE&quot;).Value)) = 0 Then
        MsgBox &quot;フォルダ名の一致タイプ を入力してください&quot;, vbCritical
        Exit Sub
    End If
    If Len(Trim(Range(&quot;FILE_MATCH_PATTERN&quot;).Value)) = 0 Then
        MsgBox &quot;フォルダ名の一致パターン を入力してください&quot;, vbCritical
        Exit Sub
    End If
End If

&#39;---拡張子の一致判定
If Len(Trim(Range(&quot;EXT_NAME&quot;).Value)) &gt; 0 Then
    If Len(Trim(Range(&quot;EXT_MATCH_TYPE&quot;).Value)) = 0 Then
        MsgBox &quot;拡張子の一致タイプ を入力してください&quot;, vbCritical
        Exit Sub
    End If
    If Len(Trim(Range(&quot;EXT_MATCH_PATTERN&quot;).Value)) = 0 Then
        MsgBox &quot;拡張子の一致パターン を入力してください&quot;, vbCritical
        Exit Sub
    End If
End If


Set ws = Sheet2
&#39;---テーブルをリセットする
With ws
    .Select
    &#39;---テーブルが空だとエラーになるのでエラーを無視するようにする
    On Error Resume Next
    .Range(Range(&quot;FILE_TABLE&quot;).Address).EntireRow.Delete
    On Error GoTo 0
End With

&#39;---まず指定フォルダのファイルを収集する
If Len(Trim(Range(&quot;FOLDER_NAME&quot;).Value)) &gt; 0 Then
    &#39;---指定の場合一致したらファイル情報を取得する
    If Range(&quot;FOLDER_MATCH_PATTERN&quot;).Value = &quot;指定&quot; Then
        If in_array(objFso.GetFolder(target_folder).Name, Split(Range(&quot;FOLDER_NAME&quot;).Value, &quot;|&quot;), Range(&quot;FOLDER_MATCH_TYPE&quot;).Value) = True Then
            Call GetFileData(ws, Range(&quot;FOLDER_NAME&quot;).Value)
        End If
    End If
    &#39;---除外の場合は不一致ならファイル情報取得して再帰処理する
    If Range(&quot;FOLDER_MATCH_PATTERN&quot;).Value = &quot;除外&quot; Then
        If in_array(objFso.GetFolder(target_folder).Name, Split(Range(&quot;FOLDER_NAME&quot;).Value, &quot;|&quot;), Range(&quot;FOLDER_MATCH_TYPE&quot;).Value) = False Then
            Call GetFileData(ws, Range(&quot;FOLDER_NAME&quot;).Value)
        End If
    End If
Else
    Call GetFileData(ws, Range(&quot;TARGET_FOLDER&quot;).Value)
End If


&#39;-サブフォルダを対象とするか
If Range(&quot;TARGET_SUBFOLDER&quot;).Value = &quot;する&quot; Then
    Call GetSubFoler(ws, target_folder)
End If
Set ws = Nothing
Application.StatusBar = False

&#39;---先頭行が空白だったら（絶対空白のはず）削除する
If Len(Trim(Range(&quot;FILE_TABLE&quot;).Item(1).Value)) = 0 Then
    On Error Resume Next
    Range(&quot;FILE_TABLE&quot;).ListObject.ListRows(1).Delete
    On Error GoTo 0
End If

Range(&quot;FILE_TABLE&quot;).Item(1).Select
MsgBox &quot;終了しました&quot;
End Sub</code></pre></div>



<p class="wp-block-paragraph">長いように見えてやっていることは</p>



<ol class="wp-block-list has-watery-yellow-background-color has-background is-style-border-radius-s-dotted has-border">
<li>エクセルで入力した内容（条件）をチェックする</li>



<li>出力先のシート（厳密にはテーブル）をリセットする</li>



<li>指定したフォルダのファイル情報を取得する</li>
</ol>



<p class="wp-block-paragraph">だけです</p>



<p class="wp-block-paragraph">当たり前ですがエクセルで設定できる項目に比例してソースが長くなってしまうのはやむなし</p>



<h4 class="wp-block-heading">GetFileData</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Private Function GetFileData(ws As Worksheet, target_folder As String)
&#39;======================================================================
&#39; 指定フォルダの中にあるファイル情報を取得してリストに反映する
&#39;======================================================================
Dim lngRow As Long
Dim file_path As String
Dim objFile As Scripting.File
Dim get_file_bool As Boolean

Application.StatusBar = target_folder & &quot; のファイル情報を取得中・・・&quot;
For Each objFile In objFso.GetFolder(target_folder).Files
    &#39;---ファイルの取得判定の初期値を設定（True）
    get_file_bool = True
    &#39;---ファイル名検索に指定があったら
    If Len(Trim(Range(&quot;FILE_NAME&quot;).Value)) &gt; 0 Then
        &#39;---ファイル名（拡張子除く）が条件と一致しているか確認
        If in_array(objFso.GetBaseName(objFile.Name), Split(Range(&quot;FILE_NAME&quot;).Value, &quot;|&quot;), Range(&quot;FILE_MATCH_TYPE&quot;).Value) = IIf(Range(&quot;FILE_MATCH_PATTERN&quot;).Value = &quot;指定&quot;, True, False) Then
            get_file_bool = True
        Else
            get_file_bool = False
            GoTo continue
        End If
    End If
    
    &#39;---拡張子に指定があったら
    If Len(Trim(Range(&quot;EXT_NAME&quot;).Value)) &gt; 0 Then
        If in_array(objFso.GetExtensionName(objFile.Name), Split(Range(&quot;EXT_NAME&quot;).Value, &quot;|&quot;), Range(&quot;EXT_MATCH_TYPE&quot;).Value) = IIf(Range(&quot;EXT_MATCH_PATTERN&quot;).Value = &quot;指定&quot;, True, False) Then
            get_file_bool = True
        Else
            get_file_bool = False
            GoTo continue
        End If
    End If
    
    &#39;---取得対象と判定されたら情報を取得して書き出す
    If get_file_bool = True Then
        With ws
            .Select
            &#39;---テーブルに行を追加する
            Range(&quot;FILE_TABLE&quot;).ListObject.ListRows.Add AlwaysInsert:=False
            lngRow = Range(&quot;FILE_TABLE&quot;).Item(Range(&quot;FILE_TABLE&quot;).Cells.Count).Row
            .Cells(lngRow, lngCol.file_name).Value = objFile.Name
            .Cells(lngRow, lngCol.ext_name).Value = objFso.GetExtensionName(objFile.Path)
            .Cells(lngRow, lngCol.file_size).Value = objFile.Size
            .Cells(lngRow, lngCol.create_date).Value = objFile.DateCreated
            .Cells(lngRow, lngCol.mod_date).Value = objFile.DateLastModified
            file_path = Replace(objFile.Path, &quot;\&quot; & objFile.Name, &quot;&quot;)
            .Cells(lngRow, lngCol.file_path).Value = Replace(objFile.Path, &quot;\&quot; & objFile.Name, &quot;&quot;)
            .Cells(lngRow, lngCol.file_path_split).Resize(, UBound(Split(file_path, &quot;\&quot;)) + 1) = Split(file_path, &quot;\&quot;)
        End With
    End If
continue:
Next
End Function</code></pre></div>



<p class="wp-block-paragraph">まず今回のようなループが多いプログラムはステータスバーに進捗状況を表示してあげると親切</p>



<p class="wp-block-paragraph">他の言語に慣れるとVBAのForループに<strong>continue</strong>が無いのが地味にストレスなんでGoToで無理矢理再現したことと、PHPで出会った<strong>in_array</strong>は後述していますがVBAにない関数は自作してしまえってことでこちらも再現しただけの関数を準備しました</p>



<p class="wp-block-paragraph">他には出力先をテーブル化しているので最下行の指定が通例とちょっと違うことと、フォルダパスを&#8221;\&#8221;で区切った配列を一気に反映させるために<strong>Resize</strong>を使っているところがミソ</p>



<p class="wp-block-paragraph">細かいこと書きましたがざっくりやっていることは↓↓だけ</p>



<ol class="wp-block-list is-style-default has-watery-yellow-background-color has-background is-style-border-radius-s-dotted has-border">
<li>引数にあるフォルダ内のファイルをFor Eachでサーチ</li>



<li>SETシートで指定したファイルと拡張子の条件と照合</li>



<li>条件一致していればLISTシートにあるテーブルへ書き込む</li>
</ol>



<h4 class="wp-block-heading">GetSubFoler</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Private Function GetSubFoler(ws As Worksheet, target_folder As String)
&#39;======================================================================
&#39; 再帰処理でフォルダを潜りながらそのフォルダのファイルを取得する
&#39;======================================================================
Dim objFld As Scripting.Folder

For Each objFld In objFso.GetFolder(target_folder).SubFolders
    &#39;---フォルダ名検索に指定があったら
    If Len(Trim(Range(&quot;FOLDER_NAME&quot;).Value)) &gt; 0 Then
        &#39;---指定の場合一致したらファイル情報を取得する
        If Range(&quot;FOLDER_MATCH_PATTERN&quot;).Value = &quot;指定&quot; Then
            If in_array(objFld.Name, Split(Range(&quot;FOLDER_NAME&quot;).Value, &quot;|&quot;), Range(&quot;FOLDER_MATCH_TYPE&quot;).Value) = True Then
                Call GetFileData(ws, objFld.Path)
            End If
            &#39;---どちらにしても再帰処理はかける
            Call GetSubFoler(ws, objFld.Path)
        End If
        &#39;---除外の場合は不一致ならファイル情報取得して再帰処理する
        If Range(&quot;FOLDER_MATCH_PATTERN&quot;).Value = &quot;除外&quot; Then
            If in_array(objFld.Name, Split(Range(&quot;FOLDER_NAME&quot;).Value, &quot;|&quot;), Range(&quot;FOLDER_MATCH_TYPE&quot;).Value) = False Then
                Call GetFileData(ws, objFld.Path)
                Call GetSubFoler(ws, objFld.Path)
            End If
        End If
    Else
        Call GetFileData(ws, objFld.Path)
        Call GetSubFoler(ws, objFld.Path)
    End If
Next
End Function</code></pre></div>



<p class="wp-block-paragraph">ここでもin_arrayが登場してるのですが、条件指定を複数できるようにしてるので重宝します</p>



<p class="wp-block-paragraph">ここでのポイントは<strong>再帰処理</strong>しているところだけで、これまで通りやっていることを並べると</p>



<ol class="wp-block-list has-watery-yellow-background-color has-background is-style-border-radius-s-dotted has-border">
<li>SETシートで指定したフォルダの条件と照合</li>



<li>一致しているもしくは条件指定していないならファイル情報を取得</li>



<li>次の階層のフォルダを同じことを繰り返す</li>
</ol>



<p class="has-cyan-bluish-gray-color has-text-color has-link-color is-style-clip-box has-box-style wp-elements-f4ffcff547898e71cd6090c41280740c wp-block-paragraph">再帰処理はその内説明ページ作ります</p>



<h4 class="wp-block-heading">in_array</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-vba" data-lang="Visual Basic + VBA"><code>Private Function in_array(target_str As String, target_array As Variant, Optional match_type As String = &quot;完全一致&quot;) As Boolean
&#39;======================================================================
&#39; パターンに合わせて一致判定を返す
&#39;======================================================================
Dim arr As Variant

For Each arr In target_array
    Select Case match_type
        Case &quot;完全一致&quot;
            If LCase(target_str) = LCase(arr) Then
                in_array = True
                Exit Function
            End If
        Case &quot;部分一致&quot;
            If LCase(target_str) Like &quot;*&quot; & LCase(arr) & &quot;*&quot; Then
                in_array = True
                Exit Function
            End If
        Case &quot;前方一致&quot;
            If LCase(target_str) Like LCase(arr) & &quot;*&quot; Then
                in_array = True
                Exit Function
            End If
        Case &quot;後方一致&quot;
            If LCase(target_str) Like &quot;*&quot; & LCase(arr) Then
                in_array = True
                Exit Function
            End If
        Case Else
    End Select
Next
in_array = False
End Function</code></pre></div>



<p class="wp-block-paragraph">本家のin_arrayは完全一致だけですが今回の使用目的的にも自作関数なので一致条件を分岐で作りましたが、指定の文字が配列の中にあるかをチェックする関数</p>



<p class="wp-block-paragraph">Dictionary型で無理矢理取り扱えばExistsもありますが、完全一致以外も処理したいので結局自作関数がベストかと</p>



<h2 class="wp-block-heading">余談 兼 フリーソフト紹介</h2>



<p class="wp-block-paragraph">今回せっかくVBAで作ったので分解して説明しましたが、ファイルリストを作りたいならフリーソフトのEverythingを使うと爆速で作成できます！</p>



<p class="wp-block-paragraph">個人的にはWindowsの標準ソフトとして搭載してほしいくらいの便利ソフトなので興味がある方は是非！</p>



<p class="wp-block-paragraph"><a href="https://forest.watch.impress.co.jp/library/software/everything" target="_blank" rel="noreferrer noopener nofollow">窓の杜へのリンク</a></p>



<p class="wp-block-paragraph"><a href="https://www.voidtools.com" target="_blank" rel="noreferrer noopener nofollow">本家サイトへのリンク</a></p>



<h2 class="wp-block-heading">あとがき</h2>



<p class="wp-block-paragraph">せっかく作ったので紹介してみましたが実のところ再帰処理さえ理解していれば9割くらい作れるお手軽プログラムに細かな設定を付け足しただけです</p>



<p class="wp-block-paragraph">他にもExcelでツール作った時は同じように公開してますのでたまに覗きに来てくれると嬉しいです！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://javeo.jp/vba-file-list-maker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
