<?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>CFXLOG</title>
	<atom:link href="https://cfxlog.com/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>https://cfxlog.com/</link>
	<description></description>
	<lastBuildDate>Thu, 12 Nov 2026 21:48:25 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://cfxlog.com/wp-content/uploads/2026/07/cfxlog-favicon-150x150.png</url>
	<title>CFXLOG</title>
	<link>https://cfxlog.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>スマホアプリを断捨離する方法【ミニマリストが使う13個のアプリ全公開】</title>
		<link>https://cfxlog.com/lifehacks-minimalist-smartphone-apps/</link>
		
		<dc:creator><![CDATA[CFXLOG]]></dc:creator>
		<pubDate>Thu, 12 Nov 2026 07:38:43 +0000</pubDate>
				<category><![CDATA[lifehacks]]></category>
		<guid isPermaLink="false">https://cfxlog.com/?p=5740</guid>

					<description><![CDATA[<p><img src="https://cfxlog.com/wp-content/uploads/2026/11/lifehacks-minimalist-smartphone-apps-1024x538-1.jpg" class="webfeedsFeaturedVisual" /></p>このような方に向けて書きました。 スマホアプリは無料で簡単に入れられるので、気づいたら50個・100個と増えていることがあります。 でも、アプリが多ければ多いほど良いわけではありません。増えすぎたアプリには、見えないコス [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://cfxlog.com/wp-content/uploads/2026/11/lifehacks-minimalist-smartphone-apps-1024x538-1.jpg" class="webfeedsFeaturedVisual" /></p>
<div class="wp-block-group is-style-crease"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>スマホアプリが増えすぎて管理できていない</li>



<li>どのアプリを残してどれを消せばいいかわからない</li>



<li>ミニマリストが実際に使っているアプリを知りたい</li>
</ul>
</div></div>



<p>このような方に向けて書きました。</p>



<p>スマホアプリは無料で簡単に入れられるので、気づいたら50個・100個と増えていることがあります。</p>



<p>でも、アプリが多ければ多いほど良いわけではありません。<strong>増えすぎたアプリには、見えないコストがかかっています。</strong></p>



<p>僕はミニマリスト思考でスマホを整理した結果、今は13個のアプリだけで快適に暮らせています。</p>



<p>この記事では、アプリを断捨離する具体的な手順と判断基準、そして僕が実際に残した13個のアプリを全公開します。</p>



<h2 class="wp-block-heading">アプリを断捨離すべき理由</h2>



<p>「アプリは無料だし、入れておいても損はないでしょ？」と思いがちです。</p>



<p>でも実際には、アプリが増えるほど次のようなデメリットが積み重なります。</p>



<h3 class="wp-block-heading">バックグラウンド通信で通信量が増える</h3>



<p>使っていないアプリでも、バックグラウンドで通信を続けているものがあります。</p>



<p>通知を受け取るためや、データを同期するためです。</p>



<p>アプリを減らすだけで月々の通信量が減り、<strong>スマホプランを安いプランに変えられる可能性があります。</strong></p>



<p>年換算すると数千円〜1万円以上の節約になるケースも。</p>



<h3 class="wp-block-heading">ストレージを圧迫してスマホ本体が高くなる</h3>



<p>アプリそのものはもちろん、キャッシュデータもストレージを消費します。</p>



<p>「256GBじゃないと足りない」と思って高いモデルを買ったけど、アプリを断捨離したら128GBで十分だった、という話はよくあります。</p>



<p>スマホ本体の選び方にも影響するんです。</p>



<h3 class="wp-block-heading">必要なアプリを探せなくなる</h3>



<p>アプリが増えると、ホーム画面がアイコンだらけになります。</p>



<p>使いたいアプリをすぐに開けない、という地味なストレスが積み重なります。</p>



<p>僕はアプリを絞り込んでから、<strong>「あのアプリどこだっけ？」と探す時間がゼロになりました。</strong></p>



<p>小さなことですが、毎日積み重なると結構違います。</p>



<h2 class="wp-block-heading">スマホアプリを断捨離する手順</h2>



<p>アプリの断捨離は「どれを残すか」から考えると迷います。</p>



<p>おすすめは逆の発想、<strong>「全部消してから、必要なものだけ入れ直す」</strong>やり方です。</p>



<h3 class="wp-block-heading">ステップ1：削除できるアプリを全部消す</h3>



<p>まずはシステムアプリ（消せないもの）以外を、思い切ってすべて削除します。</p>



<p>「もしかしたら使うかも」というアプリは、その「もしかしたら」がほぼ来ません。</p>



<p>アプリはいつでも再インストールできるので、迷ったら消す方針でいきましょう。</p>



<h3 class="wp-block-heading">ステップ2：1週間使って必要なものだけ入れ直す</h3>



<p>消した後、日常生活の中で「このアプリが必要だ」と思った瞬間にだけ入れ直します。</p>



<p>1週間やってみると、<strong>本当に必要なアプリは思った以上に少ない</strong>ことに気づきます。</p>



<p>「なんとなく入れていた」アプリがいかに多かったかが実感できます。</p>



<h3 class="wp-block-heading">ステップ3：残すアプリの判断基準を持つ</h3>



<p>入れ直すアプリを判断するときの基準はシンプルです。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li><strong>週1回以上使う</strong>かどうか</li>



<li>そのアプリでしかできないことがあるか（<strong>代替できないか</strong>）</li>



<li>ブラウザで代用できるなら<strong>アプリは不要</strong></li>
</ul>
</div></div>



<p>「週1回以上使うか」が一番シンプルで使いやすい基準です。</p>



<p>これだけで大半のアプリは自然と絞れます。</p>



<h3 class="wp-block-heading">消してよかったアプリのカテゴリ</h3>



<p>参考までに、僕が断捨離して「消してよかった」と感じたカテゴリを紹介します。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li><strong>SNSアプリ</strong><br>TwitterとInstagramとTikTokを全部入れていたが、全て不要だったので今はゼロ</li>



<li><strong>決済アプリの重複</strong><br>PayPay・d払い・au Pay・楽天ペイを全部入れていたが、楽天ペイ1つに絞った</li>



<li><strong>使っていないサブスクアプリ</strong><br>課金していないのにアプリだけ入っているもの</li>



<li><strong>ゲームアプリ</strong><br>やめるのが難しいので思い切って全削除</li>
</ul>
</div></div>



<h2 class="wp-block-heading">毎日使う基本アプリ5選</h2>



<p>これがないと生活が成り立たない、インストール必須のアプリたちです。</p>



<h3 class="wp-block-heading">1Password</h3>



<p>1Passwordは「ログイン情報」や「銀行口座」などの<strong>機密情報を管理するアプリ</strong>です。</p>



<p>年会費4,000円ほどかかりますが、メリットだらけで手放せなくなりました。</p>



<div class="wp-block-group has-border -border04"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list is-style-good_list">
<li>Windows・Mac・スマホ共通でパスワード管理できる</li>



<li>パスワード生成機能が便利</li>



<li>セキュリティ的に安全</li>
</ul>
</div></div>



<p>パスワードを忘れてあたふたする時間が消えます。</p>



<p>もはや必須ツールです。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple116/v4/c8/21/57/c821574f-4153-3432-693a-49f96d51d2d1/AppIcon-0-0-1x_U007emarketing-0-0-0-6-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png/512x512bb.jpg" alt="1Password - Password Manager" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">1Password &#8211; Password Manager</p><p class="appreach__info"><span class="appreach__developper">AgileBits Inc.</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow noopener">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/1password-password-manager/id568903335?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=com.onepassword.android" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h3 class="wp-block-heading">Claude</h3>



<p>どんな質問にも、相談にも答えてくれる「相棒」のような存在です。</p>



<p>最近ではインターネット上から最新の情報を拾ってきたり、より詳細な会話もできるようになりました。</p>



<p>僕はちょっと神経を使うメールのやり取りや、精神的にしんどい時の相談役として使っています。</p>



<p>月額20ドルかかりますが、月給20ドルの社員を雇ったつもりで使っています。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/fb/80/26/fb802683-4a33-a1c3-017f-2fe51e26e35c/AppIcon-0-0-1x_U007epad-0-1-85-220.png/512x512bb.jpg" alt="Claude by Anthropic" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">Claude by Anthropic</p><p class="appreach__info"><span class="appreach__developper">Anthropic PBC</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/claude-by-anthropic/id6473753684?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=com.anthropic.claude" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h3 class="wp-block-heading">Google Maps</h3>



<p>普段の移動はもちろん、旅行時にも目的地が一瞬で検索できます。</p>



<p>「どこかいい飲食店ないかなぁ」という時もマップを開けば評判の良いお店が出てきます。「場所」に関する悩みはすべて叶えてくれるアプリです。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/6e/74/5b/6e745bef-0441-e5a5-5367-195b97f9cf2e/logo_maps_ios_color-0-1x_U007emarketing-0-0-0-6-0-0-0-85-220-0.png/512x512bb.jpg" alt="Google マップ -  乗換案内 &amp; グルメ" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">Google マップ &#8211;  乗換案内 &amp; グルメ</p><p class="appreach__info"><span class="appreach__developper">Google</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow noopener">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/google-%E3%83%9E%E3%83%83%E3%83%97-%E4%B9%97%E6%8F%9B%E6%A1%88%E5%86%85-%E3%82%B0%E3%83%AB%E3%83%A1/id585027354?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=com.google.android.apps.maps" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h3 class="wp-block-heading">乗換案内</h3>



<p>電車やバスの情報はこれ一本でいけます。</p>



<p>Google Mapsでも乗り換え検索はできますが、まだこのアプリには敵わないという印象です。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/a7/0d/96/a70d96a7-5a1e-d6a0-5c63-c5d35da534f7/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/512x512bb.jpg" alt="乗換案内" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">乗換案内</p><p class="appreach__info"><span class="appreach__developper">Jorudan Co.,Ltd.</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow noopener">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/%E4%B9%97%E6%8F%9B%E6%A1%88%E5%86%85/id299490481?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=jp.co.jorudan.nrkj" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h3 class="wp-block-heading">Amazon</h3>



<p>ネットショッピングはほとんどAmazonです。Prime会員なので送料無料ですぐ届くのが魅力。</p>



<p>あまりにすぐ届くので、配送スタッフさんのことが心配になってしまうほどです。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/1b/b5/db/1bb5db12-22e8-05eb-dce9-f7cc33eb6ff0/AppIcon-0-0-1x_U007emarketing-0-6-0-0-85-220.png/512x512bb.jpg" alt="Amazon ショッピングアプリ" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">Amazon ショッピングアプリ</p><p class="appreach__info"><span class="appreach__developper">AMZN Mobile LLC</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow noopener">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/amazon-%E3%82%B7%E3%83%A7%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0%E3%82%A2%E3%83%97%E3%83%AA/id374254473?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=com.amazon.mShop.android.shopping" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h2 class="wp-block-heading">娯楽・情報収集に使うエンタメアプリ3選</h2>



<p>気を抜くと仕事漬けの毎日になってしまうので、息抜きも大切にしています。</p>



<p>アプリが増えると管理が面倒になるので、少数精鋭で運用しています。</p>



<h3 class="wp-block-heading">YouTube</h3>



<p>「娯楽」と言いつつも、主に情報収集用として使っています。</p>



<p>家電はもちろん日用品なども、たいていの優れた情報はYouTubeに集まっている気がしており、頼りになる情報源です。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/23/a3/22/23a3229f-d019-2782-534a-564c09759675/logo_youtube_color-1x_U007emarketing-0-6-0-0-85-220-0.png/512x512bb.jpg" alt="YouTube" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">YouTube</p><p class="appreach__info"><span class="appreach__developper">Google</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow noopener">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/youtube/id544007664?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=com.google.android.youtube" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h3 class="wp-block-heading">YouTube Music</h3>



<p>新旧・邦楽洋楽問わず、様々な音楽が視聴できます。「久々にあの曲が聴きたいな」という時にすぐ開けるのが便利です。</p>



<p>Amazon Primeに加入していれば無料で使えます。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/85/a7/bf/85a7bfeb-cc75-8c75-6afd-dbb429163834/logo_youtube_music_2024_q4_color-0-1x_U007emarketing-0-0-0-7-0-0-0-85-220-0.png/512x512bb.jpg" alt="YouTube Music" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">YouTube Music</p><p class="appreach__info"><span class="appreach__developper">Google</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/youtube-music/id1017492454?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=com.google.android.apps.youtube.music" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h3 class="wp-block-heading">Amazon Prime Video</h3>



<p>よくアニメの視聴用に使っています。</p>



<p>出社前にスマホにダウンロードしておき、電車内で観るのが日課です。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/67/9d/2f/679d2f94-1fcd-4f9f-faad-9eb13fa89f69/AppIcon-0-0-1x_U007epad-0-0-0-85-220.png/512x512bb.jpg" alt="Amazon Prime Video" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">Amazon Prime Video</p><p class="appreach__info"><span class="appreach__developper">AMZN Mobile LLC</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow noopener">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/amazon-prime-video/id545519333?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=com.amazon.avod.thirdpartyclient" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h2 class="wp-block-heading">スマホ一本でお金を管理する5個のアプリ</h2>



<p>基本的にはスマホ決済・スマホ管理に一本化していて、家計簿も自動作成されるようにしています。</p>



<h3 class="wp-block-heading">MoneyForward</h3>



<p>家計簿アプリはMoneyForwardを使っています。収入・支出の項目が一目でわかるので、家計管理はこれ一つで完結します。</p>



<p>家計簿を作る時間を、別の作業に当てられます。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/11/6f/61/116f61a9-27d4-5e42-a0f0-e1c1ab2956ee/AppIcon-0-0-1x_U007emarketing-0-7-0-85-220.png/512x512bb.jpg" alt="家計簿マネーフォワード ME - 人気の家計簿(かけいぼ)" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">家計簿マネーフォワード ME &#8211; 人気の家計簿(かけいぼ)</p><p class="appreach__info"><span class="appreach__developper">Money Forward, Inc.</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow noopener">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/%E5%AE%B6%E8%A8%88%E7%B0%BF%E3%83%9E%E3%83%8D%E3%83%BC%E3%83%95%E3%82%A9%E3%83%AF%E3%83%BC%E3%83%89-me-%E4%BA%BA%E6%B0%97%E3%81%AE%E5%AE%B6%E8%A8%88%E7%B0%BF-%E3%81%8B%E3%81%91%E3%81%84%E3%81%BC/id594145971?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=com.moneyforward.android.app" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h3 class="wp-block-heading">楽天銀行</h3>



<p>銀行口座は楽天銀行に一本化しました。</p>



<p>以前はかなり多くの口座を持っていましたが、<a href="https://ginyuwriter.com/lifehacks-bank-account-danshari/"><strong>こちらの記事</strong></a>で解説した通りすべて廃止しました。</p>



<p>楽天銀行は条件達成で「ATM引き出し手数料」や「振込手数料」が無料になるので、最近では銀行に手数料を支払った覚えがありません。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/d9/a3/21/d9a321e4-623c-3e10-961d-a92d0435376c/AppIcon-1x_U007emarketing-0-6-0-0-85-220-0.png/512x512bb.jpg" alt="楽天銀行" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">楽天銀行</p><p class="appreach__info"><span class="appreach__developper">楽天銀行株式会社</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow noopener">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/%E6%A5%BD%E5%A4%A9%E9%8A%80%E8%A1%8C/id391048295?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=jp.co.rakuten_bank.rakutenbank" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h3 class="wp-block-heading">楽天ペイ</h3>



<p>バーコード決済は楽天ペイ1本に絞りました。PayPay・d払い・au Payと複数入れていた時期もありましたが、今は楽天ペイだけです。</p>



<p>期間限定ポイントや楽天キャッシュを使いきれない場合に消化するのがメインの用途です。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/5b/41/65/5b416589-5ca0-e861-961a-958997d3984e/AppIcon-0-0-1x_U007emarketing-0-5-0-85-220.png/512x512bb.jpg" alt="楽天ペイ-楽天ポイントカードも利用できるスマホ決済アプリ" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">楽天ペイ-楽天ポイントカードも利用できるスマホ決済アプリ</p><p class="appreach__info"><span class="appreach__developper">Rakuten Group, Inc.</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow noopener">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/%E6%A5%BD%E5%A4%A9%E3%83%9A%E3%82%A4-%E6%A5%BD%E5%A4%A9%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%E3%82%AB%E3%83%BC%E3%83%89%E3%82%82%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%B9%E3%83%9E%E3%83%9B%E6%B1%BA%E6%B8%88%E3%82%A2%E3%83%97%E3%83%AA/id1139755229?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=jp.co.rakuten.pay" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h3 class="wp-block-heading">メルカリ</h3>



<p>ミニマリストの断捨離に欠かせないフリマアプリです。</p>



<p>ラクマよりユーザーが多いのか、すぐに高く売れます。不用品の出品用としては最高のアプリです。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/1d/19/a0/1d19a033-befc-172a-a7cf-1520be148d41/AppIcon-0-0-1x_U007emarketing-0-4-0-85-220.png/512x512bb.jpg" alt="フリマアプリはメルカリ - メルペイのスマホ決済でもっとお得" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">フリマアプリはメルカリ &#8211; メルペイのスマホ決済でもっとお得</p><p class="appreach__info"><span class="appreach__developper">Mercari, Inc.</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow noopener">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/%E3%83%95%E3%83%AA%E3%83%9E%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AF%E3%83%A1%E3%83%AB%E3%82%AB%E3%83%AA-%E3%83%A1%E3%83%AB%E3%83%9A%E3%82%A4%E3%81%AE%E3%82%B9%E3%83%9E%E3%83%B3%E3%83%9B%E6%B1%BA%E6%B8%88%E3%81%A7%E3%82%82%E3%81%A3%E3%81%A8%E3%2081%8A%E5%BE%97/id667861049?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=com.kouzoh.mercari" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h3 class="wp-block-heading">マイナポータル</h3>



<p>確定申告のe-Taxで年に一度使っています。</p>



<p>ふるさと納税をする方や副業をする方は入れておいて損はないと思います。</p>



<div class="appreach"><img decoding="async" src="https://is1-ssl.mzstatic.com/image/thumb/Purple126/v4/d2/1b/68/d21b6851-1d0d-0cd1-9e32-67222d9d9939/AppIcon-0-0-1x_U007emarketing-0-8-0-sRGB-85-220.png/512x512bb.jpg" alt="マイナポータル" class="appreach__icon"><div class="appreach__detail"><p class="appreach__name">マイナポータル</p><p class="appreach__info"><span class="appreach__developper">デジタル庁</span><span class="appreach__price">無料</span><span class="appreach__posted">posted with<a href="https://mama-hack.com/app-reach/" title="アプリーチ" target="_blank" rel="nofollow noopener">アプリーチ</a></span></p></div><div class="appreach__links"><a href="https://apps.apple.com/jp/app/%E3%83%9E%E3%82%A4%E3%83%8A%E3%83%9D%E3%83%BC%E3%82%BF%E3%83%AB/id1476359069?uo=4" rel="nofollow" class="appreach__aslink"><img decoding="async" src="https://nabettu.github.io/appreach/img/itune_ja.svg"></a><a href="https://play.google.com/store/apps/details?id=jp.go.cas.mpa" rel="nofollow" class="appreach__gplink"><img decoding="async" src="https://nabettu.github.io/appreach/img/gplay_ja.png"></a></div></div>



<h2 class="wp-block-heading">まとめ：アプリを断捨離すると、スマホが道具に戻る</h2>



<p>断捨離して残ったのは13個。</p>



<p>「少なすぎでは？」と思う方もいるかもしれませんが、実際にやってみると本当に快適です。</p>



<p>アプリが減ると、スマホが「なんとなく触ってしまう機械」から「必要な時に使う道具」に変わります。</p>



<div class="wp-block-group has-border -border01"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>まずは全部消して、1週間必要なものだけ入れ直す</li>



<li>残す基準は「週1回以上使うか」だけでいい</li>



<li>アプリはいつでも再インストールできるので、迷ったら消す</li>
</ul>
</div></div>



<p>まずはアプリを削除してみて、どれだけ身軽になれるかを試してみてください。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>VBAのMsgBox・InputBox・UserFormを使い分ける完全ガイド｜引数・戻り値・イベント処理まで</title>
		<link>https://cfxlog.com/vba-userform-dialog-guide/</link>
		
		<dc:creator><![CDATA[CFXLOG]]></dc:creator>
		<pubDate>Thu, 20 Aug 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Excel自動化]]></category>
		<guid isPermaLink="false">https://cfxlog.com/vba-userform-dialog-guide/</guid>

					<description><![CDATA[この記事を読めば、目的に応じてMsgBox・InputBox・UserFormを適切に使い分けられるようになります。 VBAでユーザーとやり取りする手段は、大きく分けてこの3つです。それぞれ役割が異なるので、まずは全体像 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group is-style-crease"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>確認・通知のダイアログを表示したい</li>



<li>ユーザーから1つの値を受け取りたい</li>



<li>複数の入力項目をまとめて受け取りたい</li>
</ul>
</div></div>



<p>この記事を読めば、<strong>目的に応じてMsgBox・InputBox・UserFormを適切に使い分けられる</strong>ようになります。</p>



<p>VBAでユーザーとやり取りする手段は、大きく分けてこの3つです。それぞれ役割が異なるので、まずは全体像から整理します。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>本記事の内容</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>3つの手段の使い分け基準</li>



<li>MsgBoxの引数・戻り値</li>



<li>InputBoxの2種類と違い</li>



<li>UserFormの作成とイベント処理</li>



<li>入力値の検証と呼び出し元への受け渡し</li>
</ul>
</div></div>



<h2 class="wp-block-heading">MsgBox・InputBox・UserFormは何が違うのか</h2>



<p>3つの手段は、<strong>「受け取れる情報の量」で役割が分かれています。</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>用途</th><th>適した手段</th><th>理由</th></tr></thead><tbody><tr><td>確認・通知のみ（入力不要）</td><td>MsgBox</td><td>ボタンとアイコンを表示する専用の関数で、文字列や数値の入力は受け付けない</td></tr><tr><td>1つの値を受け取りたい</td><td>InputBox / Application.InputBox</td><td>単一の入力欄のみを持つ、シンプルな入力用の関数</td></tr><tr><td>複数項目・独自レイアウトが必要</td><td>UserForm</td><td>TextBox・ListBox・ComboBoxなど複数のコントロールを自由に配置できる</td></tr></tbody></table></figure>



<p>MsgBoxとInputBoxはどちらも1行のコードで呼び出せる組み込み関数です。一方UserFormは、フォームをあらかじめ設計しておく必要がある分、表現の自由度が高くなります。</p>



<h2 class="wp-block-heading">MsgBoxで確認・通知を表示する</h2>



<h3 class="wp-block-heading">基本構文と最小コード</h3>



<p>最も単純な形は、メッセージを1つ渡すだけです。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>MsgBox "処理が完了しました。"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">MsgBox</span><span style="color:#CE9178"> "処理が完了しました。"</span></span></code></pre></div>



<p>MsgBox関数の正式な構文は次のとおりです。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>MsgBox(prompt, buttons, title)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">MsgBox</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">prompt</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> buttons</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> title</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>promptはメッセージ本文、buttonsはボタン・アイコンの種類、titleはタイトルバーの文字列です。buttonsとtitleは省略できます。</p>



<h3 class="wp-block-heading">ボタンの種類とアイコンを指定する</h3>



<p>buttons引数には、ボタンの構成とアイコンの種類を、定数を+（プラス）で組み合わせて指定します。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>分類</th><th>定数</th><th>内容</th></tr></thead><tbody><tr><td rowspan="6">ボタン構成</td><td>vbOKOnly</td><td>OKのみ（既定値）</td></tr><tr><td>vbOKCancel</td><td>OK・キャンセル</td></tr><tr><td>vbAbortRetryIgnore</td><td>中止・再試行・無視</td></tr><tr><td>vbYesNoCancel</td><td>はい・いいえ・キャンセル</td></tr><tr><td>vbYesNo</td><td>はい・いいえ</td></tr><tr><td>vbRetryCancel</td><td>再試行・キャンセル</td></tr><tr><td rowspan="4">アイコン</td><td>vbCritical</td><td>エラーアイコン（赤い×）</td></tr><tr><td>vbQuestion</td><td>確認アイコン（？）</td></tr><tr><td>vbExclamation</td><td>警告アイコン（！）</td></tr><tr><td>vbInformation</td><td>情報アイコン（ｉ）</td></tr></tbody></table></figure>



<p>ボタン構成とアイコンを組み合わせる例です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>MsgBox "この内容で確定しますか？", vbYesNo + vbQuestion, "確認"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">MsgBox</span><span style="color:#CE9178"> "この内容で確定しますか？"</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> vbYesNo</span><span style="color:#D4D4D4"> +</span><span style="color:#9CDCFE"> vbQuestion</span><span style="color:#D4D4D4">, </span><span style="color:#CE9178">"確認"</span></span></code></pre></div>



<h3 class="wp-block-heading">戻り値で処理を分岐する</h3>



<p>MsgBoxは、押されたボタンに応じた戻り値を返します。戻り値を変数で受け取れば、その後の処理を分岐できます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Dim result As VbMsgBoxResult
result = MsgBox("この内容で確定しますか？", vbYesNo + vbQuestion, "確認")

If result = vbYes Then
    MsgBox "処理を実行します。"
Else
    MsgBox "処理をキャンセルしました。"
End If</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Dim</span><span style="color:#9CDCFE"> result </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">VbMsgBoxResult</span></span>
<span class="line"><span style="color:#9CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">MsgBox</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"この内容で確定しますか？"</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> vbYesNo</span><span style="color:#D4D4D4"> +</span><span style="color:#9CDCFE"> vbQuestion</span><span style="color:#D4D4D4">, </span><span style="color:#CE9178">"確認"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">If</span><span style="color:#9CDCFE"> result</span><span style="color:#D4D4D4"> =</span><span style="color:#9CDCFE"> vbYes</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">    MsgBox</span><span style="color:#CE9178"> "処理を実行します。"</span></span>
<span class="line"><span style="color:#C586C0">Else</span></span>
<span class="line"><span style="color:#DCDCAA">    MsgBox</span><span style="color:#CE9178"> "処理をキャンセルしました。"</span></span>
<span class="line"><span style="color:#C586C0">End If</span></span></code></pre></div>



<p>戻り値の判定に使う定数は、vbOK・vbCancel・vbAbort・vbRetry・vbIgnore・vbYes・vbNoの7種類です。押されたボタンに対応する定数と比較します。</p>



<h3 class="wp-block-heading">メッセージを改行する</h3>



<p>改行を入れたい場合は、改行を表す定数vbCrLfを文字列と連結します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>MsgBox "入力内容を確認してください。" &amp; vbCrLf &amp; "問題なければOKを押してください。"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">MsgBox</span><span style="color:#CE9178"> "入力内容を確認してください。"</span><span style="color:#D4D4D4"> &amp;</span><span style="color:#9CDCFE"> vbCrLf</span><span style="color:#D4D4D4"> &amp; </span><span style="color:#CE9178">"問題なければOKを押してください。"</span></span></code></pre></div>



<p class="is-style-icon_announce"><a href="https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/msgbox-function">» Microsoft 公式ドキュメント: MsgBox 関数</a></p>



<h2 class="wp-block-heading">InputBoxで1つの値を受け取る</h2>



<p>VBAで値を1つ受け取る手段には、<strong>組み込みのInputBox関数</strong>と<strong>Application.InputBoxメソッド</strong>の2種類があります。名前は似ていますが、戻り値の型と使いどころが異なります。</p>



<h3 class="wp-block-heading">VBA組み込みのInputBox関数</h3>



<p>組み込みのInputBox関数は、常に文字列（String型）を返します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Dim inputValue As String
inputValue = InputBox("名前を入力してください。", "入力", "山田太郎")

If inputValue = "" Then
    MsgBox "入力がキャンセルされました。"
Else
    MsgBox inputValue &amp; "さん、こんにちは。"
End If</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Dim</span><span style="color:#9CDCFE"> inputValue </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">String</span></span>
<span class="line"><span style="color:#9CDCFE">inputValue</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">InputBox</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"名前を入力してください。"</span><span style="color:#D4D4D4">, </span><span style="color:#CE9178">"入力"</span><span style="color:#D4D4D4">, </span><span style="color:#CE9178">"山田太郎"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">If</span><span style="color:#9CDCFE"> inputValue</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">""</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">    MsgBox</span><span style="color:#CE9178"> "入力がキャンセルされました。"</span></span>
<span class="line"><span style="color:#C586C0">Else</span></span>
<span class="line"><span style="color:#DCDCAA">    MsgBox</span><span style="color:#9CDCFE"> inputValue</span><span style="color:#D4D4D4"> &amp; </span><span style="color:#CE9178">"さん、こんにちは。"</span></span>
<span class="line"><span style="color:#C586C0">End If</span></span></code></pre></div>



<p>第1引数がメッセージ、第2引数がタイトル、第3引数が入力欄の初期値です。3つとも文字列で指定します。</p>



<h3 class="wp-block-heading">Application.InputBoxで型を指定する</h3>



<p>Application.InputBoxメソッドは、Type引数で戻り値の型を指定できる点が組み込み関数との違いです。特にType:=8を指定すると、<strong>セル範囲（Range型）を選択させる</strong>ことができます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Dim targetRange As Range

On Error Resume Next
Set targetRange = Application.InputBox("集計するセル範囲を選択してください。", "範囲選択", Type:=8)
On Error GoTo 0

If targetRange Is Nothing Then
    MsgBox "範囲が選択されませんでした。"
Else
    MsgBox "選択範囲: " &amp; targetRange.Address
End If</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Dim</span><span style="color:#9CDCFE"> targetRange </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Range</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6">On Error Resume Next</span></span>
<span class="line"><span style="color:#569CD6">Set </span><span style="color:#9CDCFE">targetRange</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">Application</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">InputBox</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"集計するセル範囲を選択してください。"</span><span style="color:#D4D4D4">, </span><span style="color:#CE9178">"範囲選択"</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> Type</span><span style="color:#D4D4D4">:=</span><span style="color:#B5CEA8">8</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#569CD6">On Error GoTo </span><span style="color:#B5CEA8">0</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">If</span><span style="color:#D4D4D4"> targetRange Is</span><span style="color:#569CD6"> Nothing</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">    MsgBox</span><span style="color:#CE9178"> "範囲が選択されませんでした。"</span></span>
<span class="line"><span style="color:#C586C0">Else</span></span>
<span class="line"><span style="color:#DCDCAA">    MsgBox</span><span style="color:#CE9178"> "選択範囲: "</span><span style="color:#D4D4D4"> &amp; targetRange.Address</span></span>
<span class="line"><span style="color:#C586C0">End If</span></span></code></pre></div>



<p>Type引数に指定できる主な値は次のとおりです。複数の型を許可したい場合は、値を合計して指定します（例: 数値と文字列を許可する場合は1+2=3）。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>値</th><th>戻り値の型</th></tr></thead><tbody><tr><td>0</td><td>数式（文字列として）</td></tr><tr><td>1</td><td>数値</td></tr><tr><td>2</td><td>文字列</td></tr><tr><td>4</td><td>論理値（True / False）</td></tr><tr><td>8</td><td>セル参照（Range）</td></tr><tr><td>16</td><td>エラー値（#N/A など）</td></tr><tr><td>64</td><td>数値の配列</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">キャンセル時の挙動の違いに注意する</h3>



<p>2つの手段は、<strong>キャンセル時の戻り値がまったく異なります。</strong>これは実装時に混同しやすいポイントです。</p>



<ul class="wp-block-list">
<li><strong>組み込みInputBox</strong>：キャンセルすると空文字列（&#8221;&#8221;）を返す。「何も入力せずOK」を押した場合も同じく空文字列になるため、この2つを区別できない</li>



<li><strong>Application.InputBox</strong>：キャンセルするとブール値のFalseを返す。Range型の変数にFalseを代入しようとすると型不一致の実行時エラーになるため、上記コード例のようにOn Error Resume Nextでエラーを無視してから、Is Nothingで判定する必要がある</li>
</ul>



<p class="is-style-icon_info">Application.InputBoxはキャンセル時にFalseを返す仕様のため、戻り値を受け取る変数の型がRangeやString型のままだと、代入時にエラーが発生します。On Error Resume Nextでエラーを一旦回避し、判定後にOn Error GoTo 0で元に戻すのが定石です。</p>



<p class="is-style-icon_announce"><a href="https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.inputbox">» Microsoft 公式ドキュメント: Application.InputBox メソッド (Excel)</a></p>



<h2 class="wp-block-heading">UserFormで複数項目の入力フォームを作る</h2>



<p>複数の項目をまとめて受け取りたい場合や、選択肢から選ばせたい場合は、UserFormを使います。</p>



<h3 class="wp-block-heading">フォームを追加してコントロールを配置する</h3>



<p>UserFormの作成手順は次のとおりです。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>UserForm作成の手順</span></div><div class="cap_box_content">
<ol class="wp-block-list is-style-num_circle">
<li>VBEを開く（Alt+F11）</li>



<li>「挿入」メニューから「ユーザーフォーム」を選択する</li>



<li>ツールボックスからTextBox・ListBox・CommandButtonなどをフォーム上にドラッグ&#038;ドロップする</li>



<li>プロパティウィンドウで各コントロールの(Name)を設定する</li>
</ol>
</div></div>



<p>(Name)プロパティは、コードから参照するときの識別子になります。既定のTextBox1のままでも動作しますが、txtName・lstCity・btnOKのように役割がわかる名前に変更しておくと、後述するイベントプロシージャの見通しがよくなります。</p>



<h3 class="wp-block-heading">イベントプロシージャの基本形</h3>



<p>UserFormの動作は、<strong>コントロール名_イベント名</strong>という名前のプロシージャに記述します。VBEのコード画面上部にある2つのドロップダウンから、対象のコントロールとイベントを選択すると、プロシージャの雛形が自動生成されます。</p>



<p>ボタンがクリックされたときの処理はClickイベント、フォームが表示される直前の初期化処理はUserForm_Initializeイベントに書きます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Private Sub UserForm_Initialize()
    Me.lstCity.AddItem "東京"
    Me.lstCity.AddItem "大阪"
    Me.lstCity.AddItem "福岡"
    Me.lstCity.ListIndex = 0
End Sub

Private Sub btnOK_Click()
    Me.Hide
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Private Sub </span><span style="color:#DCDCAA">UserForm_Initialize</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.lstCity.AddItem </span><span style="color:#CE9178">"東京"</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.lstCity.AddItem </span><span style="color:#CE9178">"大阪"</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.lstCity.AddItem </span><span style="color:#CE9178">"福岡"</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.lstCity.</span><span style="color:#9CDCFE">ListIndex</span><span style="color:#D4D4D4"> = </span><span style="color:#B5CEA8">0</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6">Private Sub </span><span style="color:#DCDCAA">btnOK_Click</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.Hide</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>ListIndexプロパティに0を指定すると、ListBoxの1番目の項目（東京）が初期状態で選択された状態になります。</p>



<h3 class="wp-block-heading">Showメソッドでモーダル・モードレスを切り替える</h3>



<p>フォームを表示するにはShowメソッドを使います。引数によって、フォームを表示している間に他の操作を受け付けるかどうかが変わります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>UserForm1.Show            ' モーダル（既定）: フォームを閉じるまで他の操作を受け付けない
UserForm1.Show vbModeless ' モードレス: 表示したまま他の操作もできる</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">UserForm1.Show            </span><span style="color:#6A9955">' モーダル（既定）: フォームを閉じるまで他の操作を受け付けない</span></span>
<span class="line"><span style="color:#D4D4D4">UserForm1.Show vbModeless </span><span style="color:#6A9955">' モードレス: 表示したまま他の操作もできる</span></span></code></pre></div>



<p>入力を完了させてから後続の処理に進みたい場合はモーダル、フォームを表示したままシート側の操作もさせたい場合はモードレスを選びます。引数を省略した場合はモーダルになります。</p>



<h3 class="wp-block-heading">入力値を呼び出し元に渡す</h3>



<p>Me.Hideでフォームを非表示にした直後は、フォームのインスタンス自体はまだメモリ上に残っています。そのため、呼び出し元のコードからフォーム上のコントロールの値に直接アクセスできます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Dim frm As UserForm1
Set frm = New UserForm1

frm.Show

MsgBox frm.txtName.Value &amp; "さんが入力されました。"

Unload frm</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Dim</span><span style="color:#9CDCFE"> frm </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">UserForm1</span></span>
<span class="line"><span style="color:#569CD6">Set </span><span style="color:#9CDCFE">frm</span><span style="color:#D4D4D4"> =</span><span style="color:#569CD6"> New </span><span style="color:#D4D4D4">UserForm1</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4">frm.Show</span></span>
<span class="line"></span>
<span class="line"><span style="color:#DCDCAA">MsgBox</span><span style="color:#D4D4D4"> frm.txtName.</span><span style="color:#9CDCFE">Value</span><span style="color:#D4D4D4"> &amp; </span><span style="color:#CE9178">"さんが入力されました。"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4">Unload frm</span></span></code></pre></div>



<p>フォームモジュールにPublicなプロパティやフラグ変数を用意しておくと、キャンセル状態のようにコントロールの値だけでは表せない情報も呼び出し元に伝えられます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>' フォームモジュール（UserForm1）側
Public Cancelled As Boolean

Private Sub btnCancel_Click()
    Cancelled = True
    Me.Hide
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#6A9955">' フォームモジュール（UserForm1）側</span></span>
<span class="line"><span style="color:#569CD6">Public</span><span style="color:#D4D4D4"> Cancelled As </span><span style="color:#4EC9B0">Boolean</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6">Private Sub </span><span style="color:#DCDCAA">btnCancel_Click</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#9CDCFE">    Cancelled</span><span style="color:#D4D4D4"> =</span><span style="color:#569CD6"> True</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.Hide</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>フォーム内部の変数を直接公開せず、Property Get / Property Letプロシージャ経由でアクセスさせる書き方もあります。外部から値を書き換えられたくない場合や、取得時に加工処理を挟みたい場合に使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>' フォームモジュール（UserForm1）側
Private m_UserName As String

Public Property Get UserName() As String
    UserName = m_UserName
End Property

Private Sub btnOK_Click()
    m_UserName = Me.txtName.Value
    Me.Hide
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#6A9955">' フォームモジュール（UserForm1）側</span></span>
<span class="line"><span style="color:#569CD6">Private</span><span style="color:#D4D4D4"> m_UserName As </span><span style="color:#4EC9B0">String</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6">Public Property Get </span><span style="color:#DCDCAA">UserName</span><span style="color:#D4D4D4">() As </span><span style="color:#4EC9B0">String</span></span>
<span class="line"><span style="color:#9CDCFE">    UserName</span><span style="color:#D4D4D4"> =</span><span style="color:#9CDCFE"> m_UserName</span></span>
<span class="line"><span style="color:#569CD6">End Property</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6">Private Sub </span><span style="color:#DCDCAA">btnOK_Click</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#9CDCFE">    m_UserName</span><span style="color:#D4D4D4"> = Me.txtName.Value</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.Hide</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h2 class="wp-block-heading">フォーム内で入力値を検証する</h2>



<p>OKボタンが押された時点で、必須項目が空でないかをチェックし、問題があればフォームを閉じずにメッセージだけ表示するのが基本パターンです。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Private Sub btnOK_Click()
    If Me.txtName.Value = "" Then
        MsgBox "名前を入力してください。", vbExclamation, "入力エラー"
        Exit Sub
    End If

    Me.Hide
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Private Sub </span><span style="color:#DCDCAA">btnOK_Click</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#D4D4D4"> Me.txtName.</span><span style="color:#9CDCFE">Value</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">""</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "名前を入力してください。"</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> vbExclamation</span><span style="color:#D4D4D4">, </span><span style="color:#CE9178">"入力エラー"</span></span>
<span class="line"><span style="color:#C586C0">        Exit Sub</span></span>
<span class="line"><span style="color:#C586C0">    End If</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4">    Me.Hide</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>Exit Subでプロシージャを抜けることで、Me.Hideが実行されずフォームは表示されたままになります。ユーザーは同じフォーム上で入力をやり直せます。</p>



<h2 class="wp-block-heading">通しサンプル：名前と都市を入力するフォーム</h2>



<p>ここまでの内容をまとめて、TextBox（名前）とListBox（都市）を持つフォームの例を示します。</p>



<p>フォームには、txtName（TextBox）・lstCity（ListBox）・btnOK（CommandButton）・btnCancel（CommandButton）の4つのコントロールを配置している前提です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>' UserForm1 側のコード
Public Cancelled As Boolean

Private Sub UserForm_Initialize()
    Me.lstCity.AddItem "東京"
    Me.lstCity.AddItem "大阪"
    Me.lstCity.AddItem "福岡"
    Me.lstCity.ListIndex = 0
    Cancelled = False
End Sub

Private Sub btnOK_Click()
    If Me.txtName.Value = "" Then
        MsgBox "名前を入力してください。", vbExclamation, "入力エラー"
        Exit Sub
    End If
    Me.Hide
End Sub

Private Sub btnCancel_Click()
    Cancelled = True
    Me.Hide
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#6A9955">' UserForm1 側のコード</span></span>
<span class="line"><span style="color:#569CD6">Public</span><span style="color:#D4D4D4"> Cancelled As </span><span style="color:#4EC9B0">Boolean</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6">Private Sub </span><span style="color:#DCDCAA">UserForm_Initialize</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.lstCity.AddItem </span><span style="color:#CE9178">"東京"</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.lstCity.AddItem </span><span style="color:#CE9178">"大阪"</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.lstCity.AddItem </span><span style="color:#CE9178">"福岡"</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.lstCity.</span><span style="color:#9CDCFE">ListIndex</span><span style="color:#D4D4D4"> = </span><span style="color:#B5CEA8">0</span></span>
<span class="line"><span style="color:#9CDCFE">    Cancelled</span><span style="color:#D4D4D4"> =</span><span style="color:#569CD6"> False</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6">Private Sub </span><span style="color:#DCDCAA">btnOK_Click</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#D4D4D4"> Me.txtName.</span><span style="color:#9CDCFE">Value</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">""</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "名前を入力してください。"</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> vbExclamation</span><span style="color:#D4D4D4">, </span><span style="color:#CE9178">"入力エラー"</span></span>
<span class="line"><span style="color:#C586C0">        Exit Sub</span></span>
<span class="line"><span style="color:#C586C0">    End If</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.Hide</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6">Private Sub </span><span style="color:#DCDCAA">btnCancel_Click</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#9CDCFE">    Cancelled</span><span style="color:#D4D4D4"> =</span><span style="color:#569CD6"> True</span></span>
<span class="line"><span style="color:#D4D4D4">    Me.Hide</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>' 標準モジュール側のコード
Sub ShowNameForm()
    Dim frm As UserForm1
    Set frm = New UserForm1

    frm.Show

    If frm.Cancelled Then
        MsgBox "入力がキャンセルされました。"
    Else
        MsgBox frm.txtName.Value &amp; "さん（" &amp; frm.lstCity.Value &amp; "）で登録します。"
    End If

    Unload frm
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#6A9955">' 標準モジュール側のコード</span></span>
<span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> ShowNameForm</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> frm </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">UserForm1</span></span>
<span class="line"><span style="color:#569CD6">    Set </span><span style="color:#9CDCFE">frm</span><span style="color:#D4D4D4"> =</span><span style="color:#569CD6"> New </span><span style="color:#D4D4D4">UserForm1</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4">    frm.Show</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#D4D4D4"> frm.Cancelled </span><span style="color:#C586C0">Then</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "入力がキャンセルされました。"</span></span>
<span class="line"><span style="color:#C586C0">    Else</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#D4D4D4"> frm.txtName.</span><span style="color:#9CDCFE">Value</span><span style="color:#D4D4D4"> &amp; </span><span style="color:#CE9178">"さん（"</span><span style="color:#D4D4D4"> &amp; frm.lstCity.</span><span style="color:#9CDCFE">Value</span><span style="color:#D4D4D4"> &amp; </span><span style="color:#CE9178">"）で登録します。"</span></span>
<span class="line"><span style="color:#C586C0">    End If</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4">    Unload frm</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>標準モジュール側でUnload frmを呼び出し、フォームのインスタンスを確実に破棄しています。frm.Showの直後にフォームの値を読み取ってから、Unloadする順序を守ります。</p>



<h2 class="wp-block-heading">発展Tips：ListBoxへの複数列追加とフォームの後始末</h2>



<p>ListBoxは、ColumnCountプロパティを設定すると、1つの項目に複数列のデータを持たせられます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>With Me.lstItems
    .ColumnCount = 2
    .AddItem "A001"
    .List(.ListCount - 1, 1) = "商品A"
End With</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#C586C0">With</span><span style="color:#D4D4D4"> Me.lstItems</span></span>
<span class="line"><span style="color:#D4D4D4">    .</span><span style="color:#9CDCFE">ColumnCount</span><span style="color:#D4D4D4"> = </span><span style="color:#B5CEA8">2</span></span>
<span class="line"><span style="color:#D4D4D4">    .AddItem </span><span style="color:#CE9178">"A001"</span></span>
<span class="line"><span style="color:#D4D4D4">    .</span><span style="color:#DCDCAA">List</span><span style="color:#D4D4D4">(.</span><span style="color:#9CDCFE">ListCount</span><span style="color:#D4D4D4"> - </span><span style="color:#B5CEA8">1</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">1</span><span style="color:#D4D4D4">) = </span><span style="color:#CE9178">"商品A"</span></span>
<span class="line"><span style="color:#DCDCAA">End</span><span style="color:#C586C0"> With</span></span></code></pre></div>



<p>AddItemで1列目（商品コード）を追加したあと、Listプロパティにインデックスと列番号を指定して2列目（商品名）を設定しています。列番号は0始まりです。</p>



<p>複数のフォームを扱うマクロでは、UnloadしないままSetを繰り返すと、使われなくなったフォームのインスタンスがメモリ上に残り続けます。フォームの役目が終わったら、Unloadで確実に破棄することが推奨されます。</p>



<p class="is-style-icon_info">Me.Hideはフォームを非表示にするだけで、インスタンスは破棄されません。値の受け渡しが終わったあとは、呼び出し元でUnloadを呼び出してください。</p>



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



<p>確認・通知はMsgBox、1つの値の取得はInputBox、複数項目やレイアウトが必要な場合はUserFormと、受け取りたい情報の量に応じて選べば迷いません。</p>



<p>セルやシートの基本操作については、以下の記事もあわせてご覧ください。</p>



<p><a href="https://cfxlog.com/vba-cell-operations-guide/">» VBAのRange・Cells・最終行取得を使い分ける実務ガイド</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Excel VBA高速化・最適化完全ガイド｜配列一括処理からScreenUpdating停止まで</title>
		<link>https://cfxlog.com/vba-performance-guide/</link>
		
		<dc:creator><![CDATA[CFXLOG]]></dc:creator>
		<pubDate>Wed, 19 Aug 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Excel自動化]]></category>
		<guid isPermaLink="false">https://cfxlog.com/vba-performance-guide/</guid>

					<description><![CDATA[<p><img src="https://cfxlog.com/wp-content/uploads/2026/08/vba-performance-guide-1024x538.png" class="webfeedsFeaturedVisual" /></p>1万行のセルを1件ずつループで書き込むマクロを組んで、実行したらしばらく画面が固まった。そのときはとりあえず動けばいいと思って放置していた。 後になって、同じ処理を配列に一括で読み込んでからまとめて書き戻す形に変えたら、 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://cfxlog.com/wp-content/uploads/2026/08/vba-performance-guide-1024x538.png" class="webfeedsFeaturedVisual" /></p>
<p>1万行のセルを1件ずつループで書き込むマクロを組んで、実行したらしばらく画面が固まった。そのときはとりあえず動けばいいと思って放置していた。</p>



<p>後になって、同じ処理を配列に一括で読み込んでからまとめて書き戻す形に変えたら、体感が明らかに変わった。1件ずつCellsにアクセスしていたのが、そもそもの遅さの原因だった。</p>



<p>この記事では、配列を軸にした高速化テクニックと、<code>ScreenUpdating</code>などの一時停止設定、そして「効いているのか」を体感ではなく数値で確認する方法までまとめました。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://cfxlog.com/wp-content/uploads/2026/07/swell-eyecatch-noimg-300x158.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://cfxlog.com/vba-guide/">Excel VBA完全入門ガイド｜マクロの基礎から実践まで全ステップ解説</a>
						<span class="p-blogCard__excerpt">VBAって何？マクロとどう違うの？ VBAを始めたいけど、何から手をつければいいかわからない Excelの繰り返し作業を自動化して、残業を減らしたい このような疑問にお答&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">処理が遅くなる4つの原因</h2>



<p>VBAが遅いと感じるとき、原因はだいたい以下の4つのどれかに当てはまります。</p>



<figure class="wp-block-table"><table><thead><tr><th>原因</th><th>対策</th></tr></thead><tbody><tr><td>セルへの逐次アクセス</td><td>配列にまとめて読み書きする</td></tr><tr><td>画面の再描画</td><td>ScreenUpdatingを一時停止する</td></tr><tr><td>セル変更のたびの自動再計算</td><td>Calculationを手動に切り替える</td></tr><tr><td>変更をトリガーにしたイベント発火</td><td>EnableEventsを一時停止する</td></tr></tbody></table></figure>



<p>体感で一番差が出るのは配列化です。まずはここから見ていきます。</p>



<h2 class="wp-block-heading">配列で一括読み書きする</h2>



<p>セルを1件ずつ読み書きすると、そのたびにExcel側とのやり取りが発生します。件数が増えるほど、このやり取りの回数が処理時間に直結します。</p>



<h3 class="wp-block-heading">遅い書き方：セルを1件ずつループで書き込む</h3>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub WriteBySlowLoop()
    Dim i As Long
    For i = 1 To 10000
        Cells(i, 1).Value = i * 2
    Next i
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">Sub</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">WriteBySlowLoop</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> i </span><span style="color: #D4D4D4">As </span><span style="color: #4EC9B0">Long</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">For</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">i</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">To</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">10000</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">Cells</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">i</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">).</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> =</span><span style="color: #9CDCFE"> i</span><span style="color: #D4D4D4"> * </span><span style="color: #B5CEA8">2</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">Next</span><span style="color: #D4D4D4"> i</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span></code></pre></div>



<h3 class="wp-block-heading">速い書き方：配列にまとめてから一括で書き戻す</h3>



<p>配列上でデータを組み立ててから、最後に一度だけRangeへ代入します。Excelとのやり取りが1回で済むため、件数が多いほど差が開きます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub WriteByArray()
    Dim data() As Variant
    Dim i As Long

    ReDim data(1 To 10000, 1 To 1)
    For i = 1 To 10000
        data(i, 1) = i * 2
    Next i

    Range("A1:A10000").Value = data
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">Sub</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">WriteByArray</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> data</span><span style="color: #D4D4D4">() As </span><span style="color: #4EC9B0">Variant</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> i </span><span style="color: #D4D4D4">As </span><span style="color: #4EC9B0">Long</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">ReDim </span><span style="color: #DCDCAA">data</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">To</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">10000</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">To</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">For</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">i</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">To</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">10000</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">data</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">i</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">) =</span><span style="color: #9CDCFE"> i</span><span style="color: #D4D4D4"> * </span><span style="color: #B5CEA8">2</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">Next</span><span style="color: #D4D4D4"> i</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">Range</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;A1:A10000&quot;</span><span style="color: #D4D4D4">).</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> =</span><span style="color: #9CDCFE"> data</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span></code></pre></div>



<h3 class="wp-block-heading">既存データを読んで加工し、書き戻す</h3>



<p>読み込みも同じ考え方です。Rangeをまとめて配列に代入すれば、その時点で全データがメモリ上に載ります。あとは配列に対してループ処理をして、最後にまとめて書き戻します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub ProcessByArray()
    Dim data As Variant
    Dim i As Long

    data = Range("A1:A10000").Value ' 一括取得

    For i = 1 To UBound(data, 1)
        data(i, 1) = data(i, 1) * 1.1
    Next i

    Range("A1:A10000").Value = data ' 一括書き戻し
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">Sub</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">ProcessByArray</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> data </span><span style="color: #D4D4D4">As </span><span style="color: #4EC9B0">Variant</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> i </span><span style="color: #D4D4D4">As </span><span style="color: #4EC9B0">Long</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">data</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">Range</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;A1:A10000&quot;</span><span style="color: #D4D4D4">).Value </span><span style="color: #6A9955">&apos; 一括取得</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">For</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">i</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">To</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">UBound</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">data</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">data</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">i</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">) = </span><span style="color: #DCDCAA">data</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">i</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">) * </span><span style="color: #B5CEA8">1.1</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">Next</span><span style="color: #D4D4D4"> i</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">Range</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;A1:A10000&quot;</span><span style="color: #D4D4D4">).</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> =</span><span style="color: #9CDCFE"> data</span><span style="color: #D4D4D4"> </span><span style="color: #6A9955">&apos; 一括書き戻し</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span></code></pre></div>



<p>1件だけを読み書きするならCellsのままで十分ですが、数百件を超えるループを見つけたら配列化を検討する、というのが僕の基準です。</p>



<h2 class="wp-block-heading">ScreenUpdating・Calculation・EnableEventsを止める</h2>



<p>配列化の次に効くのが、この3つの一時停止です。処理中に不要な再描画・再計算・イベント発火を止めることで、余計な負荷を減らします。</p>



<figure class="wp-block-table"><table><thead><tr><th>設定</th><th>止めると何が起きるか</th></tr></thead><tbody><tr><td>ScreenUpdating</td><td>処理中の画面の再描画が止まり、ちらつきがなくなる</td></tr><tr><td>Calculation</td><td>セル変更のたびの自動再計算が止まり、手動計算になる</td></tr><tr><td>EnableEvents</td><td>Worksheet_Changeなどのイベントが発火しなくなる</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">戻し忘れるとどうなるか</h3>



<p>これらをFalseにしたまま戻し忘れると、マクロ終了後も画面が固まったまま、セルを変更しても再計算されないまま、という状態が残ります。実際にやってしまったことがあります。</p>



<p>厄介なのは、処理の途中でエラーが起きて止まった場合です。正常終了だけを想定して末尾に戻す処理を書いていると、エラー時には戻されないまま終わってしまいます。</p>



<h3 class="wp-block-heading">On Errorと組み合わせて確実に戻す</h3>



<p>エラーが起きても起きなくても必ず戻す、という形にしておくのが安全です。<code>On Error GoTo</code>で復元処理へ合流させます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub FastProcessTemplate()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

    On Error GoTo Cleanup

    ' ここに重い処理を書く

Cleanup:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True

    If Err.Number &lt;> 0 Then
        MsgBox "エラーが発生しました: " &amp; Err.Description, vbCritical
    End If
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">Sub</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">FastProcessTemplate</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #4EC9B0">Application</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">ScreenUpdating</span><span style="color: #D4D4D4"> =</span><span style="color: #569CD6"> False</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #4EC9B0">Application</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Calculation</span><span style="color: #D4D4D4"> =</span><span style="color: #9CDCFE"> xlCalculationManual</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #4EC9B0">Application</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">EnableEvents</span><span style="color: #D4D4D4"> =</span><span style="color: #569CD6"> False</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">On Error GoTo </span><span style="color: #D4D4D4">Cleanup</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; ここに重い処理を書く</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">Cleanup:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #4EC9B0">Application</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">ScreenUpdating</span><span style="color: #D4D4D4"> =</span><span style="color: #569CD6"> True</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #4EC9B0">Application</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Calculation</span><span style="color: #D4D4D4"> =</span><span style="color: #9CDCFE"> xlCalculationAutomatic</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #4EC9B0">Application</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">EnableEvents</span><span style="color: #D4D4D4"> =</span><span style="color: #569CD6"> True</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">If</span><span style="color: #D4D4D4"> Err.</span><span style="color: #9CDCFE">Number</span><span style="color: #D4D4D4"> &lt;&gt; </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">Then</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">MsgBox</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;エラーが発生しました: &quot;</span><span style="color: #D4D4D4"> &amp; Err.Description,</span><span style="color: #9CDCFE"> vbCritical</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">End If</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span></code></pre></div>



<p>正常終了時もラベルCleanupへそのまま流れ込んで復元されるので、正常系・異常系の両方で戻し漏れがなくなります。</p>



<h2 class="wp-block-heading">無駄なSelect/Activateを削除し、オブジェクトは変数に入れる</h2>



<p>録画マクロをそのまま使うと、SelectやActivateだらけのコードになりがちです。実際にはセルやシートを選択しなくても、オブジェクトを直接指定すれば操作できます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>' 遅い：選択操作が挟まる
Sub SlowWithSelect()
    Sheets("Data").Select
    Range("A1").Select
    Selection.Value = "合計"
End Sub

' 速い：選択せず直接操作する
Sub FastWithoutSelect()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Data")
    ws.Range("A1").Value = "合計"
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">&apos; 遅い：選択操作が挟まる</span></span>
<span class="line"><span style="color: #569CD6">Sub</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">SlowWithSelect</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">Sheets</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Data&quot;</span><span style="color: #D4D4D4">).</span><span style="color: #C586C0">Select</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">Range</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;A1&quot;</span><span style="color: #D4D4D4">).</span><span style="color: #C586C0">Select</span></span>
<span class="line"><span style="color: #D4D4D4">    Selection.</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;合計&quot;</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955">&apos; 速い：選択せず直接操作する</span></span>
<span class="line"><span style="color: #569CD6">Sub</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">FastWithoutSelect</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> ws </span><span style="color: #D4D4D4">As </span><span style="color: #4EC9B0">Worksheet</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Set </span><span style="color: #9CDCFE">ws</span><span style="color: #D4D4D4"> = ThisWorkbook.</span><span style="color: #DCDCAA">Worksheets</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Data&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    ws.</span><span style="color: #DCDCAA">Range</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;A1&quot;</span><span style="color: #D4D4D4">).</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> = </span><span style="color: #CE9178">&quot;合計&quot;</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span></code></pre></div>



<p>ループの中で同じシートを何度も参照する場合は、シート自体を変数に入れておくと、参照のたびにシートを探しに行く処理を省けます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>' 遅い：ループのたびにシートを探しに行く
For i = 1 To 1000
    ThisWorkbook.Worksheets("Data").Cells(i, 1).Value = i
Next i

' 速い：変数に入れて使い回す
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Data")
For i = 1 To 1000
    ws.Cells(i, 1).Value = i
Next i</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">&apos; 遅い：ループのたびにシートを探しに行く</span></span>
<span class="line"><span style="color: #C586C0">For</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">i</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">To</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1000</span></span>
<span class="line"><span style="color: #D4D4D4">    ThisWorkbook.</span><span style="color: #DCDCAA">Worksheets</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Data&quot;</span><span style="color: #D4D4D4">).</span><span style="color: #DCDCAA">Cells</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">i</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">).</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> =</span><span style="color: #9CDCFE"> i</span></span>
<span class="line"><span style="color: #C586C0">Next</span><span style="color: #D4D4D4"> i</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955">&apos; 速い：変数に入れて使い回す</span></span>
<span class="line"><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> ws </span><span style="color: #D4D4D4">As </span><span style="color: #4EC9B0">Worksheet</span></span>
<span class="line"><span style="color: #569CD6">Set </span><span style="color: #9CDCFE">ws</span><span style="color: #D4D4D4"> = ThisWorkbook.</span><span style="color: #DCDCAA">Worksheets</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Data&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #C586C0">For</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">i</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">To</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1000</span></span>
<span class="line"><span style="color: #D4D4D4">    ws.</span><span style="color: #DCDCAA">Cells</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">i</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">).</span><span style="color: #9CDCFE">Value</span><span style="color: #D4D4D4"> =</span><span style="color: #9CDCFE"> i</span></span>
<span class="line"><span style="color: #C586C0">Next</span><span style="color: #D4D4D4"> i</span></span></code></pre></div>



<h2 class="wp-block-heading">ワークシート関数を積極的に活用する</h2>



<p>合計や平均のような集計は、VBAでループして自分で計算しなくても、<code>Application.WorksheetFunction</code>経由でシート関数をそのまま呼び出せます。内部的に最適化された処理なので、自前のループより高速です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub UseWorksheetFunction()
    Dim total As Double
    total = Application.WorksheetFunction.Sum(Range("A1:A10000"))
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">Sub</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">UseWorksheetFunction</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> total </span><span style="color: #D4D4D4">As </span><span style="color: #4EC9B0">Double</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">total</span><span style="color: #D4D4D4"> = </span><span style="color: #4EC9B0">Application</span><span style="color: #D4D4D4">.WorksheetFunction.</span><span style="color: #DCDCAA">Sum</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">Range</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;A1:A10000&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span></code></pre></div>



<p>Sum・Average・CountIf・Matchあたりは特に出番が多く、自前ループを置き換えられないか一度疑ってみる価値があります。</p>



<h2 class="wp-block-heading">処理時間をTimer関数で計測する</h2>



<p>「速くなった気がする」という体感だけで判断すると、実際には誤差レベルの改善しかしていなかった、ということもあります。効果を確認するときは、Timer関数で処理時間を数値で比較しています。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub MeasureTime()
    Dim startTime As Single
    startTime = Timer

    ' 計測したい処理
    Call WriteByArray

    Debug.Print "処理時間: " &amp; Format(Timer - startTime, "0.000") &amp; "秒"
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">Sub</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">MeasureTime</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Dim</span><span style="color: #9CDCFE"> startTime </span><span style="color: #D4D4D4">As </span><span style="color: #4EC9B0">Single</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">startTime</span><span style="color: #D4D4D4"> =</span><span style="color: #9CDCFE"> Timer</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">&apos; 計測したい処理</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">Call </span><span style="color: #D4D4D4">WriteByArray</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    Debug.Print </span><span style="color: #CE9178">&quot;処理時間: &quot;</span><span style="color: #D4D4D4"> &amp; </span><span style="color: #DCDCAA">Format</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">Timer</span><span style="color: #D4D4D4"> -</span><span style="color: #9CDCFE"> startTime</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;0.000&quot;</span><span style="color: #D4D4D4">) &amp; </span><span style="color: #CE9178">&quot;秒&quot;</span></span>
<span class="line"><span style="color: #569CD6">End Sub</span></span></code></pre></div>



<p>改善前・改善後のコードをそれぞれ実行してイミディエイトウィンドウの数値を見比べるだけで、「本当に効いているテクニックか」が分かります。なお、Timerは深夜0時をまたぐと値がリセットされる仕様なので、日をまたぐ長時間処理の計測には向きません。</p>



<h2 class="wp-block-heading">よくある失敗と対処</h2>



<h3 class="wp-block-heading">ScreenUpdatingなどを戻し忘れる</h3>



<p>「ScreenUpdating・Calculation・EnableEventsを止める」で紹介したOn Errorとの組み合わせテンプレを使い、正常系・異常系どちらでも復元処理を通るようにしておくと防げます。</p>



<h3 class="wp-block-heading">配列の次元を勘違いする</h3>



<p>Rangeから取得した2次元配列は<code>data(行, 列)</code>の順序になります。1行だけ、1列だけのRangeでも2次元配列として返ってくるため、うっかり1次元配列として扱おうとするとエラーになります。<code>UBound(data, 1)</code>・<code>UBound(data, 2)</code>で行数・列数をそれぞれ確認する習慣をつけておくと安心です。</p>



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



<p>一番効くのは配列化、次点でScreenUpdatingなどの一時停止。この2つだけでも、体感が変わるレベルの差が出ます。</p>



<p>ただし、体感だけで満足せず、Timer関数で数値を取ってから「効いている」と判断するようにしています。感覚と実測がずれていることは、意外とよくあります。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>VBAシート・ブック完全ガイド｜安全に開く・保護する・閉じるまでの一連の流れ</title>
		<link>https://cfxlog.com/vba-workbook-sheet-guide/</link>
		
		<dc:creator><![CDATA[CFXLOG]]></dc:creator>
		<pubDate>Tue, 18 Aug 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Excel自動化]]></category>
		<guid isPermaLink="false">https://cfxlog.com/vba-workbook-sheet-guide/</guid>

					<description><![CDATA[外部ブックを開いて、値を読み取って、閉じる。それだけのマクロのつもりだった。 ところが後日、タスクマネージャーを開いたらExcel.exeがいくつも残っていた。マクロを実行するたびに、閉じたつもりのブックが裏でプロセスと [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>外部ブックを開いて、値を読み取って、閉じる。それだけのマクロのつもりだった。</p>



<p>ところが後日、タスクマネージャーを開いたらExcel.exeがいくつも残っていた。マクロを実行するたびに、閉じたつもりのブックが裏でプロセスとして生き続けていたようだ。</p>



<p>原因は単純で、開いたブックをきちんとCloseしていなかっただけ。ただ、「開く」「操作する」「保護する」「閉じる」という一連の流れを最初にセットで押さえていれば、そもそも起きなかったミスでもある。</p>



<p>この記事では、<strong>Workbook・Worksheetを安全に開いて、操作して、保護して、閉じるまでの一連の流れ</strong>をまとめました。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://cfxlog.com/wp-content/uploads/2026/07/swell-eyecatch-noimg-300x158.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://cfxlog.com/vba-guide/">Excel VBA完全入門ガイド｜マクロの基礎から実践まで全ステップ解説</a>
						<span class="p-blogCard__excerpt">VBAって何？マクロとどう違うの？ VBAを始めたいけど、何から手をつければいいかわからない Excelの繰り返し作業を自動化して、残業を減らしたい このような疑問にお答&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">ブック・シート操作の全体像</h2>



<p>ブックを扱うマクロは、だいたい次の4フェーズで構成されます。まずは全体を俯瞰してから、各フェーズを詳しく見ていきます。</p>



<figure class="wp-block-table"><table><thead><tr><th>フェーズ</th><th>主な処理</th></tr></thead><tbody><tr><td>開く</td><td>存在確認・多重オープンチェック・読み取り専用/パスワード対応</td></tr><tr><td>シートを操作する</td><td>参照・存在確認・追加/削除・アクティブ化</td></tr><tr><td>保護する</td><td>シート全体の保護、特定範囲だけ編集可にする</td></tr><tr><td>閉じる</td><td>保存有無の制御、Excelプロセスを残さない</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">ブックを安全に開く</h2>



<h3 class="wp-block-heading">最短コードで開く</h3>



<p>まずは一番シンプルな形です。パスが確実に存在するとわかっている、動作確認段階で使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub OpenBook_Min()
    Workbooks.Open "C:\Data\Book1.xlsx"
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> OpenBook_Min</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#D4D4D4">    Workbooks.Open </span><span style="color:#CE9178">"C:\Data\Book1.xlsx"</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>ただし、このままだとファイルが存在しない場合や、同名ブックがすでに開いている場合にエラーで止まります。実務で配布するマクロには、もう一段のチェックが必要です。</p>



<h3 class="wp-block-heading">存在確認と多重オープンチェックをセットで行う</h3>



<p>Excelは同名ブックを同時に開けない仕様です。<code>Dir</code>関数でファイルの存在を、<code>Workbooks</code>コレクションのループで開き済みかどうかを、それぞれ確認してから開きます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub OpenBook_Safely()
    Const TARGET As String = "C:\Data\Book1.xlsx"
    Dim fileName As String
    Dim wb As Workbook

    If Dir(TARGET) = "" Then
        MsgBox "ファイルが見つかりません: " &amp; TARGET, vbExclamation
        Exit Sub
    End If

    fileName = Dir(TARGET)
    For Each wb In Workbooks
        If wb.Name = fileName Then
            MsgBox fileName &amp; " は既に開いています。", vbExclamation
            Exit Sub
        End If
    Next wb

    Workbooks.Open Filename:=TARGET
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> OpenBook_Safely</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Const </span><span style="color:#D4D4D4">TARGET As </span><span style="color:#4EC9B0">String</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">"C:\Data\Book1.xlsx"</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> fileName </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">String</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> wb </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Workbook</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#DCDCAA"> Dir</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">TARGET</span><span style="color:#D4D4D4">) = </span><span style="color:#CE9178">""</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "ファイルが見つかりません: "</span><span style="color:#D4D4D4"> &amp;</span><span style="color:#9CDCFE"> TARGET</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> vbExclamation</span></span>
<span class="line"><span style="color:#C586C0">        Exit Sub</span></span>
<span class="line"><span style="color:#C586C0">    End If</span></span>
<span class="line"></span>
<span class="line"><span style="color:#9CDCFE">    fileName</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">Dir</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">TARGET</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">    For</span><span style="color:#C586C0"> Each</span><span style="color:#D4D4D4"> wb In Workbooks</span></span>
<span class="line"><span style="color:#C586C0">        If</span><span style="color:#D4D4D4"> wb.</span><span style="color:#9CDCFE">Name</span><span style="color:#D4D4D4"> =</span><span style="color:#9CDCFE"> fileName</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">            MsgBox</span><span style="color:#9CDCFE"> fileName</span><span style="color:#D4D4D4"> &amp; </span><span style="color:#CE9178">" は既に開いています。"</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> vbExclamation</span></span>
<span class="line"><span style="color:#C586C0">            Exit Sub</span></span>
<span class="line"><span style="color:#C586C0">        End If</span></span>
<span class="line"><span style="color:#C586C0">    Next</span><span style="color:#D4D4D4"> wb</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4">    Workbooks.Open Filename:=</span><span style="color:#9CDCFE">TARGET</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>この2つのチェックだけで、実務でよく起きるエラーの大半は防げます。</p>



<h3 class="wp-block-heading">パスが決まっていないときはダイアログで選ばせる</h3>



<p>対象ファイルのパスを固定できない場合は、ユーザーに選んでもらうのが安全です。戻り値は選択パス（文字列）か、キャンセル時の<code>False</code>のどちらかになります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub OpenBook_PickDialog()
    Dim filePath As Variant
    filePath = Application.GetOpenFilename("Excelブック,*.xls?")

    If VarType(filePath) = vbBoolean Then Exit Sub ' キャンセル

    Workbooks.Open Filename:=CStr(filePath)
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> OpenBook_PickDialog</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> filePath </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Variant</span></span>
<span class="line"><span style="color:#9CDCFE">    filePath</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">Application</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">GetOpenFilename</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"Excelブック,*.xls?"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#DCDCAA"> VarType</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">filePath</span><span style="color:#D4D4D4">) =</span><span style="color:#9CDCFE"> vbBoolean</span><span style="color:#C586C0"> Then</span><span style="color:#C586C0"> Exit Sub</span><span style="color:#6A9955"> ' キャンセル</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4">    Workbooks.Open Filename:=</span><span style="color:#DCDCAA">CStr</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">filePath</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h3 class="wp-block-heading">読み取り専用・パスワード付きで開く</h3>



<p>参照専用のブックには<code>ReadOnly:=True</code>を、パスワード保護されたブックには<code>Password:=</code>を指定します。実務ではこの2つを組み合わせたテンプレをよく使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub OpenBook_ReadOnlyWithPassword()
    Dim wb As Workbook
    Set wb = Workbooks.Open( _
        Filename:="C:\Data\Book1.xlsx", _
        ReadOnly:=True, _
        Password:="secret123")
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> OpenBook_ReadOnlyWithPassword</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> wb </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Workbook</span></span>
<span class="line"><span style="color:#569CD6">    Set </span><span style="color:#9CDCFE">wb</span><span style="color:#D4D4D4"> = Workbooks.</span><span style="color:#DCDCAA">Open</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE"> _</span></span>
<span class="line"><span style="color:#D4D4D4">        Filename:=</span><span style="color:#CE9178">"C:\Data\Book1.xlsx"</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> _</span></span>
<span class="line"><span style="color:#D4D4D4">        ReadOnly:=</span><span style="color:#569CD6">True</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> _</span></span>
<span class="line"><span style="color:#D4D4D4">        Password:=</span><span style="color:#CE9178">"secret123"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>パスワードが不要なファイルに<code>Password:=</code>を渡しても無視されるだけなので、両方の引数を常にセットで書いておいても実害はありません。</p>



<h2 class="wp-block-heading">Worksheetの基本操作</h2>



<h3 class="wp-block-heading">シートを名前で参照する</h3>



<p>シートは名前とインデックスのどちらでも参照できますが、インデックス指定はシートの並び順が変わると別のシートを指してしまいます。基本的には名前で参照するようにしています。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub ReferSheet()
    Dim wsByName As Worksheet
    Set wsByName = ThisWorkbook.Worksheets("売上")

    ' 並び順に依存するため、シートが増減する運用では避けたい
    Dim wsByIndex As Worksheet
    Set wsByIndex = ThisWorkbook.Worksheets(1)
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> ReferSheet</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> wsByName </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Worksheet</span></span>
<span class="line"><span style="color:#569CD6">    Set </span><span style="color:#9CDCFE">wsByName</span><span style="color:#D4D4D4"> = ThisWorkbook.</span><span style="color:#DCDCAA">Worksheets</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"売上"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955">    ' 並び順に依存するため、シートが増減する運用では避けたい</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> wsByIndex </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Worksheet</span></span>
<span class="line"><span style="color:#569CD6">    Set </span><span style="color:#9CDCFE">wsByIndex</span><span style="color:#D4D4D4"> = ThisWorkbook.</span><span style="color:#DCDCAA">Worksheets</span><span style="color:#D4D4D4">(</span><span style="color:#B5CEA8">1</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h3 class="wp-block-heading">シートの存在確認</h3>



<p>存在しないシート名を指定するとエラーになります。<code>On Error Resume Next</code>で一時的にエラーを無視し、変数に代入できたかどうかで判定するのが定番です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Function SheetExists(sheetName As String) As Boolean
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = ThisWorkbook.Worksheets(sheetName)
    On Error GoTo 0
    SheetExists = Not ws Is Nothing
End Function</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Function</span><span style="color:#DCDCAA"> SheetExists</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">sheetName As String</span><span style="color:#D4D4D4">) As Boolean</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> ws </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Worksheet</span></span>
<span class="line"><span style="color:#569CD6">    On Error Resume Next</span></span>
<span class="line"><span style="color:#569CD6">    Set </span><span style="color:#9CDCFE">ws</span><span style="color:#D4D4D4"> = ThisWorkbook.</span><span style="color:#DCDCAA">Worksheets</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">sheetName</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#569CD6">    On Error GoTo </span><span style="color:#B5CEA8">0</span></span>
<span class="line"><span style="color:#9CDCFE">    SheetExists</span><span style="color:#D4D4D4"> =</span><span style="color:#9CDCFE"> Not</span><span style="color:#D4D4D4"> ws Is</span><span style="color:#569CD6"> Nothing</span></span>
<span class="line"><span style="color:#569CD6">End Function</span></span></code></pre></div>



<h3 class="wp-block-heading">シートを追加・削除する</h3>



<p>シートを削除するとき、Excelは確認ダイアログを出します。マクロの中で完結させたい場合は<code>Application.DisplayAlerts</code>を一時的にFalseにします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub AddAndDeleteSheet()
    Dim ws As Worksheet

    ' 末尾に追加
    Set ws = ThisWorkbook.Worksheets.Add( _
        After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
    ws.Name = "作業用"

    ' 確認ダイアログを出さずに削除
    Application.DisplayAlerts = False
    ThisWorkbook.Worksheets("作業用").Delete
    Application.DisplayAlerts = True
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> AddAndDeleteSheet</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> ws </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Worksheet</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955">    ' 末尾に追加</span></span>
<span class="line"><span style="color:#569CD6">    Set </span><span style="color:#9CDCFE">ws</span><span style="color:#D4D4D4"> = ThisWorkbook.Worksheets.</span><span style="color:#DCDCAA">Add</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE"> _</span></span>
<span class="line"><span style="color:#D4D4D4">        After:=ThisWorkbook.</span><span style="color:#DCDCAA">Worksheets</span><span style="color:#D4D4D4">(ThisWorkbook.Worksheets.</span><span style="color:#9CDCFE">Count</span><span style="color:#D4D4D4">))</span></span>
<span class="line"><span style="color:#D4D4D4">    ws.</span><span style="color:#9CDCFE">Name</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">"作業用"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955">    ' 確認ダイアログを出さずに削除</span></span>
<span class="line"><span style="color:#4EC9B0">    Application</span><span style="color:#D4D4D4">.</span><span style="color:#9CDCFE">DisplayAlerts</span><span style="color:#D4D4D4"> =</span><span style="color:#569CD6"> False</span></span>
<span class="line"><span style="color:#D4D4D4">    ThisWorkbook.</span><span style="color:#DCDCAA">Worksheets</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"作業用"</span><span style="color:#D4D4D4">).Delete</span></span>
<span class="line"><span style="color:#4EC9B0">    Application</span><span style="color:#D4D4D4">.</span><span style="color:#9CDCFE">DisplayAlerts</span><span style="color:#D4D4D4"> =</span><span style="color:#569CD6"> True</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>地味に見落としがちですが、<code>DisplayAlerts</code>をTrueに戻し忘れると、以降の処理で別の確認ダイアログまで無言でスキップされてしまいます。必ずセットで書いてください。</p>



<h3 class="wp-block-heading">アクティブシートを切り替える</h3>



<p>ユーザーの画面上で見せたいシートを切り替えるときは<code>Activate</code>を使います。裏側でデータを処理するだけなら、アクティブ化せずシートを直接指定して操作するほうが速く、画面のちらつきも防げます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub ActivateSheet()
    ThisWorkbook.Worksheets("集計").Activate
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> ActivateSheet</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#D4D4D4">    ThisWorkbook.</span><span style="color:#DCDCAA">Worksheets</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"集計"</span><span style="color:#D4D4D4">).Activate</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h2 class="wp-block-heading">Protect/Unprotectでシートを保護する</h2>



<p>自分の作業用マクロでは保護をかけることはあまりありません。ただ、お客様に配布するツールでは「入力欄以外を誤って書き換えられたくない」という要望で保護をかけることが多いです。</p>



<h3 class="wp-block-heading">シート全体を保護する</h3>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub ProtectWholeSheet()
    ThisWorkbook.Worksheets("集計").Protect Password:="pass1234"
End Sub

Sub UnprotectWholeSheet()
    ThisWorkbook.Worksheets("集計").Unprotect Password:="pass1234"
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> ProtectWholeSheet</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#D4D4D4">    ThisWorkbook.</span><span style="color:#DCDCAA">Worksheets</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"集計"</span><span style="color:#D4D4D4">).Protect Password:=</span><span style="color:#CE9178">"pass1234"</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span>
<span class="line"></span>
<span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> UnprotectWholeSheet</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#D4D4D4">    ThisWorkbook.</span><span style="color:#DCDCAA">Worksheets</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"集計"</span><span style="color:#D4D4D4">).Unprotect Password:=</span><span style="color:#CE9178">"pass1234"</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h3 class="wp-block-heading">特定範囲だけ編集可能にする</h3>



<p>セルには初期状態でLockedプロパティがTrueに設定されています。保護をかけると全セルがロックされる仕組みなので、入力してほしい範囲だけ先にロックを外しておきます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub ProtectExceptInputRange()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("入力フォーム")

    ' 全セルを一旦ロック状態にする
    ws.Cells.Locked = True

    ' 入力してほしい範囲だけロック解除
    ws.Range("C3:C10").Locked = False

    ws.Protect Password:="pass1234"
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> ProtectExceptInputRange</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> ws </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Worksheet</span></span>
<span class="line"><span style="color:#569CD6">    Set </span><span style="color:#9CDCFE">ws</span><span style="color:#D4D4D4"> = ThisWorkbook.</span><span style="color:#DCDCAA">Worksheets</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"入力フォーム"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955">    ' 全セルを一旦ロック状態にする</span></span>
<span class="line"><span style="color:#D4D4D4">    ws.Cells.</span><span style="color:#9CDCFE">Locked</span><span style="color:#D4D4D4"> =</span><span style="color:#569CD6"> True</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955">    ' 入力してほしい範囲だけロック解除</span></span>
<span class="line"><span style="color:#D4D4D4">    ws.</span><span style="color:#DCDCAA">Range</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"C3:C10"</span><span style="color:#D4D4D4">).</span><span style="color:#9CDCFE">Locked</span><span style="color:#D4D4D4"> =</span><span style="color:#569CD6"> False</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4">    ws.Protect Password:=</span><span style="color:#CE9178">"pass1234"</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>新規シートのセルは初期状態でLockedがTrueなので、「入力範囲だけFalseにする」という引き算の発想で組むとミスが減ります。</p>



<h3 class="wp-block-heading">VBAからは書き込みたいのに保護もしたい場合</h3>



<p>保護をかけたシートに対して、マクロ側からセルを書き換えようとすると実行時エラー1004になります。都度Unprotect・Protectし直すのは面倒ですし、処理の途中で止まるとProtectし忘れるリスクもあります。</p>



<p>こういう場面では、<code>UserInterfaceOnly:=True</code>を付けて保護すると、<strong>ユーザーの手入力だけをブロックし、VBAからの書き込みは許可する</strong>状態にできます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub ProtectButAllowVBA()
    ThisWorkbook.Worksheets("集計").Protect _
        Password:="pass1234", UserInterfaceOnly:=True
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> ProtectButAllowVBA</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#D4D4D4">    ThisWorkbook.</span><span style="color:#DCDCAA">Worksheets</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"集計"</span><span style="color:#D4D4D4">).Protect _</span></span>
<span class="line"><span style="color:#D4D4D4">        Password:=</span><span style="color:#CE9178">"pass1234"</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> UserInterfaceOnly</span><span style="color:#D4D4D4">:=</span><span style="color:#569CD6">True</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>ただし、この設定はブックを閉じると引き継がれません。<code>Workbook_Open</code>イベントで毎回Protectし直す運用が必要です。知らないと「昨日まで書き込めていたのに今日はエラーになる」という現象に遭遇します。</p>



<h3 class="wp-block-heading">パスワードは万能ではないと理解しておく</h3>



<p>シート保護のパスワードは、あくまで「誤操作の防止」レベルの保護です。解析ツールで突破できることが知られているので、本当に見られたくないデータの保護には向きません。</p>



<p>お客様から「絶対に触られたくない」と言われた場合は、パスワード保護だけで完結させず、そもそも別ファイルに分離するなどの運用面での対策もあわせて提案するようにしています。</p>



<h2 class="wp-block-heading">開いたら閉じる — プロセス残留を防ぐ</h2>



<p>冒頭の話の通り、開いたブックを閉じ忘れると、画面上は見えないままExcelプロセスだけが残り続けます。開いて処理して閉じる、という一連の流れをワンセットで書くくせをつけておくと防げます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub ProcessAndClose()
    Dim wb As Workbook
    Set wb = Workbooks.Open("C:\Data\Book1.xlsx")

    ' ここで読み取り・書き込みなどの処理
    Debug.Print wb.Worksheets(1).Range("A1").Value

    wb.Close SaveChanges:=False
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> ProcessAndClose</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> wb </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Workbook</span></span>
<span class="line"><span style="color:#569CD6">    Set </span><span style="color:#9CDCFE">wb</span><span style="color:#D4D4D4"> = Workbooks.</span><span style="color:#DCDCAA">Open</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"C:\Data\Book1.xlsx"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955">    ' ここで読み取り・書き込みなどの処理</span></span>
<span class="line"><span style="color:#D4D4D4">    Debug.Print wb.</span><span style="color:#DCDCAA">Worksheets</span><span style="color:#D4D4D4">(</span><span style="color:#B5CEA8">1</span><span style="color:#D4D4D4">).</span><span style="color:#DCDCAA">Range</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"A1"</span><span style="color:#D4D4D4">).Value</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4">    wb.Close SaveChanges:=</span><span style="color:#569CD6">False</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>保存の有無を制御する引数や、Excelアプリケーション自体を終了する<code>Application.Quit</code>、それでもプロセスが残ってしまう場合の対処については、別記事でCloseまわりだけを掘り下げています。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://cfxlog.com/wp-content/uploads/2026/07/swell-eyecatch-noimg-300x158.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://cfxlog.com/vba-close-workbook-quit-excel/">【VBA】ブックを閉じる・Excelを終了する完全ガイド【保存有無の制御＋プロセスが残る問題の対処】</a>
						<span class="p-blogCard__excerpt">VBAでブックを閉じるだけなら、Closeと書けば一応動きます。 VBSub CloseBook_Quick() ActiveWorkbook.Close End SubSub CloseBook_Quick() ActiveWorkbook.Close End S&#8230;</span>					</div>
				</div>
			</div>
		</div>


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



<h3 class="wp-block-heading">「別のプロセスで使用されているため、アクセスできません」</h3>



<p>同名ブックがすでに開かれているか、他のユーザーが同じファイルを開いている状態です。「存在確認と多重オープンチェックをセットで行う」で紹介したチェックを入れておくと、少なくとも自分のマクロ内での多重オープンは防げます。</p>



<h3 class="wp-block-heading">保護されたシートで実行時エラー1004が出る</h3>



<p>保護中のシートにVBAから書き込もうとしたときに起きます。一時的にUnprotectしてから処理する方法もありますが、頻繁に書き込むなら<code>UserInterfaceOnly:=True</code>での保護に切り替えたほうが処理がシンプルになります。</p>



<h3 class="wp-block-heading">シートが見つからないという実行時エラー9</h3>



<p>シート名の全角/半角の違いや、末尾の空白によるタイプミスが原因のことがほとんどです。「シートの存在確認」で紹介した関数を先頭に挟んでおくと、エラーメッセージだけで済んで原因調査がしやすくなります。</p>



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



<p>ブック・シート操作は「開く」「操作する」「保護する」「閉じる」の4フェーズで考えると迷いません。特に保護は、UserInterfaceOnly:=Trueを知っているかどうかで実装の手間がかなり変わります。</p>



<p>そして最後の「閉じる」を忘れないこと。開いたら閉じる、それだけのことですが、タスクマネージャーにExcel.exeが積み上がっていくのを見て初めて気づく人は、僕以外にもきっといるはずです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>VBA制御構文完全ガイド｜If・Select Case・For Next・Do Whileの使い分けとネスト対策</title>
		<link>https://cfxlog.com/vba-control-flow-guide/</link>
		
		<dc:creator><![CDATA[CFXLOG]]></dc:creator>
		<pubDate>Mon, 17 Aug 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[VBA]]></category>
		<category><![CDATA[Excel自動化]]></category>
		<guid isPermaLink="false">https://cfxlog.com/vba-control-flow-guide/</guid>

					<description><![CDATA[VBAでIf文を書き始めた頃、条件を1つ追加するたびにElseIfを重ねていた。 気づけばネストが3段、4段と深くなり、どこで何を判定しているのか自分でも追えなくなった。修正のたびに別の条件を壊すことも増えた。 そこで意 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>VBAでIf文を書き始めた頃、条件を1つ追加するたびにElseIfを重ねていた。</p>



<p>気づけばネストが3段、4段と深くなり、どこで何を判定しているのか自分でも追えなくなった。修正のたびに別の条件を壊すことも増えた。</p>



<p>そこで意識するようになったのが、早期リターンでネストを浅くすること。処理が複雑になってきたら、プロシージャを分けること。単一の変数で多分岐するならSelect Caseに置き換えること。</p>



<p>この記事では、If・Select Case・For Next・Do Whileという制御構文の基本と、<strong>「結局どれを使えばいいのか」という判断軸</strong>をまとめました。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://cfxlog.com/wp-content/uploads/2026/07/swell-eyecatch-noimg-300x158.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://cfxlog.com/vba-guide/">Excel VBA完全入門ガイド｜マクロの基礎から実践まで全ステップ解説</a>
						<span class="p-blogCard__excerpt">VBAって何？マクロとどう違うの？ VBAを始めたいけど、何から手をつければいいかわからない Excelの繰り返し作業を自動化して、残業を減らしたい このような疑問にお答&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">VBAの制御構文、何がどう違うのか</h2>



<p>VBAの制御構文は、大きく分けると「条件分岐」と「繰り返し」の2種類です。まずは全体像を一覧にしました。</p>



<figure class="wp-block-table"><table><thead><tr><th>構文</th><th>向いている場面</th></tr></thead><tbody><tr><td>If / ElseIf</td><td>複数の変数・複雑な条件を組み合わせて判定する</td></tr><tr><td>Select Case</td><td>1つの変数の値によって処理を分岐する</td></tr><tr><td>For Next</td><td>繰り返す回数が決まっている</td></tr><tr><td>Do While / Do Until</td><td>条件が満たされる（または満たされなくなる）まで繰り返す</td></tr><tr><td>For Each</td><td>セル範囲・シートなどのコレクションを順番に処理する</td></tr></tbody></table></figure>



<p>ここから、条件分岐→繰り返しの順に1つずつ詳しく見ていきます。</p>



<h2 class="wp-block-heading">If文の基本と使いこなし方</h2>



<h3 class="wp-block-heading">単純な条件分岐の書き方</h3>



<p>もっとも基本の形が、条件が真のときだけ処理を実行するIf文です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub CheckScore()
    Dim score As Integer
    score = 85

    If score &gt;= 80 Then
        MsgBox "合格です"
    End If
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> CheckScore</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> score </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Integer</span></span>
<span class="line"><span style="color:#9CDCFE">    score</span><span style="color:#D4D4D4"> = </span><span style="color:#B5CEA8">85</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#9CDCFE"> score</span><span style="color:#D4D4D4"> >= </span><span style="color:#B5CEA8">80</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "合格です"</span></span>
<span class="line"><span style="color:#C586C0">    End If</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>条件が偽のときの処理も書きたい場合は、Elseを使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub CheckScoreWithElse()
    Dim score As Integer
    score = 65

    If score &gt;= 80 Then
        MsgBox "合格です"
    Else
        MsgBox "不合格です"
    End If
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> CheckScoreWithElse</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> score </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Integer</span></span>
<span class="line"><span style="color:#9CDCFE">    score</span><span style="color:#D4D4D4"> = </span><span style="color:#B5CEA8">65</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#9CDCFE"> score</span><span style="color:#D4D4D4"> >= </span><span style="color:#B5CEA8">80</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "合格です"</span></span>
<span class="line"><span style="color:#C586C0">    Else</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "不合格です"</span></span>
<span class="line"><span style="color:#C586C0">    End If</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h3 class="wp-block-heading">ElseIfで分岐を増やす</h3>



<p>条件が3つ以上になる場合は、ElseIfを重ねます。ただし後述の通り、ElseIfが増えすぎるとSelect Caseに切り替えたほうが読みやすくなる場面も出てきます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub CheckGrade()
    Dim score As Integer
    score = 72

    If score &gt;= 90 Then
        MsgBox "評価：A"
    ElseIf score &gt;= 70 Then
        MsgBox "評価：B"
    ElseIf score &gt;= 50 Then
        MsgBox "評価：C"
    Else
        MsgBox "評価：D"
    End If
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> CheckGrade</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> score </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Integer</span></span>
<span class="line"><span style="color:#9CDCFE">    score</span><span style="color:#D4D4D4"> =</span><span style="color:#9CDCFE"> 72</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#9CDCFE"> score</span><span style="color:#D4D4D4"> >= </span><span style="color:#B5CEA8">90</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "評価：A"</span></span>
<span class="line"><span style="color:#C586C0">    ElseIf</span><span style="color:#9CDCFE"> score</span><span style="color:#D4D4D4"> >=</span><span style="color:#9CDCFE"> 70</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "評価：B"</span></span>
<span class="line"><span style="color:#C586C0">    ElseIf</span><span style="color:#9CDCFE"> score</span><span style="color:#D4D4D4"> >= </span><span style="color:#B5CEA8">50</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "評価：C"</span></span>
<span class="line"><span style="color:#C586C0">    Else</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "評価：D"</span></span>
<span class="line"><span style="color:#C586C0">    End If</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h3 class="wp-block-heading">And・Or・Notで複雑な条件を作る</h3>



<p>複数の変数を同時に判定したいときは、And・Or・Notを使います。Andは両方満たす場合、Orはどちらか一方でも満たす場合に真になります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub CheckDiscount()
    Dim age As Integer, isMember As Boolean
    age = 65
    isMember = False

    If age &gt;= 65 Or isMember Then
        MsgBox "割引対象です"
    End If
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> CheckDiscount</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> age </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Integer</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> isMember</span><span style="color:#D4D4D4"> As </span><span style="color:#4EC9B0">Boolean</span></span>
<span class="line"><span style="color:#9CDCFE">    age</span><span style="color:#D4D4D4"> = </span><span style="color:#B5CEA8">65</span></span>
<span class="line"><span style="color:#9CDCFE">    isMember</span><span style="color:#D4D4D4"> =</span><span style="color:#569CD6"> False</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#9CDCFE"> age</span><span style="color:#D4D4D4"> >= </span><span style="color:#B5CEA8">65</span><span style="color:#D4D4D4"> Or isMember </span><span style="color:#C586C0">Then</span></span>
<span class="line"><span style="color:#DCDCAA">        MsgBox</span><span style="color:#CE9178"> "割引対象です"</span></span>
<span class="line"><span style="color:#C586C0">    End If</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>地味に見落としがちですが、VBAのAnd・Orは<strong>両辺を必ず評価する</strong>仕様です。左辺だけで結果が確定していても、右辺の関数呼び出しなどは実行されてしまいます。</p>



<h3 class="wp-block-heading">一行で書けるIf文</h3>



<p>処理が1行で済む場合は、End Ifを省略して1行で書くこともできます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub CheckScoreOneLine()
    Dim score As Integer
    score = 85

    If score &gt;= 80 Then MsgBox "合格です"
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> CheckScoreOneLine</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> score </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Integer</span></span>
<span class="line"><span style="color:#9CDCFE">    score</span><span style="color:#D4D4D4"> = </span><span style="color:#B5CEA8">85</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#9CDCFE"> score</span><span style="color:#D4D4D4"> >= </span><span style="color:#B5CEA8">80</span><span style="color:#C586C0"> Then</span><span style="color:#DCDCAA"> MsgBox</span><span style="color:#CE9178"> "合格です"</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>ただし、Elseまで含めて複数の処理を1行に詰め込むと逆に読みにくくなります。単純な1処理だけの分岐にとどめるのがおすすめです。</p>



<h2 class="wp-block-heading">Select Caseで多分岐をすっきり書く</h2>



<p>1つの変数の値によって処理を分けたいとき、ElseIfを何段も重ねるよりSelect Caseのほうがすっきり書けます。</p>



<h3 class="wp-block-heading">基本構文</h3>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub CheckGradeBySelectCase()
    Dim grade As String
    grade = "B"

    Select Case grade
        Case "A"
            MsgBox "優秀です"
        Case "B"
            MsgBox "合格です"
        Case Else
            MsgBox "要確認です"
    End Select
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> CheckGradeBySelectCase</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> grade </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">String</span></span>
<span class="line"><span style="color:#9CDCFE">    grade</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">"B"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    Select</span><span style="color:#C586C0"> Case</span><span style="color:#D4D4D4"> grade</span></span>
<span class="line"><span style="color:#C586C0">        Case</span><span style="color:#CE9178"> "A"</span></span>
<span class="line"><span style="color:#DCDCAA">            MsgBox</span><span style="color:#CE9178"> "優秀です"</span></span>
<span class="line"><span style="color:#C586C0">        Case</span><span style="color:#CE9178"> "B"</span></span>
<span class="line"><span style="color:#DCDCAA">            MsgBox</span><span style="color:#CE9178"> "合格です"</span></span>
<span class="line"><span style="color:#C586C0">        Case</span><span style="color:#C586C0"> Else</span></span>
<span class="line"><span style="color:#DCDCAA">            MsgBox</span><span style="color:#CE9178"> "要確認です"</span></span>
<span class="line"><span style="color:#C586C0">    End Select</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h3 class="wp-block-heading">Case Elseで想定外の値を拾う</h3>



<p>Case Elseは、どのCaseにも当てはまらなかった場合の受け皿です。省略もできますが、想定外のデータが来たときに気づけなくなるので、基本的には書いておくのが安全です。</p>



<h3 class="wp-block-heading">Toや複数条件を1つのCaseにまとめる</h3>



<p>数値の範囲を指定したい場合はToを、複数の値をまとめたい場合はカンマ区切りを使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub CheckScoreBySelectCase()
    Dim score As Integer
    score = 72

    Select Case score
        Case 90 To 100
            MsgBox "評価：A"
        Case 70 To 89
            MsgBox "評価：B"
        Case 1, 3, 5, 7, 9
            MsgBox "奇数のおまけ点"
        Case Else
            MsgBox "評価：C"
    End Select
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> CheckScoreBySelectCase</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> score </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Integer</span></span>
<span class="line"><span style="color:#9CDCFE">    score</span><span style="color:#D4D4D4"> =</span><span style="color:#9CDCFE"> 72</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    Select</span><span style="color:#C586C0"> Case</span><span style="color:#D4D4D4"> score</span></span>
<span class="line"><span style="color:#C586C0">        Case</span><span style="color:#B5CEA8"> 90</span><span style="color:#C586C0"> To</span><span style="color:#B5CEA8"> 100</span></span>
<span class="line"><span style="color:#DCDCAA">            MsgBox</span><span style="color:#CE9178"> "評価：A"</span></span>
<span class="line"><span style="color:#C586C0">        Case</span><span style="color:#B5CEA8"> 70</span><span style="color:#C586C0"> To</span><span style="color:#B5CEA8"> 89</span></span>
<span class="line"><span style="color:#DCDCAA">            MsgBox</span><span style="color:#CE9178"> "評価：B"</span></span>
<span class="line"><span style="color:#C586C0">        Case</span><span style="color:#B5CEA8"> 1</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">3</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">5</span><span style="color:#D4D4D4">,</span><span style="color:#9CDCFE"> 7</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">9</span></span>
<span class="line"><span style="color:#DCDCAA">            MsgBox</span><span style="color:#CE9178"> "奇数のおまけ点"</span></span>
<span class="line"><span style="color:#C586C0">        Case</span><span style="color:#C586C0"> Else</span></span>
<span class="line"><span style="color:#DCDCAA">            MsgBox</span><span style="color:#CE9178"> "評価：C"</span></span>
<span class="line"><span style="color:#C586C0">    End Select</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h3 class="wp-block-heading">If文と何が違うのか</h3>



<p>同じ処理でも、If文とSelect Caseでは見た目の複雑さが変わります。先ほどの評価分岐をIf文で書くと、条件式に毎回変数名（score）を書く必要がありました。</p>



<p>Select Caseなら変数を1回書くだけで済むので、判定対象が1つの変数に絞られている場合は、Select Caseのほうがコードの見通しが良くなります。逆に、複数の変数を組み合わせた条件（年齢と会員フラグの両方を見る、など）はIf文のほうが素直に書けます。</p>



<h2 class="wp-block-heading">For NextとDo While、どっちを使うべきか</h2>



<p>繰り返し処理も、判断軸はシンプルです。繰り返す回数が決まっているならFor Next、条件次第で終わるならDo While・Do Until、コレクションを順番に処理するならFor Eachを使います。</p>



<h3 class="wp-block-heading">For Nextの基本構文とStep</h3>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub LoopForNext()
    Dim i As Long
    For i = 1 To 5
        Debug.Print i
    Next i
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> LoopForNext</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> i </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Long</span></span>
<span class="line"><span style="color:#C586C0">    For</span><span style="color:#9CDCFE"> i</span><span style="color:#D4D4D4"> = </span><span style="color:#B5CEA8">1</span><span style="color:#C586C0"> To</span><span style="color:#B5CEA8"> 5</span></span>
<span class="line"><span style="color:#D4D4D4">        Debug.Print i</span></span>
<span class="line"><span style="color:#C586C0">    Next</span><span style="color:#D4D4D4"> i</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>Stepを使うと、増分（または減少幅）を指定できます。逆順にループしたいときにも使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub LoopForNextStep()
    Dim i As Long
    For i = 10 To 1 Step -1
        Debug.Print i
    Next i
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> LoopForNextStep</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> i </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Long</span></span>
<span class="line"><span style="color:#C586C0">    For</span><span style="color:#9CDCFE"> i</span><span style="color:#D4D4D4"> = </span><span style="color:#B5CEA8">10</span><span style="color:#C586C0"> To</span><span style="color:#B5CEA8"> 1</span><span style="color:#9CDCFE"> Step</span><span style="color:#B5CEA8"> -1</span></span>
<span class="line"><span style="color:#D4D4D4">        Debug.Print i</span></span>
<span class="line"><span style="color:#C586C0">    Next</span><span style="color:#D4D4D4"> i</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h3 class="wp-block-heading">Do While / Do Untilの基本と無限ループの注意点</h3>



<p>Do Whileは条件が真の間、Do Untilは条件が偽の間繰り返します。回数が決まっていない処理、例えば「特定のセルが空になるまで」のような処理に向いています。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub LoopDoWhile()
    Dim i As Long
    i = 1

    Do While i &lt;= 5
        Debug.Print i
        i = i + 1 ' カウンタの更新を忘れると無限ループになる
    Loop
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> LoopDoWhile</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> i </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Long</span></span>
<span class="line"><span style="color:#9CDCFE">    i</span><span style="color:#D4D4D4"> = </span><span style="color:#B5CEA8">1</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    Do</span><span style="color:#C586C0"> While</span><span style="color:#9CDCFE"> i</span><span style="color:#D4D4D4"> &lt;= </span><span style="color:#B5CEA8">5</span></span>
<span class="line"><span style="color:#D4D4D4">        Debug.Print i</span></span>
<span class="line"><span style="color:#9CDCFE">        i</span><span style="color:#D4D4D4"> =</span><span style="color:#9CDCFE"> i</span><span style="color:#D4D4D4"> + </span><span style="color:#B5CEA8">1</span><span style="color:#6A9955"> ' カウンタの更新を忘れると無限ループになる</span></span>
<span class="line"><span style="color:#C586C0">    Loop</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>Do Whileでもっとも注意したいのが、カウンタや条件変数の更新漏れです。更新を忘れると条件が永久に真のままになり、無限ループに陥ります。</p>



<p>もし無限ループさせてしまったら、Escキーで処理を中断できます。心配な場合は、Excelのオプションで「マクロの中断を有効にする」設定になっているか確認しておくと安心です。</p>



<h3 class="wp-block-heading">For Eachでセル範囲・シートを処理する</h3>



<p>セル範囲やシートのようなコレクションを順番に処理するときは、For Eachが素直です。何番目の要素かを自分で管理する必要がありません。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub LoopForEachCell()
    Dim cell As Range
    For Each cell In Range("A1:A5")
        Debug.Print cell.Value
    Next cell
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> LoopForEachCell</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> cell </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Range</span></span>
<span class="line"><span style="color:#C586C0">    For</span><span style="color:#C586C0"> Each</span><span style="color:#D4D4D4"> cell In </span><span style="color:#DCDCAA">Range</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"A1:A5"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#D4D4D4">        Debug.Print cell.Value</span></span>
<span class="line"><span style="color:#C586C0">    Next</span><span style="color:#D4D4D4"> cell</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h3 class="wp-block-heading">Exit For / Exit Doでループを途中で抜ける</h3>



<p>目的のデータが見つかった時点でループを止めたい場合は、Exit ForまたはExit Doを使います。最後まで回さずに済むので、無駄な処理を減らせます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub FindTarget()
    Dim cell As Range
    For Each cell In Range("A1:A100")
        If cell.Value = "完了" Then
            MsgBox cell.Address &amp; "で見つかりました"
            Exit For
        End If
    Next cell
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> FindTarget</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> cell </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Range</span></span>
<span class="line"><span style="color:#C586C0">    For</span><span style="color:#C586C0"> Each</span><span style="color:#D4D4D4"> cell In </span><span style="color:#DCDCAA">Range</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"A1:A100"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">        If</span><span style="color:#D4D4D4"> cell.</span><span style="color:#9CDCFE">Value</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">"完了"</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">            MsgBox</span><span style="color:#D4D4D4"> cell.</span><span style="color:#9CDCFE">Address</span><span style="color:#D4D4D4"> &amp; </span><span style="color:#CE9178">"で見つかりました"</span></span>
<span class="line"><span style="color:#C586C0">            Exit For</span></span>
<span class="line"><span style="color:#C586C0">        End If</span></span>
<span class="line"><span style="color:#C586C0">    Next</span><span style="color:#D4D4D4"> cell</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<h2 class="wp-block-heading">If文のネストが深くなったら、早期リターンとプロシージャ分割で整理する</h2>



<p>冒頭で触れた通り、If文はネストが深くなるほど読みにくくなります。3段、4段とネストしたコードは、後で自分で読み返しても理解に時間がかかります。</p>



<p>対策の1つが早期リターンです。条件を満たさない場合はExit SubやExit Functionで先に処理を抜けてしまい、以降のコードではネストを増やさずに済ませます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>' ネストが深い書き方
Sub ProcessOrderNested(orderId As String, amount As Long)
    If orderId &lt;&gt; "" Then
        If amount &gt; 0 Then
            MsgBox "注文を処理します"
        End If
    End If
End Sub

' 早期リターンで浅くした書き方
Sub ProcessOrderEarlyReturn(orderId As String, amount As Long)
    If orderId = "" Then Exit Sub
    If amount &lt;= 0 Then Exit Sub

    MsgBox "注文を処理します"
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#6A9955">' ネストが深い書き方</span></span>
<span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> ProcessOrderNested</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">orderId As String, amount As Long</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#9CDCFE"> orderId</span><span style="color:#D4D4D4"> &lt;> </span><span style="color:#CE9178">""</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#C586C0">        If</span><span style="color:#9CDCFE"> amount</span><span style="color:#D4D4D4"> > </span><span style="color:#B5CEA8">0</span><span style="color:#C586C0"> Then</span></span>
<span class="line"><span style="color:#DCDCAA">            MsgBox</span><span style="color:#CE9178"> "注文を処理します"</span></span>
<span class="line"><span style="color:#C586C0">        End If</span></span>
<span class="line"><span style="color:#C586C0">    End If</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955">' 早期リターンで浅くした書き方</span></span>
<span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> ProcessOrderEarlyReturn</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">orderId As String, amount As Long</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#9CDCFE"> orderId</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">""</span><span style="color:#C586C0"> Then</span><span style="color:#C586C0"> Exit Sub</span></span>
<span class="line"><span style="color:#C586C0">    If</span><span style="color:#9CDCFE"> amount</span><span style="color:#D4D4D4"> &lt;= </span><span style="color:#B5CEA8">0</span><span style="color:#C586C0"> Then</span><span style="color:#C586C0"> Exit Sub</span></span>
<span class="line"></span>
<span class="line"><span style="color:#DCDCAA">    MsgBox</span><span style="color:#CE9178"> "注文を処理します"</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>ネストが減っただけでなく、「orderIdが空なら何もしない」「amountが0以下なら何もしない」という前提条件が、上から順に読むだけで分かるようになりました。</p>



<p>もう1つの対策がプロシージャ分割です。1つのSubに判定と処理を詰め込みすぎず、判定部分を別のFunctionに切り出すと、それぞれの処理が追いやすくなります。</p>



<p>ループの中で早期リターンを使いたい場合は、Exit Subではなく判定部分を別プロシージャに抽出するのがコツです。ループの途中でSubごと抜けてしまうと、後続の処理まで止まってしまいます。</p>



<p>そして、ElseIfが3段以上続くようなら、ここまでで見てきたSelect Caseへの置き換えも検討してみてください。多くの場合、判定対象が1つの変数に絞れるはずです。</p>



<h2 class="wp-block-heading">実務での使い分けを体感する：注文データを一括処理する</h2>



<p>ここまでの内容を組み合わせて、注文一覧を処理する簡単な例を書いてみます。ステータスごとの分岐にSelect Case、範囲の処理にFor Each、無効なデータのスキップに早期リターン相当の考え方を使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">VB</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Sub ProcessOrders()
    Dim cell As Range
    Dim status As String

    For Each cell In Range("B2:B10")
        status = cell.Value

        ' 空欄はスキップして次のセルへ（ループ内の早期リターン相当）
        If status = "" Then GoTo ContinueLoop

        Select Case status
            Case "未処理"
                cell.Offset(0, 1).Value = "処理待ち"
            Case "処理中"
                cell.Offset(0, 1).Value = "確認中"
            Case "完了"
                cell.Offset(0, 1).Value = "アーカイブ済み"
            Case Else
                cell.Offset(0, 1).Value = "要確認"
        End Select

ContinueLoop:
    Next cell
End Sub</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#569CD6">Sub</span><span style="color:#DCDCAA"> ProcessOrders</span><span style="color:#D4D4D4">()</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> cell </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">Range</span></span>
<span class="line"><span style="color:#569CD6">    Dim</span><span style="color:#9CDCFE"> status </span><span style="color:#D4D4D4">As </span><span style="color:#4EC9B0">String</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">    For</span><span style="color:#C586C0"> Each</span><span style="color:#D4D4D4"> cell In </span><span style="color:#DCDCAA">Range</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"B2:B10"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#D4D4D4">        status = cell.Value</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955">        ' 空欄はスキップして次のセルへ（ループ内の早期リターン相当）</span></span>
<span class="line"><span style="color:#C586C0">        If</span><span style="color:#D4D4D4"> status = </span><span style="color:#CE9178">""</span><span style="color:#C586C0"> Then</span><span style="color:#D4D4D4"> GoTo ContinueLoop</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">        Select</span><span style="color:#C586C0"> Case</span><span style="color:#D4D4D4"> status</span></span>
<span class="line"><span style="color:#C586C0">            Case</span><span style="color:#CE9178"> "未処理"</span></span>
<span class="line"><span style="color:#D4D4D4">                cell.</span><span style="color:#DCDCAA">Offset</span><span style="color:#D4D4D4">(</span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">1</span><span style="color:#D4D4D4">).</span><span style="color:#9CDCFE">Value</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">"処理待ち"</span></span>
<span class="line"><span style="color:#C586C0">            Case</span><span style="color:#CE9178"> "処理中"</span></span>
<span class="line"><span style="color:#D4D4D4">                cell.</span><span style="color:#DCDCAA">Offset</span><span style="color:#D4D4D4">(</span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">1</span><span style="color:#D4D4D4">).</span><span style="color:#9CDCFE">Value</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">"確認中"</span></span>
<span class="line"><span style="color:#C586C0">            Case</span><span style="color:#CE9178"> "完了"</span></span>
<span class="line"><span style="color:#D4D4D4">                cell.</span><span style="color:#DCDCAA">Offset</span><span style="color:#D4D4D4">(</span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">1</span><span style="color:#D4D4D4">).</span><span style="color:#9CDCFE">Value</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">"アーカイブ済み"</span></span>
<span class="line"><span style="color:#C586C0">            Case</span><span style="color:#C586C0"> Else</span></span>
<span class="line"><span style="color:#D4D4D4">                cell.</span><span style="color:#DCDCAA">Offset</span><span style="color:#D4D4D4">(</span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">1</span><span style="color:#D4D4D4">).</span><span style="color:#9CDCFE">Value</span><span style="color:#D4D4D4"> = </span><span style="color:#CE9178">"要確認"</span></span>
<span class="line"><span style="color:#C586C0">        End Select</span></span>
<span class="line"></span>
<span class="line"><span style="color:#D4D4D4">ContinueLoop:</span></span>
<span class="line"><span style="color:#C586C0">    Next</span><span style="color:#D4D4D4"> cell</span></span>
<span class="line"><span style="color:#569CD6">End Sub</span></span></code></pre></div>



<p>For Eachでセル範囲を回し、ステータスの多分岐はSelect Caseに任せる。この組み合わせは、Excelのデータ処理では特によく出てくる形です。</p>



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



<h3 class="wp-block-heading">無限ループになってしまう</h3>



<p>Do While・Do Untilでカウンタや条件変数を更新し忘れていないか確認してください。ループの外に処理が抜けられる条件が必ず用意されているかがポイントです。</p>



<h3 class="wp-block-heading">「Nextに対応するForがありません」と出る</h3>



<p>ForとNext、またはDoとLoopの数が合っていないコンパイルエラーです。特にネストしたループでは、Exit ForやIf文のEnd Ifと混同して、片方だけ消してしまうことがよく起こります。</p>



<h3 class="wp-block-heading">Select CaseでCase Elseを忘れて想定外の値を見逃す</h3>



<p>Case Elseを省略すると、どのCaseにも当てはまらないデータは何もせずスルーされます。データの入力ミスや想定外の値に気づけないまま処理が進んでしまうことがあるので、基本的にはCase Elseで検知できるようにしておくのがおすすめです。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://cfxlog.com/wp-content/uploads/2026/03/vba-error-handling-best-practices-300x158.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://cfxlog.com/vba-error-handling-best-practices/">VBAエラー処理・デバッグ完全ガイド｜On Error GoTo・Debug.Print・ログ出力の使い方</a>
						<span class="p-blogCard__excerpt">エラハンドリングのベストプラクティスが知りたい！ このような疑問にお答えします。 Excel VBAって手軽にプログラムを組める一方で、エラーハンドリングをきちんと組ん&#8230;</span>					</div>
				</div>
			</div>
		</div>


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



<p>If・Select Case・For Next・Do Whileは、それぞれ向いている場面が異なります。迷ったら「判定対象は1つの変数か、複数の条件か」「繰り返す回数は決まっているか」で選ぶと、自然と適切な構文にたどり着きます。</p>



<p>ネストが深くなってきたら、早期リターンとプロシージャ分割。あのとき訳が分からなくなったコードも、今はこの2つでだいぶ整理できるようになりました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】正規表現の使い方と知ってると便利なテクニック</title>
		<link>https://cfxlog.com/python-re/</link>
		
		<dc:creator><![CDATA[CFXLOG]]></dc:creator>
		<pubDate>Mon, 17 Aug 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://cfxlog.com/?p=5254</guid>

					<description><![CDATA[このような方に向けて、Python の正規表現テクニックをお伝えします。 正規表現は、文字列データから特定のパターンを検索するために使われるツールです。 応用範囲は広く、以下のような多岐にわたる作業を一瞬で片付けることが [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group is-style-crease"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>Python で高度な文字列操作を行いたい！</li>
</ul>
</div></div>



<p>このような方に向けて、Python の正規表現テクニックをお伝えします。</p>



<p>正規表現は、文字列データから特定のパターンを検索するために使われるツールです。</p>



<p>応用範囲は広く、以下のような多岐にわたる作業を一瞬で片付けることができます。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>抽出</li>



<li>検索</li>



<li>整形・置き換え</li>
</ul>
</div></div>



<p>正規表現をマスターすれば、手作業では絶対にこなせない処理を一瞬で片付けることができます。「プログラミングをやっていてよかった！」と思えるはずです。</p>



<p>具体的なメソッドなどをご紹介する前に、正規表現に関する基礎知識をお伝えします。</p>



<p>プログラムを組む際に必要な最低限の情報に留めていますので、できれば目を通していただければと思います。</p>



<p>正規表現（Regular Expression）は、文字列の規則性を表現する方法です。</p>



<p>これにより、元となる文字列データからパターンに一致する文字列部分を見つけたり、置き換えしたりといったことがプログラムを通してできるようになります。</p>



<p>正規表現では「文字列の規則性」を表現するため、特殊な意味を持つ記号が用意されています。</p>



<figure class="wp-block-table"><table><thead><tr><th>メタ文字</th><th>意味</th></tr></thead><tbody><tr><td><code>.</code></td><td>任意の一文字</td></tr><tr><td><code>*</code></td><td>直前の文字の0回以上の繰り返し</td></tr><tr><td><code>+</code></td><td>直前の文字の1回以上の繰り返し</td></tr><tr><td><code>?</code></td><td>直前の文字の0回または1回出現</td></tr><tr><td><code>^</code></td><td>文字列の始まり</td></tr><tr><td><code>$</code></td><td>文字列の終わり</td></tr><tr><td><code>[]</code></td><td>かっこ内の任意の単一文字</td></tr><tr><td><code>|</code></td><td>論理和、いずれかのパターン</td></tr><tr><td><code>()</code></td><td>かっこ内をグループとする</td></tr></tbody></table><figcaption class="wp-element-caption">メタ文字の例</figcaption></figure>



<p>これだけでは、どのように使うかのイメージがつきにくいですよね。</p>



<p>具体的な使い方は、この後に丁寧にお伝えしていきます。</p>



<p>Python で正規表現を扱うためには re ライブラリを使います。<br>ここではよく使うメソッドを中心に解説します。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>re.search(pattern, string)</li>



<li>re.match(pattern, string)</li>



<li>re.findall(pattern, string)</li>



<li>re.sub(pattern, repl, string)</li>
</ul>
</div></div>



<p>順番に解説していきます。</p>



<p class="is-style-icon_announce">メソッドの戻り値である Match オブジェクトの使い方は、後ほど解説します。</p>



<p>対象となる文字列から、パターンに一致する最初の箇所を見つけます。</p>



<p>一致するパターンがあった場合には Match オブジェクトが、なかった場合には None が返ってきます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


# パターンと検索対象の文字列を定義
pattern = "python"
text = "I love python code!"

# パターンを検索
match = re.search(pattern, text)

# 結果の表示
if match:
    print("一致が見つかりました:", match.group())
else:
    print("一致が見つかりませんでした。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンと検索対象の文字列を定義</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #CE9178">&quot;python&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;I love python code!&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンを検索</span></span>
<span class="line"><span style="color: #D4D4D4">match = re.search(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 結果の表示</span></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> match:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致が見つかりました:&quot;</span><span style="color: #D4D4D4">, match.group())</span></span>
<span class="line"><span style="color: #C586C0">else</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致が見つかりませんでした。&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p>文字列の先頭が、指定したパターンに一致するかを検証します。</p>



<p>一致する場合には Match オブジェクトを返し、一致しない場合には None を返します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


# パターンと検索対象の文字列を定義
pattern = "Python"
text = "Python, my love, is code!"

# パターンを検索（re.matchを使用）
match = re.match(pattern, text)

# 結果の表示
if match:
    print("一致が見つかりました:", match.group())
else:
    print("一致が見つかりませんでした。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンと検索対象の文字列を定義</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #CE9178">&quot;Python&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;Python, my love, is code!&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンを検索（re.matchを使用）</span></span>
<span class="line"><span style="color: #D4D4D4">match = re.match(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 結果の表示</span></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> match:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致が見つかりました:&quot;</span><span style="color: #D4D4D4">, match.group())</span></span>
<span class="line"><span style="color: #C586C0">else</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致が見つかりませんでした。&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p><code>re.match()</code>関数を使うことにより、直感的に文字列の先頭を判定していることがわかりますのでコードの可読性は向上します。</p>



<p>ただ、汎用性という意味においてはre.search()メソッドを使う方が良いかもしれません。正規表現では文字列の先頭を示す<code>^</code>（キャレット）が用意されているので、以下のコードとすることでre.match()と同様の結果を得ることができるからです。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


# パターンと検索対象の文字列を定義
pattern = "^Python"
text = "Python, my love, is code!"

# パターンを検索（re.matchを使用）
match = re.search(pattern, text)

# 結果の表示
if match:
    print("一致が見つかりました:", match.group())
else:
    print("一致が見つかりませんでした。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンと検索対象の文字列を定義</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #CE9178">&quot;^Python&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;Python, my love, is code!&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンを検索（re.matchを使用）</span></span>
<span class="line"><span style="color: #D4D4D4">match = re.search(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 結果の表示</span></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> match:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致が見つかりました:&quot;</span><span style="color: #D4D4D4">, match.group())</span></span>
<span class="line"><span style="color: #C586C0">else</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致が見つかりませんでした。&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p>この辺りは好みの問題にもなってくるので、個々のプロジェクトに合わせて使い分けてみてください。</p>



<p>文字列内のパターンに一致する全ての文字列を探し出し、リストとして返します。</p>



<p>以下は文字列内に存在する電子メールアドレスのリストを取得するためのコードです。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


# 電子メールアドレスのパターンと検索対象の文字列を定義
pattern = r'\b&#91;A-Za-z0-9._%+-&#93;+@&#91;A-Za-z0-9.-&#93;+\.&#91;A-Z|a-z&#93;{2,}\b'
text = "お問い合わせはsupport@example.comに、またはadmin@example.orgにご連絡ください。"

# パターンに一致する全ての部分文字列を見つける
emails = re.findall(pattern, text)

# 結果を表示する
print("見つかったメールアドレス:", emails)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 電子メールアドレスのパターンと検索対象の文字列を定義</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&apos;\b</span><span style="color: #CE9178">&#91;</span><span style="color: #D16969">A-Za-z0-9._%+-</span><span style="color: #CE9178">&#93;</span><span style="color: #D7BA7D">+</span><span style="color: #D16969">@</span><span style="color: #CE9178">&#91;</span><span style="color: #D16969">A-Za-z0-9.-</span><span style="color: #CE9178">&#93;</span><span style="color: #D7BA7D">+\.</span><span style="color: #CE9178">&#91;</span><span style="color: #D16969">A-Z|a-z</span><span style="color: #CE9178">&#93;</span><span style="color: #D7BA7D">{2,}</span><span style="color: #D16969">\b&apos;</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;お問い合わせはsupport@example.comに、またはadmin@example.orgにご連絡ください。&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンに一致する全ての部分文字列を見つける</span></span>
<span class="line"><span style="color: #D4D4D4">emails = re.findall(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 結果を表示する</span></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;見つかったメールアドレス:&quot;</span><span style="color: #D4D4D4">, emails)</span></span></code></pre></div>



<p>実務的には余分なスペース・改行・タブなどを削除してから<code>re.findall()</code>メソッドを実行することが多いです。<br>その場合は、以下のように<code>split()</code>メソッドを実行する形になります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 検索対象の文字列（改行やタブが混じっている例）
text = "お問い合わせは\nsupport@example.com\tに、またはadmin@example.orgにご連絡ください。"

# スペース・タブ・改行などを取り除いて1行の文字列に戻す
text = " ".join(text.split())</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955"># 検索対象の文字列（改行やタブが混じっている例）</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;お問い合わせは</span><span style="color: #D7BA7D">\n</span><span style="color: #CE9178">support@example.com</span><span style="color: #D7BA7D">\t</span><span style="color: #CE9178">に、またはadmin@example.orgにご連絡ください。&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># スペース・タブ・改行などを取り除いて1行の文字列に戻す</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot; &quot;</span><span style="color: #D4D4D4">.join(text.split())</span></span></code></pre></div>



<p>これにより「余計な文字列が紛れていることによりパターンを見つけられない」という事態を避けることができます。</p>



<p>パターンに一致する文字列を、別の文字列に置き換える関数です。</p>



<p>Pyhton の組み込み関数に replace がありますが、<code>re.sub()</code>はパターンを使うことでより柔軟に置き換え対象を探しに行くイメージになります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


# 検索するパターン
pattern = r"(\d{4})-(\d{2})-(\d{2})"
# 検索対象の文字列
text = "今日の日付は2023-04-20です。明日は2023-04-21です。"
# 置き換え後のパターン: DD/MM/YYYY 形式
repl = r"\3/\2/\1"

# 置換を実行
replaced_text = re.sub(pattern, repl, text)

print("置換前のテキスト:", text)
print("置換後のテキスト:", replaced_text)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 検索するパターン</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;</span><span style="color: #CE9178">(</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{4}</span><span style="color: #CE9178">)</span><span style="color: #D16969">-</span><span style="color: #CE9178">(</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{2}</span><span style="color: #CE9178">)</span><span style="color: #D16969">-</span><span style="color: #CE9178">(</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{2}</span><span style="color: #CE9178">)</span><span style="color: #D16969">&quot;</span></span>
<span class="line"><span style="color: #6A9955"># 検索対象の文字列</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;今日の日付は2023-04-20です。明日は2023-04-21です。&quot;</span></span>
<span class="line"><span style="color: #6A9955"># 置き換え後のパターン: DD/MM/YYYY 形式</span></span>
<span class="line"><span style="color: #D4D4D4">repl = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;</span><span style="color: #569CD6">\3</span><span style="color: #D16969">/</span><span style="color: #569CD6">\2</span><span style="color: #D16969">/</span><span style="color: #569CD6">\1</span><span style="color: #D16969">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 置換を実行</span></span>
<span class="line"><span style="color: #D4D4D4">replaced_text = re.sub(pattern, repl, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;置換前のテキスト:&quot;</span><span style="color: #D4D4D4">, text)</span></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;置換後のテキスト:&quot;</span><span style="color: #D4D4D4">, replaced_text)</span></span></code></pre></div>



<p>上記のコードで行っている作業の流れは以下の通りです。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>「YYYY-MM-DD」形式のパターンを探す</li>



<li>「DD/MM/YYYY」形式に置き換える</li>
</ul>
</div></div>



<p>組み込み関数の<code>replace()</code>ではここまで繊細な操作はできません。</p>



<p><code>re.sub()</code>メソッド、とても便利です。</p>



<p>re ライブラリの関数を使うと、戻り値として Match オブジェクトが返ってきます。</p>



<p>ここではよく使う Match オブジェクトのメソッドを解説します。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>group()</li>



<li>groups()</li>



<li>groupdict()</li>



<li>start(), end()</li>



<li>span()</li>
</ul>
</div></div>



<p>順番に解説していきます。</p>



<p>パターンに一致した部分を取得するメソッドで、引数に数字を渡すと色々な抽出ができます。</p>



<p>具体例をご覧いただいた方が直感的に理解いただけると思うので、コード例を以下に示します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


# テキストとパターンを定義
text = "今日の日付は2023-04-20です。"
pattern = r'(\d{4})-(\d{2})-(\d{2})'

# パターンに一致する部分を検索
match = re.search(pattern, text)

if match:
    # 全体の一致を表示
    print("全体の一致:", match.group(0))
    
    # キャプチャグループによる一致を表示
    print("年:", match.group(1))
    print("月:", match.group(2))
    print("日:", match.group(3))</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># テキストとパターンを定義</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;今日の日付は2023-04-20です。&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&apos;</span><span style="color: #CE9178">(</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{4}</span><span style="color: #CE9178">)</span><span style="color: #D16969">-</span><span style="color: #CE9178">(</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{2}</span><span style="color: #CE9178">)</span><span style="color: #D16969">-</span><span style="color: #CE9178">(</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{2}</span><span style="color: #CE9178">)</span><span style="color: #D16969">&apos;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンに一致する部分を検索</span></span>
<span class="line"><span style="color: #D4D4D4">match = re.search(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> match:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># 全体の一致を表示</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;全体の一致:&quot;</span><span style="color: #D4D4D4">, match.group(</span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># キャプチャグループによる一致を表示</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;年:&quot;</span><span style="color: #D4D4D4">, match.group(</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;月:&quot;</span><span style="color: #D4D4D4">, match.group(</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;日:&quot;</span><span style="color: #D4D4D4">, match.group(</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4">))</span></span></code></pre></div>



<p>Match オブジェクトの出力結果は、以下のようになります。</p>



<figure class="wp-block-table"><table><thead><tr><th>コード</th><th>出力結果</th></tr></thead><tbody><tr><td>match.group(0)</td><td>2023-04-20</td></tr><tr><td>match.group(1)</td><td>2023</td></tr><tr><td>match.group(2)</td><td>04</td></tr><tr><td>match.group(3)</td><td>20</td></tr></tbody></table><figcaption class="wp-element-caption">match オブジェクトの出力結果</figcaption></figure>



<p>パターンに一致したグループを要素とするタプルを返します。</p>



<p>コード例としては以下となります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


# テキストとパターンを定義
text = "今日の日付は2023-04-20です。"
pattern = r'(\d{4})-(\d{2})-(\d{2})'

# パターンに一致する部分を検索
match = re.search(pattern, text)

if match:
    # groups()メソッドを使用してすべてのキャプチャグループを取得
    year, month, day = match.groups()
    
    print(f"年: {year}, 月: {month}, 日: {day}")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># テキストとパターンを定義</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;今日の日付は2023-04-20です。&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&apos;</span><span style="color: #CE9178">(</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{4}</span><span style="color: #CE9178">)</span><span style="color: #D16969">-</span><span style="color: #CE9178">(</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{2}</span><span style="color: #CE9178">)</span><span style="color: #D16969">-</span><span style="color: #CE9178">(</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{2}</span><span style="color: #CE9178">)</span><span style="color: #D16969">&apos;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンに一致する部分を検索</span></span>
<span class="line"><span style="color: #D4D4D4">match = re.search(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> match:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># groups()メソッドを使用してすべてのキャプチャグループを取得</span></span>
<span class="line"><span style="color: #D4D4D4">    year, month, day = match.groups()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;年: </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">year</span><span style="color: #569CD6">}</span><span style="color: #CE9178">, 月: </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">month</span><span style="color: #569CD6">}</span><span style="color: #CE9178">, 日: </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">day</span><span style="color: #569CD6">}</span><span style="color: #CE9178">&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p>正規表現として<code>(\d{4})-(\d{2})-(\d{2})</code>を指定しているので、左から順番にタプルの要素として追加されていくイメージです。</p>



<p>得られるる Match オブジェクトの内容を表にまとめると以下の通り。</p>



<figure class="wp-block-table"><table><thead><tr><th>コード</th><th>出力結果</th></tr></thead><tbody><tr><td>match.groups()[0]</td><td>2023</td></tr><tr><td>match.groups()[1]</td><td>04</td></tr><tr><td>match.groups()[2]</td><td>20</td></tr></tbody></table><figcaption class="wp-element-caption">match オブジェクトの出力結果</figcaption></figure>



<p>得られる Match オブジェクトはタプルとして得られるので、先ほどのコード例のようにアンパッキングでスマートに記述できるのが大きなメリットになります。</p>



<p class="is-style-icon_info"><code>group(0)</code>として得られた文字列全体の取得はできないので、注意が必要です。</p>



<p>これまで見てきた方法では、グループの位置を番号で指定して読み出す必要がありました。</p>



<p>ところが今回の<code>groupdict()</code>メソッドを使うことでインデックス番号の代わりに辞書のキーを指定することができます。</p>



<p>つまり、Match オブジェクトから情報取得するのに「あらかじめつけたラベル（辞書のキー）」で操作できることになります。</p>



<p>具体的なコード例を以下の示します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


# テキストとパターンを定義
text = "今日の日付は2023-04-20です。"
pattern = r"(?P&lt;year>\d{4})-(?P&lt;month>\d{2})-(?P&lt;day>\d{2})"

# パターンに一致する部分を検索
match = re.search(pattern, text)

if match:
    # groupdict()メソッドを使用して名前付きキャプチャグループの情報を取得
    date_info = match.groupdict()
    
    print(f"年: {date_info&#91;'year'&#93;}, 月: {date_info&#91;'month'&#93;}, 日: {date_info&#91;'day'&#93;}")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># テキストとパターンを定義</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;今日の日付は2023-04-20です。&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;</span><span style="color: #CE9178">(</span><span style="color: #569CD6">?P&lt;year&gt;</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{4}</span><span style="color: #CE9178">)</span><span style="color: #D16969">-</span><span style="color: #CE9178">(</span><span style="color: #569CD6">?P&lt;month&gt;</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{2}</span><span style="color: #CE9178">)</span><span style="color: #D16969">-</span><span style="color: #CE9178">(</span><span style="color: #569CD6">?P&lt;day&gt;</span><span style="color: #D16969">\d</span><span style="color: #D7BA7D">{2}</span><span style="color: #CE9178">)</span><span style="color: #D16969">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンに一致する部分を検索</span></span>
<span class="line"><span style="color: #D4D4D4">match = re.search(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> match:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># groupdict()メソッドを使用して名前付きキャプチャグループの情報を取得</span></span>
<span class="line"><span style="color: #D4D4D4">    date_info = match.groupdict()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;年: </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">date_info&#91;</span><span style="color: #CE9178">&apos;year&apos;</span><span style="color: #D4D4D4">&#93;</span><span style="color: #569CD6">}</span><span style="color: #CE9178">, 月: </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">date_info&#91;</span><span style="color: #CE9178">&apos;month&apos;</span><span style="color: #D4D4D4">&#93;</span><span style="color: #569CD6">}</span><span style="color: #CE9178">, 日: </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">date_info&#91;</span><span style="color: #CE9178">&apos;day&apos;</span><span style="color: #D4D4D4">&#93;</span><span style="color: #569CD6">}</span><span style="color: #CE9178">&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p>コード例で示した通り、パターンの前に<code>?P&lt;key&gt;</code>を追加するだけでOKです。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>(?P&lt;key>pattern)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">(</span><span style="color: #F44747">?</span><span style="color: #D4D4D4">P&lt;key&gt;pattern)</span></span></code></pre></div>



<p class="is-style-icon_announce">余談ですが、この<code>?P&lt;key&gt;</code>という構文は Django の urls.py で正規表現を使ったルーティングをする場合にも使われます。</p>



<p><code>start()</code>と<code>end()</code>は検索対象の文字列の中で、マッチした文字列の「最初の文字のインデックス番号」と「最後の文字のインデックス番号」を取得できます。</p>



<p>以下は “example” という文字列を検索対象として、”amp” というパターンを探した例です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


# テキストとパターンを定義
text = "example"
pattern = "amp"

# パターンに一致する部分を検索
match = re.search(pattern, text)

if match:
    # 一致の開始位置と終了位置
    print("一致の開始位置:", match.start())
    print("一致の終了位置:", match.end())
else:
    print("一致が見つかりませんでした。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># テキストとパターンを定義</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;example&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #CE9178">&quot;amp&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンに一致する部分を検索</span></span>
<span class="line"><span style="color: #D4D4D4">match = re.search(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> match:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># 一致の開始位置と終了位置</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致の開始位置:&quot;</span><span style="color: #D4D4D4">, match.start())</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致の終了位置:&quot;</span><span style="color: #D4D4D4">, match.end())</span></span>
<span class="line"><span style="color: #C586C0">else</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致が見つかりませんでした。&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p>print() 関数の結果は、以下となります。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>一致の開始位置: 2</li>



<li>一致の終了位置: 5</li>
</ul>
</div></div>



<p>最初の文字のインデックス番号を0として、何番目に対象の文字があるかを判断します。</p>



<p>今回の例では “amp” という文字の塊を検索していますから、以下のように文字の順番を取得してきています。</p>



<figure class="wp-block-table"><table><thead><tr><th>メソッド</th><th>対象文字</th><th>インデックス番号</th></tr></thead><tbody><tr><td>match.start()</td><td>a</td><td>2</td></tr><tr><td>match.end()</td><td>p</td><td>5</td></tr></tbody></table><figcaption class="wp-element-caption">match オブジェクトの出力結果</figcaption></figure>



<p>ここで得られた番号は、例えば特定の単語の前後にある文脈を取得する際などに使えます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


text = "This is an example. This example is interesting."
pattern = "example"

# パターンに一致する部分を検索
for match in re.finditer(pattern, text):
    # 一致の前後10文字を取得して表示
    # 開始位置が負の値にならないようにする
    start = max(match.start() - 10, 0)
    # 終了位置の後の10文字を取得
    end = match.end() + 10

    context = text&#91;start:end&#93;
    print(f"一致のコンテキスト: '{context}'")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;This is an example. This example is interesting.&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #CE9178">&quot;example&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンに一致する部分を検索</span></span>
<span class="line"><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> match </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> re.finditer(pattern, text):</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># 一致の前後10文字を取得して表示</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># 開始位置が負の値にならないようにする</span></span>
<span class="line"><span style="color: #D4D4D4">    start = </span><span style="color: #DCDCAA">max</span><span style="color: #D4D4D4">(match.start() - </span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># 終了位置の後の10文字を取得</span></span>
<span class="line"><span style="color: #D4D4D4">    end = match.end() + </span><span style="color: #B5CEA8">10</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    context = text&#91;start:end&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;一致のコンテキスト: &apos;</span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">context</span><span style="color: #569CD6">}</span><span style="color: #CE9178">&apos;&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p>テキストデータの処理や分析など、柔軟に行う際に有効です。</p>



<p><code>start()</code>と<code>end()</code>を同時に取得したい場合は、両方とも一度に取得できる<code>span()</code>メソッドを使うのが便利です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re

# テキストとパターンを定義
text = "example"
pattern = "amp"

# パターンに一致する部分を検索
match = re.search(pattern, text)

if match:
    # span()を使用して一致の開始位置と終了位置を取得
    start, end = match.span()
    print("一致の開始位置:", start)
    print("一致の終了位置:", end)
else:
    print("一致が見つかりませんでした。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># テキストとパターンを定義</span></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;example&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #CE9178">&quot;amp&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># パターンに一致する部分を検索</span></span>
<span class="line"><span style="color: #D4D4D4">match = re.search(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> match:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># span()を使用して一致の開始位置と終了位置を取得</span></span>
<span class="line"><span style="color: #D4D4D4">    start, end = match.span()</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致の開始位置:&quot;</span><span style="color: #D4D4D4">, start)</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致の終了位置:&quot;</span><span style="color: #D4D4D4">, end)</span></span>
<span class="line"><span style="color: #C586C0">else</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致が見つかりませんでした。&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p><code>match.span()</code>で得られるタプルをアンパッキングして、start, end で受け取っている形です。</p>



<p>正規表現を使う場合には、検索対象の文字列が膨大になる場合があります。</p>



<p>そうなると、できるだけパフォーマンスを落とさないようなコーディングを行うことが重要。</p>



<p>ここからは Python の re ライブラリのパフォーマンスアップに役立つヒントをお伝えしていきます。</p>



<p>同じパターンを何度も使う場合、パターンをコンパイルすることでパフォーマンスアップが期待できます。</p>



<p>コンパイルには<code>re.compile()</code>メソッドを使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


pattern = re.compile(r"\bexample\b")
matches = pattern.findall("This is an example.")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">pattern = re.compile(</span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;\bexample\b&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">matches = pattern.findall(</span><span style="color: #CE9178">&quot;This is an example.&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p>つまり「正規表現パターンから<code>re</code>オブジェクトに変換する作業（つまりコンパイル）」を一度で済ますことにより、同じことを繰り返すことを避けることができるのでパフォーマンスアップが期待できるということになります。</p>



<p>キャプチャグループとは、()の中を一つのグループとして後から各グループを参照したりできるようにするものです。</p>



<p>もしも「パターンにマッチしているかだけが知りたい」場合で、ヒットした具体的な文字列は関係ない場合、具体的な文字列を記憶しておく分だけリソースを使ってしまうことになります。</p>



<p>そのような場合に便利なのが、<code>(?:)</code>という記法です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># キャプチャグループを使用
pattern = re.compile(r"(example)")

# 非キャプチャグループを使用
pattern = re.compile(r"(?:example)")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955"># キャプチャグループを使用</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = re.compile(</span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;</span><span style="color: #CE9178">(</span><span style="color: #D16969">example</span><span style="color: #CE9178">)</span><span style="color: #D16969">&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 非キャプチャグループを使用</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = re.compile(</span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;</span><span style="color: #CE9178">(?:</span><span style="color: #D16969">example</span><span style="color: #CE9178">)</span><span style="color: #D16969">&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p>一つ目のパターンではexampleという文字列を記憶しますが、二つ目のパターンではマッチしているかどうかのみを記憶するのでexampleという具体的な文字列は記憶しません。</p>



<p>パターンオブジェクトの内容を最低限に抑えることによって、多少のパフォーマンスアップが望めるということになります。</p>



<p>正規表現では、できるだけ多くの文字列にヒットさせる「最大一致量子子（Greedy Quantifiers）」と、できるだけ少ない文字列にヒットさせようとする「最小一致量子子（Non-Greedy or Lazy Quantifiers）」の二つがあります。</p>



<p>メタ文字で言うと、以下のような分類です。</p>



<figure class="wp-block-table"><table><thead><tr><th>量子子</th><th>メタ文字の例</th></tr></thead><tbody><tr><td>最大一致量子子</td><td><code>*</code>や<code>+</code>など</td></tr><tr><td>最小一致量子子</td><td><code>*?</code>や<code>+?</code>など</td></tr></tbody></table><figcaption class="wp-element-caption">量子子とメタ文字の関係</figcaption></figure>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 最大一致
pattern = re.compile(r"&lt;.*>")

# 最小一致
pattern = re.compile(r"&lt;.*?>")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955"># 最大一致</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = re.compile(</span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;&lt;.</span><span style="color: #D7BA7D">*</span><span style="color: #D16969">&gt;&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 最小一致</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = re.compile(</span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;&lt;.</span><span style="color: #D7BA7D">*?</span><span style="color: #D16969">&gt;&quot;</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p>最大一致量子子を使ってしまうと、パターンを見つける際に大量の不要なマッチング検索を行うことになってしまいます。</p>



<p>極力不要なマッチング検索を行わずにパフォーマンスを上げるため、最小一致量子子が推奨されます。</p>



<p>正規表現が文字列の先頭や末尾からの一致を調べるときには、<code>^</code>や<code>$</code>を使用しましょう。</p>



<p>これにより、検索範囲が限定されて不要な検索を省略できます。</p>



<p><code>.</code>を使うと「任意の1文字に一致」という意味になり便利です。</p>



<p>ところが、これでは検索の際に選択肢が多すぎて検索すべきパターンが大量に存在することになります。</p>



<p>対策として、<code>[a-zA-Z]</code>などの「できる限り具体的な文字セット」を使用することで、検索範囲が限定されパフォーマンスが向上します。</p>



<p>ここまでで Python を使った正規表現テクニックは十分なレベルに達していると思いますが、ここからは「さらに一歩進んだアドバンス的な内容」をご紹介します。</p>



<p>目視では煩雑になってしまうので、積極的にツールを使いましょう。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ol class="wp-block-list">
<li><strong>Regex101：</strong>
<ul class="wp-block-list">
<li>ウェブベースの正規表現テスターで、リアルタイムでマッチング結果を確認できます。</li>
<li>Pythonの他、JavaScript、PHP、Goの正規表現もサポートしています。</li>
<li>正規表現の各部分についての詳細な説明が表示され、学習ツールとしても優れています。</li>
<li>URL: <a href="https://regex101.com/">https://regex101.com/</a></li>
</ul>
</li>



<li><strong>RegExr：</strong>
<ul class="wp-block-list">
<li>ウェブベースの別の強力な正規表現テストツールです。</li>
<li>正規表現のパターンにマッチするテキストのハイライト表示、正規表現の部分ごとの説明などの機能を提供します。</li>
<li>URL: <a href="https://regexr.com/">https://regexr.com/</a></li>
</ul>
</li>



<li><strong>Pythex：</strong>
<ul class="wp-block-list">
<li>Pythonの正規表現に特化したシンプルなオンラインテスターです。</li>
<li>リアルタイムでのマッチング結果表示機能を提供し、簡単に正規表現を試すことができます。</li>
<li>URL: <a href="https://pythex.org/">https://pythex.org/</a></li>
</ul>
</li>
</ol>
</div></div>



<p>パターンマッチングさせるための正規表現の例を二つほど挙げます。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>携帯電話番号</li>



<li>メールアドレス</li>
</ul>
</div></div>



<p>現在では ChatGPT などに条件を教えれば正規表現を組んでくれますので、生成系 AI もフルに活用して対応してみてください。</p>



<h3 class="wp-block-heading">携帯電話番号</h3>



<p>正規表現としては、以下になります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>mobile_phone_no = r"0&#91;789&#93;0-\d{4}-\d{4}"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">mobile_phone_no = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;0</span><span style="color: #CE9178">&#91;</span><span style="color: #D16969">789</span><span style="color: #CE9178">&#93;</span><span style="color: #D16969">0-\d</span><span style="color: #D7BA7D">{4}</span><span style="color: #D16969">-\d</span><span style="color: #D7BA7D">{4}</span><span style="color: #D16969">&quot;</span></span></code></pre></div>



<p>以下に要素を分解して解説します。</p>



<figure class="wp-block-table"><table><thead><tr><th>正規表現</th><th>内容</th></tr></thead><tbody><tr><td>0</td><td>数字の “0” から始まる</td></tr><tr><td>[789]</td><td>キャリアコードの2桁目が “7, 8, 9” である</td></tr><tr><td>0</td><td>キャリアコードの3桁目が “0” である</td></tr><tr><td>-\d{4}</td><td>ハイフンに続いて4桁の数字がある</td></tr><tr><td>-\d{4}</td><td>再びハイフンに続いて4桁の数字がある</td></tr></tbody></table><figcaption class="wp-element-caption">携帯電話番号の正規表現</figcaption></figure>



<h3 class="wp-block-heading">メールアドレス</h3>



<p>基本的な正規表現を示すと、以下のとおりです。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>mail_address = r"&#91;a-zA-Z0-9._%+-&#93;+@&#91;a-zA-Z0-9.-&#93;+\.&#91;a-zA-Z&#93;{2,}"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">mail_address = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;</span><span style="color: #CE9178">&#91;</span><span style="color: #D16969">a-zA-Z0-9._%+-</span><span style="color: #CE9178">&#93;</span><span style="color: #D7BA7D">+</span><span style="color: #D16969">@</span><span style="color: #CE9178">&#91;</span><span style="color: #D16969">a-zA-Z0-9.-</span><span style="color: #CE9178">&#93;</span><span style="color: #D7BA7D">+\.</span><span style="color: #CE9178">&#91;</span><span style="color: #D16969">a-zA-Z</span><span style="color: #CE9178">&#93;</span><span style="color: #D7BA7D">{2,}</span><span style="color: #D16969">&quot;</span></span></code></pre></div>



<p>要素分解すると、以下のようになります。</p>



<figure class="wp-block-table"><table><thead><tr><th>正規表現</th><th>内容</th></tr></thead><tbody><tr><td>[a-zA-Z0-9._%+-]+</td><td>英数字、ドット、アンダースコア、パーセント、プラス、マイナスが1文字以上続く</td></tr><tr><td>@</td><td>@ 記号に一致</td></tr><tr><td>[a-zA-Z0-9.-]+</td><td>ドメイン名で使用可能な文字列に一致</td></tr><tr><td>.</td><td>. 記号に一致</td></tr><tr><td>[a-zA-Z]{2,}</td><td>TLD で許可される文字列が少なくとも2文字以上続く</td></tr></tbody></table><figcaption class="wp-element-caption">メールアドレスの正規表現</figcaption></figure>



<p class="is-style-icon_info">RFC 5322 に完全準拠するものではないことにご注意ください。</p>



<h2 id="flag" class="wp-block-heading">フラグの使用</h2>



<p>re ライブラリでは正規表現の動作を制御する「フラグ」と言うものが用意されています。</p>



<p>フラグを利用することで、以下のようなことが可能です。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>大文字・小文字の無視</li>



<li>複数行モードの有効化</li>



<li>ドットが改行にもマッチするようにする</li>
</ul>
</div></div>



<p>一つずつ具体的にみていきましょう。</p>



<h3 class="wp-block-heading">大文字・小文字の無視</h3>



<p>大文字・小文字を無視してマッチングを行うには<code>re.IGNORECASE</code> を使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re

text = "This is a Sample text."
pattern = r"sample"

# 大文字小文字を区別せずに検索
match = re.search(pattern, text, re.IGNORECASE)
if match:
    print("一致が見つかりました:", match.group())</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;This is a Sample text.&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;sample&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 大文字小文字を区別せずに検索</span></span>
<span class="line"><span style="color: #D4D4D4">match = re.search(pattern, text, re.IGNORECASE)</span></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> match:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;一致が見つかりました:&quot;</span><span style="color: #D4D4D4">, match.group())</span></span></code></pre></div>



<p>上記のコードでは “Sample” と頭文字が大文字になっていますが、<code>re.search()</code>メソッドの第三引数に<code>re.IGNORECASE</code>としていることからマッチしているとみなされます。</p>



<h3 class="wp-block-heading">複数行モードの有効化</h3>



<p><code>re.MULTILINE</code>を使うことで、<code>^</code>と<code>$</code>が、文字列の開始や終了だけでなく、各行の開始や終了にもマッチするようになります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re

text = "This is a Sample text."
pattern = r"sample"

# 複数行モードを有効にして、各行の開始でマッチングを試みる
multi_line_text = "start\nstart another"
matches = re.findall(r"^start", multi_line_text, re.MULTILINE)
print("マッチした行の数:", len(matches))</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;This is a Sample text.&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;sample&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 複数行モードを有効にして、各行の開始でマッチングを試みる</span></span>
<span class="line"><span style="color: #D4D4D4">multi_line_text = </span><span style="color: #CE9178">&quot;start</span><span style="color: #D7BA7D">\n</span><span style="color: #CE9178">start another&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">matches = re.findall(</span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;^start&quot;</span><span style="color: #D4D4D4">, multi_line_text, re.MULTILINE)</span></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;マッチした行の数:&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #DCDCAA">len</span><span style="color: #D4D4D4">(matches))</span></span></code></pre></div>



<p>上記では改行コードを挟んで１行目も２行目も “start” で始まっているので、<code>len(matches)</code>は<code>2</code>となります。</p>



<h3 class="wp-block-heading">ドットが改行にもマッチするようにする</h3>



<p><code>re.DOTALL</code>を使うと、メタ文字<code>.</code>が改行コードにもマッチするようになります。</p>



<p>デフォルトでは、<code>.</code>は改行文字を除く任意の単一文字にヒットします。これを拡張するようなフラグになります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re

text = "Hello\nWorld"
pattern = r".+"

# re.DOTALL フラグあり
matches = re.findall(pattern, text, re.DOTALL)
print("re.DOTALL フラグあり:", matches)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;Hello</span><span style="color: #D7BA7D">\n</span><span style="color: #CE9178">World&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;.</span><span style="color: #D7BA7D">+</span><span style="color: #D16969">&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># re.DOTALL フラグあり</span></span>
<span class="line"><span style="color: #D4D4D4">matches = re.findall(pattern, text, re.DOTALL)</span></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;re.DOTALL フラグあり:&quot;</span><span style="color: #D4D4D4">, matches)</span></span></code></pre></div>



<p>上記でre.DOTALLをつけない場合には “Hello” にしかマッチしません。</p>



<p>久々に正規表現を使うとハマるポイントなので、うまくいかない場合にはこの<code>re.DOTALL</code>を思い出しましょう。</p>



<p>以下の事項に気をつけるとよいでしょう。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li><strong>最初から複雑なものを作ろうとしない</strong>
<ul class="wp-block-list">
<li>段階的に組んでいくことで、どの部分が期待と違うかわかる</li>
</ul>
</li>



<li><strong>部分的にテスト</strong>
<ul class="wp-block-list">
<li>まずはセクションに分けて個別にテスト</li>
<li>最後に全体を組み合わせる</li>
</ul>
</li>



<li><strong>特殊文字のエスケープを確認</strong>
<ul class="wp-block-list">
<li>特殊文字（<code>.</code>、<code>*</code>、<code>?</code>など）を意識する</li>
<li>リテラルとして使うなら、エスケープされているか確認</li>
</ul>
</li>



<li><strong>フラグを意識する</strong>
<ul class="wp-block-list">
<li><a href="#flag">本記事内のこちらの箇所</a>を確認しましょう</li>
</ul>
</li>
</ul>
</div></div>



<p>あるパターンの前後に「特定の文字列」があるかを確認する方法です。</p>



<p>細分すると、以下の4パターンに分けられます。</p>



<figure class="wp-block-table"><table><thead><tr><th>種類</th><th>記号</th><th>役割</th></tr></thead><tbody><tr><td>肯定的先読み</td><td><code>(?=パターン)</code></td><td>直後にパターンが存在する位置にマッチ</td></tr><tr><td>否定的先読み</td><td><code>(?!パターン)</code></td><td>直後にパターンが存在しない位置にマッチ</td></tr><tr><td>肯定的後読み</td><td><code>(?&lt;=パターン)</code></td><td>直前にパターンが存在する位置にマッチ</td></tr><tr><td>否定的後読み</td><td><code>(?&lt;!パターン)</code></td><td>直前にパターンが存在しない位置にマッチ</td></tr></tbody></table><figcaption class="wp-element-caption">先読みと後読み</figcaption></figure>



<p>サンプルコードを交えて、より突っ込んで解説します。</p>



<h3 class="wp-block-heading">肯定的先読み</h3>



<p>“John” の直後に “Doe” が続いた場合のみ、”John” にマッチします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re


text = "John Doe will attend, but Jane Doe will not."
pattern = r"John(?= Doe)"
matches = re.findall(pattern, text)

print(matches)  # &#91;"John"&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;John Doe will attend, but Jane Doe will not.&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;John</span><span style="color: #D4D4D4">(?=</span><span style="color: #D16969"> Doe</span><span style="color: #D4D4D4">)</span><span style="color: #D16969">&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">matches = re.findall(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(matches)  </span><span style="color: #6A9955"># &#91;&quot;John&quot;&#93;</span></span></code></pre></div>



<p>“Jane” にはマッチしません。</p>



<h3 class="wp-block-heading">否定的先読み</h3>



<p>以下の場合は、”Jane” の後に “Doe” が続かない場合のみ、”Jane” にマッチします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re

text = "John Doe will attend, but Jane Doe will not."
pattern = r"Jane(?! Doe)"
matches = re.findall(pattern, text)

print(matches)  # []</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;John Doe will attend, but Jane Doe will not.&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;Jane</span><span style="color: #D4D4D4">(?!</span><span style="color: #D16969"> Doe</span><span style="color: #D4D4D4">)</span><span style="color: #D16969">&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">matches = re.findall(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(matches)  </span><span style="color: #6A9955"># []</span></span></code></pre></div>



<p>ところが “Jane” のあとは “Doe” しかないので、ヒットしません。</p>



<h3 class="wp-block-heading">肯定後読み</h3>



<p>“John” の後に “Doe” がくると、”Doe” にマッチします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re

text = "John Doe and Jane Doe"
pattern = r"(?&lt;=John )Doe"
matches = re.findall(pattern, text)

print(matches)  # &#91;'Doe'&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;John Doe and Jane Doe&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;</span><span style="color: #D4D4D4">(?&lt;=</span><span style="color: #D16969">John </span><span style="color: #D4D4D4">)</span><span style="color: #D16969">Doe&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">matches = re.findall(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(matches)  </span><span style="color: #6A9955"># &#91;&apos;Doe&apos;&#93;</span></span></code></pre></div>



<p>結果は “Doe” となります。</p>



<h3 class="wp-block-heading">否定的後読み</h3>



<p>“John” の後に “Doe” がこない場合に、”Doe” にマッチします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import re

text = "John Doe and Jane Doe"
pattern = r"(?&lt;!John )Doe"
matches = re.findall(pattern, text)

print(matches)  # &#91;'Doe'&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> re</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;John Doe and Jane Doe&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">pattern = </span><span style="color: #569CD6">r</span><span style="color: #D16969">&quot;</span><span style="color: #D4D4D4">(?&lt;!</span><span style="color: #D16969">John </span><span style="color: #D4D4D4">)</span><span style="color: #D16969">Doe&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">matches = re.findall(pattern, text)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">print</span><span style="color: #D4D4D4">(matches)  </span><span style="color: #6A9955"># &#91;&apos;Doe&apos;&#93;</span></span></code></pre></div>



<p>上記では “Jane Doe” の “Doe” がマッチします。</p>



<p>複雑な正規表現を利用する場合には「ReDoS（正規表現拒否サービス）攻撃」に気をつける必要があります。</p>



<p>ReDoS 攻撃とは、攻撃者が悪意のある文字列を送信して正規表現エンジンを過剰に消費させ、サービスの遅延や停止させるものです。</p>



<p>これを防ぐための対策をいくつかご紹介します。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li><strong>複雑な正規表現は使わない</strong>
<ul class="wp-block-list">
<li>多重量子子を避ける ex) .*</li>
<li>量子子のネストを避ける ex) (a+)+</li>
</ul>
</li>



<li><strong>タイムアウトの設定</strong>
<ul class="wp-block-list">
<li>正規表現エンジンの長時間稼働を防ぐ</li>
<li>処理時間の上限を設定する</li>
</ul>
</li>



<li><strong>入力のサニタイズ</strong>
<ul class="wp-block-list">
<li>正規表現エンジンで値を処理する前に検証する</li>
</ul>
</li>



<li><strong>パフォーマンステスト</strong>
<ul class="wp-block-list">
<li>特定の入力に対する処理時間を確認しておく</li>
</ul>
</li>
</ul>
</div></div>



<p>Web アプリケーションを作成する際などには、上記に気をつけてみてください。</p>



<p>最後に公式ドキュメントをはじめ、理解の役にたつページをご紹介します。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li><a href="https://docs.python.org/ja/3/library/re.html">re — 正規表現操作</a></li>



<li><a href="https://docs.python.org/ja/3/howto/regex.html">正規表現 HOWTO</a></li>



<li><a href="https://www-creators.com/tool/regex-checker#google_vignette">正規表現チェッカー</a></li>
</ul>
</div></div>



<p>本ブログでは他にも Python に関する情報を発信しています。</p>



<p>ぜひ、別記事もご覧になってみてください。</p>



<p><a href="https://cfxlog.com/category/python/">» 参考：CFXLOG – Python 記事の一覧へ</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】パッケージ管理ツール pip の使い方</title>
		<link>https://cfxlog.com/python-pip/</link>
		
		<dc:creator><![CDATA[CFXLOG]]></dc:creator>
		<pubDate>Sat, 15 Aug 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[環境構築]]></category>
		<guid isPermaLink="false">https://cfxlog.com/?p=5253</guid>

					<description><![CDATA[Python の魅力の一つが豊富な外部ライブラリやフレームワークの存在です。 これらの外部ライブラリなどをインストールするには「パッケージ管理ツール」が必要であり、その一つが今回紹介する pip です。 Python を [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group is-style-crease"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>外部ライブラリやフレームワークを使いたい！</li>
</ul>
</div></div>



<p>Python の魅力の一つが豊富な外部ライブラリやフレームワークの存在です。</p>



<p>これらの外部ライブラリなどをインストールするには「パッケージ管理ツール」が必要であり、その一つが今回紹介する pip です。</p>



<p>Python をインストールすると、基本的には pip も一緒にインストールされます。<br/>なので、最も手軽に使えるパッケージ管理ツールといえます。</p>



<p>今回はそんな pip の基本的な使い方をご紹介します。</p>




<h2 class="wp-block-heading">pipの基本コマンド</h2>


<p>pip を使う際に頻出のコマンドをまとめました。</p>



<p>一般的な操作であれば、ここでご紹介するコマンドを覚えておけば十分かと思います。</p>



<p>requests ライブラリをインストールする場合は以下です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip install requests</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> install</span><span style="color:#CE9178"> requests</span></span></code></pre></div>



<p>二つ以上のライブラリをインストールする場合には、半角スペースを開けて列挙します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip install requests pandas</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> install</span><span style="color:#CE9178"> requests</span><span style="color:#CE9178"> pandas</span></span></code></pre></div>



<p>バージョンを指定する場合は==に続けてバージョンを指定します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip install requests==2.31.0</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> install</span><span style="color:#CE9178"> requests==</span><span style="color:#B5CEA8">2.31.0</span></span></code></pre></div>



<p><code>--upgrade pip</code>コマンドを実行することで、最新版にアップデートできます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip install --upgrade requests</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> install</span><span style="color:#569CD6"> --upgrade</span><span style="color:#CE9178"> requests</span></span></code></pre></div>



<p class="is-style-icon_announce"><code>pip install -U requests</code>としても結果は同じです。</p>



<p>requests ライブラリをアンインストールする場合は以下のコマンドになります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip uninstall requests</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> uninstall</span><span style="color:#CE9178"> requests</span></span></code></pre></div>



<p>複数ライブラリの削除は、半角スペースを挟んで行います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip uninstall requests pandas</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> uninstall</span><span style="color:#CE9178"> requests</span><span style="color:#CE9178"> pandas</span></span></code></pre></div>



<p>インストール済みのパッケージの確認には<code>pip list</code>コマンドを使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip list</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> list</span></span></code></pre></div>



<p>現在インストールされているパッケージリストを requirements.txt に書き出すには、以下のコマンドを実行します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip freeze &gt; requirements.txt</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> freeze</span><span style="color:#D4D4D4"> > </span><span style="color:#CE9178">requirements.txt</span></span></code></pre></div>



<p>まったく別の環境でインストールしたパッケージを復元したい場合には、以下のコマンドで復元できます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip install -r requirements.txt</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> install</span><span style="color:#569CD6"> -r</span><span style="color:#CE9178"> requirements.txt</span></span></code></pre></div>



<p class="is-style-icon_announce">単に<code>pip freeze</code>とすると、パッケージのリストがテキストで標準出力されます。<br/>これを<code>&gt; requirements.txt</code>とすることで、テキストをファイルとして出力できるようになります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip check</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> check</span></span></code></pre></div>




<h2 class="wp-block-heading">依存性の解決とPoetry</h2>


<p>ライブラリ A とライブラリ B が共に、ライブラリ C のインストールを要求している場合を考えてみましょう。</p>



<p>同じライブラリ C といっても、要求しているバージョンが違う場合があります。<br/>そのような場合には、ライブラリ C のバージョンを開発者が決めうちで指定する必要がある場合があります。</p>



<p>これが依存性の解決です。</p>



<p>pip にはこの依存性の解決を行う機能がなく、自動で行いたい場合には Poetry などの別のパッケージ管理ツールを使うことになります。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://cfxlog.com/wp-content/uploads/2026/03/python-poetry-guide-300x158.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://cfxlog.com/python-poetry-guide/">【Poetry使い方から仮想環境の削除まで】Pythonパッケージ管理の完全ガイド</a>
						<span class="p-blogCard__excerpt">Poetry ってどんなもの？ インストール方法が知りたい 使い方を詳しく教えて欲しい 最近では、pip の代わりに Poetry を導入する Python プロジェクトが増えてきました&#8230;</span>					</div>
				</div>
			</div>
		</div>



<h2 class="wp-block-heading">pip自体をアップグレードする</h2>


<p>外部ライブラリと同様、pip そのものも pip でアップグレードできます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip install --upgrade pip</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> install</span><span style="color:#569CD6"> --upgrade</span><span style="color:#CE9178"> pip</span></span></code></pre></div>



<p class="is-style-icon_info">pip 自体も pip で管理されています。</p>




<h2 class="wp-block-heading">pipが入っていない場合の対処法</h2>


<p>最新の Python なら pip は自動的にインストールされます。</p>



<p>ただし少し古めのバージョンをお使い場合などには、pip が付属していない場合があります。</p>



<p>以下、その場合の対応方法をご紹介します。</p>



<h3 class="wp-block-heading">pip の存在を確認する</h3>



<p>まずは、以下のコマンドを実行します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>python -m pip --version</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">python</span><span style="color:#569CD6"> -m</span><span style="color:#CE9178"> pip</span><span style="color:#569CD6"> --version</span></span></code></pre></div>



<p>これにより、現在の Python インタープリタに pip があるか確認できます。</p>



<h3 class="wp-block-heading">get-pip.py</h3>



<p>続いて、get-pip.py スクリプトをダウンロードします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>wget https://bootstrap.pypa.io/get-pip.py</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">wget</span><span style="color:#CE9178"> https://bootstrap.pypa.io/get-pip.py</span></span></code></pre></div>



<h3 class="wp-block-heading">pip のインストール</h3>



<p>ダウンロードした get-pip.py スクリプトを実行して、pip をインストールします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>python3 get-pip.py</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">python3</span><span style="color:#CE9178"> get-pip.py</span></span></code></pre></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】リスト内包表記と辞書内包表記を基礎を解説！</title>
		<link>https://cfxlog.com/python-naihohyouki/</link>
		
		<dc:creator><![CDATA[CFXLOG]]></dc:creator>
		<pubDate>Fri, 14 Aug 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://cfxlog.com/?p=5252</guid>

					<description><![CDATA[<p><img src="https://cfxlog.com/wp-content/uploads/2026/08/python-naihohyouki-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>このような疑問にお答えします。 Python では内包表記がごく簡単に書けるため、Python を象徴するものとして挙げられることが多いです。（他の言語では存在はしている） この内包表記ですが、簡潔に書ける一方で初学者は [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://cfxlog.com/wp-content/uploads/2026/08/python-naihohyouki-1024x538.jpg" class="webfeedsFeaturedVisual" /></p>
<div class="wp-block-group is-style-crease"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>内包表記って書き方がよくわからない…</li>



<li>コードを見ても意味がわからない！</li>
</ul>
</div></div>



<p>このような疑問にお答えします。</p>



<p>Python では内包表記がごく簡単に書けるため、Python を象徴するものとして挙げられることが多いです。（他の言語では存在はしている）</p>



<p>この内包表記ですが、簡潔に書ける一方で初学者は以下のように混乱しがちです。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>内包表記を組み立てられない</li>



<li>内包表記を読んで意味を理解できない</li>
</ul>
</div></div>



<p>これらは、内包表記の書き方をしっかりと理解すれば解決できます。</p>



<p>本記事では内包表記について丁寧に解説していきますので、不安がある方はぜひじっくりと読み進めてみてください！</p>



<p>内包表記は、新たにリストや辞書などを生成するための方法です。</p>



<p><code>for</code>ループと<code>if</code>ステートメントを含むコードを一行（ワンライナー）で書けるのが魅力。</p>



<p class="is-style-icon_info">ただし、あまりにも複雑なロジックは<code>for</code>文で書くことを推奨します。極端に読みづらくなってしまうためです。</p>



<p>例えば、次のようなfor文を使ったコードがあったとします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>evens_squared = []
for x in range(10):
    if x % 2 == 0:
        evens_squared.append(x**2)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">evens_squared = []</span></span>
<span class="line"><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> x </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">range</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> x % </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> == </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">        evens_squared.append(x**</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<p>このコードでは0から9までの数字のうち偶数だけを抽出し、要素を二乗してリストに格納していくものになります。</p>



<p>これをリスト内包表記で書き換えると、以下になります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>evens_squared = &#91;x**2 for x in range(10) if x % 2 == 0&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">evens_squared = &#91;x**</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> x </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">range</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> x % </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> == </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">&#93;</span></span></code></pre></div>



<p>この段階では意味不明だと思いますが、とにかく「一行で簡潔に書けるのだ！」ということをご理解いただければと思います。</p>



<figure class="wp-block-image size-large"><img alt="" data-aspectratio="1024/538" decoding="async" height="538" src="https://cfxlog.com/wp-content/uploads/2026/07/python-naihohyouki-3-1024x538-1.jpg" width="1024"/></figure>



<p>ここからは特定の要素を持つ新たなリストを作成する、リスト内包表記の使い方をご説明します。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>リスト内包表記の基本的な書き方</li>



<li>複数の条件を持つリスト内包表記の書き方</li>
</ul>
</div></div>



<p>順番にレベルアップしていきますので、順に解説していきます。</p>



<p>リスト内包表記の文法は以下のようになります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>new_list = &#91;expression for item in iterable if condition&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">new_list = &#91;expression </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> item </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> iterable </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> condition&#93;</span></span></code></pre></div>



<p><code>if</code>以降は必須ではありません。</p>



<p>まずは単純な例として、<code>0</code>から<code>9</code>までの数値の2乗した数値を順次リストに加えたい場合を考えます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>squares = &#91;x**2 for x in range(10)&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">squares = &#91;x**</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> x </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">range</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">)&#93;</span></span></code></pre></div>



<p>コードの読み方は以下の通りです。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li><code>for x in range(10)</code>: <code>x</code>に<code>0</code>~<code>9</code>まで順次代入する</li>



<li><code>x**2</code>: xに代入された数値の二乗した数値をリストに加える</li>
</ul>
</div></div>



<p><code>squares</code>の内容は以下となります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&#91;0, 1, 4, 9, 16, 25, 36, 49, 64, 81&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">&#91;</span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">4</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">9</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">16</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">25</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">36</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">49</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">64</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">81</span><span style="color: #D4D4D4">&#93;</span></span></code></pre></div>



<p>続いて、if文を加えた例を考えてみましょう。</p>



<p><code>0</code>から<code>9</code>までの数値の中から<strong>「偶数だけ」を取り出し</strong>、その値に2乗してリストに加えたい場合は以下になります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>squares = &#91;x**2 for x in range(10) if x % 2 == 0&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">squares = &#91;x**</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> x </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">range</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> x % </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> == </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">&#93;</span></span></code></pre></div>



<p>読み方は以下の通りです。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li><code>for x in range(10)</code>: <code>0</code>から<code>9</code>までが順に<code>x</code>に入る</li>



<li><code>if x % 2 == 0</code>: <code>x</code>の値が<code>2</code>で割り切れれば次に進む</li>



<li><code>x**2</code>: <code>x</code>を二乗してリストの要素に加える</li>
</ul>
</div></div>



<p>初見だとちょっと読むのが大変ですが、このような複雑なロジックをワンライナーで書けるのは大きな魅力です。</p>



<p>複数条件を持つ内包表記の場合は、<code>if</code>節内に<code>and</code>や<code>or</code>などを加えます。</p>



<p>イメージが湧きやすいように、具体例を挙げて解説します。</p>



<h3 class="wp-block-heading"><code>and</code>を使った具体例</h3>



<p><code>0</code>から<code>99</code>までの数字のうち、<code>3</code>で割り切れ、かつ（<code>and</code>）<code>5</code>より大きい数の二乗をリストとして生成したい場合は以下になります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>result = &#91;x**2 for x in range(100) if x % 3 == 0 and x > 5&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">result = &#91;x**</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> x </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">range</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">100</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> x % </span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> == </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">and</span><span style="color: #D4D4D4"> x &gt; </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4">&#93;</span></span></code></pre></div>



<h3 class="wp-block-heading">orを使った例</h3>



<p><code>0</code>から<code>99</code>までの数で、<code>2</code>で割り切れるか、または（<code>or</code>）<code>9</code>で割り切れる数をリストに入れる場合は以下になります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>result = &#91;x for x in range(100) if x % 2 == 0 or x % 9 == 0&#93;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">result = &#91;x </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> x </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">range</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">100</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> x % </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> == </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">or</span><span style="color: #D4D4D4"> x % </span><span style="color: #B5CEA8">9</span><span style="color: #D4D4D4"> == </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">&#93;</span></span></code></pre></div>



<p>リスト内包表記の辞書版が「辞書内包表記」です。</p>



<p>特定のキーとバリューを持つ新たな辞書を作成する方法になります。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>辞書内包表記の基本的な書き方</li>



<li>条件を加えた辞書内包表記</li>
</ul>
</div></div>



<p>順番にレベルアップしていきますので、順に解説していきます。</p>



<p>リストと同様、辞書にも内包表記があります。</p>



<p>基本的な書き方は以下の通り。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>new_dict = {key_expression: value_expression for item in iterable if condition}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">new_dict = {key_expression: value_expression </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> item </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> iterable </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> condition}</span></span></code></pre></div>



<p>例として、ある文字列に含まれる各文字の出現回数を数えるものを示します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>text = "hello"
char_count = {char: text.count(char) for char in text}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;hello&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">char_count = {char: text.count(char) </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> char </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> text}</span></span></code></pre></div>



<p>読み方としては、以下のようになります。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li><code>for char in text</code>: 文字列 “hello” を1文字ずつ<code>char</code>に代入</li>



<li><code>char: text.count(char)</code>: それぞれの文字 <code>char</code> をキーとして、その文字が文字列 “hello” に出現する回数をバリューとする辞書を作成</li>
</ul>
</div></div>



<p>実行すると、以下のような出力結果が得られます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>{'h': 1, 'e': 1, 'l': 2, 'o': 1}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">{</span><span style="color: #DCDCAA">&apos;h&apos;</span><span style="color: #DCDCAA">:</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #CE9178">,</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&apos;e&apos;:</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #CE9178">,</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&apos;l&apos;:</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">2</span><span style="color: #CE9178">,</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&apos;o&apos;:</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #CE9178">}</span></span></code></pre></div>



<p>先ほどの例では<code>if</code>節なしのシンプルなものでしたので、ここでは条件をつけた内包表記の書き方をご紹介します。</p>



<h3 class="wp-block-heading">特定の条件を満たす要素のみを含む辞書を作成</h3>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 0から9までの数字の中で、奇数のみをキーとし、その平方を値とする辞書を作成
odd_squares = {x: x**2 for x in range(10) if x % 2 != 0}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955"># 0から9までの数字の中で、奇数のみをキーとし、その平方を値とする辞書を作成</span></span>
<span class="line"><span style="color: #D4D4D4">odd_squares = {x: x**</span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> x </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">range</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">10</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> x % </span><span style="color: #B5CEA8">2</span><span style="color: #D4D4D4"> != </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">}</span></span></code></pre></div>



<p><code>0</code>から<code>9</code>の中で「奇数のみの値」をキー、「それぞれの数値の二乗」をバリューとして辞書に格納します。</p>



<h3 class="wp-block-heading">例2: 文字列内の特定の文字をカウントして辞書を作成</h3>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>text = "hello world"
# text から母音のみを抽出し、それぞれの出現回数をカウント
vowel_counts = {char: text.count(char) for char in text if char in "aiueo"}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">text = </span><span style="color: #CE9178">&quot;hello world&quot;</span></span>
<span class="line"><span style="color: #6A9955"># text から母音のみを抽出し、それぞれの出現回数をカウント</span></span>
<span class="line"><span style="color: #D4D4D4">vowel_counts = {char: text.count(char) </span><span style="color: #C586C0">for</span><span style="color: #D4D4D4"> char </span><span style="color: #C586C0">in</span><span style="color: #D4D4D4"> text </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> char </span><span style="color: #569CD6">in</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;aiueo&quot;</span><span style="color: #D4D4D4">}</span></span></code></pre></div>



<p><code>text</code>のうち「母音に含まれる文字」をキー、「その出現回数」をバリューとして辞書に格納します。</p>



<p>ここでは内包表記について、以下のようなアドバンス的な内容を解説します。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>内包表記のパフォーマンスについて</li>



<li>内包表記のベストプラクティスについて</li>
</ul>
</div></div>



<p>それぞれ解説していきます。</p>



<p>通常、内包表記は<code>for</code>ループより高速です。</p>



<p>これは Python の内部最適化によるもので、内包表記のコードは C 言語レベルで直接実行されるために関数呼び出しのオーバーヘッドが減ります。</p>



<p>特にリストや辞書の生成では、内包表記を使うと明らかにパフォーマンスが上がる。</p>



<p>ただし、複雑な内包表記はコードが非常に読みづらくなってしまうので、いくらパフォーマンスが上がったとしても可読性を重視して<code>for</code>ループで書くべきシーンは多くあります。</p>



<p>内包表記を上手に使うため、以下の点に注意していきましょう。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>単純なロジックに限定して使用</li>



<li>可読性を重視する</li>
</ul>
</div></div>



<p>一つずつ、解説していきます。</p>



<h3 class="wp-block-heading">単純なロジックに限定して使用</h3>



<p>内包表記は「単一のループ」と「簡単な条件」に向いた表記方法です。</p>



<p>ネストされたループや複雑な条件式を含む場合には、通常の<code>for</code>ループの方が断然読みやすいくなります。</p>



<p>無理して内包表記とするのではなく、保守性を考えて<code>for</code>ループを使うべきこともあると理解しておきましょう。</p>



<h3 class="wp-block-heading">可読性を重視する</h3>



<p>内包表記を覚えると、なんでもかんでも内包表記を使いたくなるものです。</p>



<p>ところが、先にも触れたように複雑なロジックを内包表記に落とし込もうとすると可読性が著しく損なわれます。</p>



<p>そのような場合にはそもそもfor文を使ってコードを組むか、コメントを加えることで後から読んでも意味がわかるように配慮しておくことが重要です。</p>



<p>以上の内容をご理解いただければ、内包表記の基礎はバッチリだと思います。</p>



<p>初見ではとっつきにくいかと思いますが、少しずつ手を動かして書いていけば必ず「書ける」「読める」ようになります。</p>



<p>ぜひ、めげずにトライしてみてくださいね。</p>



<p>当ブログでは他にも Python 関連の記事をアップしていますので、よろしければ合わせてご覧になってみてください！</p>



<p><a href="https://cfxlog.com/category/python/">» 参考：CFXLOG – Python に関する記事一覧</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】インポートの方法徹底解説！【import, from】</title>
		<link>https://cfxlog.com/python-import/</link>
		
		<dc:creator><![CDATA[CFXLOG]]></dc:creator>
		<pubDate>Thu, 13 Aug 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://cfxlog.com/?p=5251</guid>

					<description><![CDATA[Python ではインポートを行うことで、機能拡張ができます。 本記事ではインポートに必要な知識を網羅的に解説します。 標準ライブラリとサードパーティライブラリ インポートの方法には２つのパターンがあります。 手順がやや [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group is-style-crease"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>ライブラリのインポート方法が知りたい！</li>
</ul>
</div></div>



<p>Python ではインポートを行うことで、機能拡張ができます。</p>



<p>本記事ではインポートに必要な知識を網羅的に解説します。</p>




<h2 class="wp-block-heading">標準ライブラリとサードパーティライブラリ</h2>


<p>インポートの方法には２つのパターンがあります。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>標準ライブラリのインポート</li>

<li>サードパーティライブラリのインポート</li>
</ul>
</div></div>



<p>手順がやや異なるので、一つずつ解説します。</p>



<h3 class="wp-block-heading">標準ライブラリのインポート</h3>



<p>Python に標準でついてくるライブラリのインポートは、コードの先頭で以下のように書きます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import os

# 新しいディレクトリを作成する
new_dir = "path/to/newdir"
os.mkdir(new_dir)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> os</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># 新しいディレクトリを作成する</span></span>
<span class="line"><span style="color:#D4D4D4">new_dir = </span><span style="color:#CE9178">"path/to/newdir"</span></span>
<span class="line"><span style="color:#D4D4D4">os.mkdir(new_dir)</span></span></code></pre></div>



<p>5行目の<code>os.mkdir()</code>は<code>os</code>モジュールの機能を利用しているので、1行目のインポート文を書かないとエラーになります。</p>



<h3 class="wp-block-heading">サードパーティライブラリのインポート</h3>



<p>Python に標準搭載されていないライブラリを「サードパーティライブラリ」と呼びます。</p>



<p>この場合は、まずライブラリをインストールする必要があります。</p>



<p>以下のコマンドをターミナルなどのコンソール上から実行すると、ライブラリがインストールされるはずです。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>pip install requests</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">pip</span><span style="color:#CE9178"> install</span><span style="color:#CE9178"> requests</span></span></code></pre></div>



<p>その後にモジュール内でインポートを行いましょう。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import requests

# URLを指定
url = "https://www.example.com/"

# GETリクエストを送信
response = requests.get(url)

# HTTPレスポンスコードを出力
print("Status Code:", response.status_code)

# レスポンスボディをテキストとして出力
print("Response Body:", response.text)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> requests</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># URLを指定</span></span>
<span class="line"><span style="color:#D4D4D4">url = </span><span style="color:#CE9178">"https://www.example.com/"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># GETリクエストを送信</span></span>
<span class="line"><span style="color:#D4D4D4">response = requests.get(url)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># HTTPレスポンスコードを出力</span></span>
<span class="line"><span style="color:#DCDCAA">print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"Status Code:"</span><span style="color:#D4D4D4">, response.status_code)</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># レスポンスボディをテキストとして出力</span></span>
<span class="line"><span style="color:#DCDCAA">print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"Response Body:"</span><span style="color:#D4D4D4">, response.text)</span></span></code></pre></div>



<p>最初から入っていないライブラリは、インストールが必要と覚えておきましょう。</p>




<h2 class="wp-block-heading">複数モジュールのインポート方法</h2>


<p>PEP8 というルールによれば、複数モジュールをインポートする場合には１行ずつ分けて書くことになっています。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 良い例
import glob
import os</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#6A9955"># 良い例</span></span>
<span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> glob</span></span>
<span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> os</span></span></code></pre></div>



<p>以下はエラーにはならないが、非推奨です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 悪い例
import glob, os</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#6A9955"># 悪い例</span></span>
<span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> glob, os</span></span></code></pre></div>



<p>モジュールのインポートは改行でグループ分けしてインポートするのが通例です。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>標準ライブラリ</li>

<li>サードパーティライブラリ</li>

<li>自作ライブラリ</li>
</ul>
</div></div>



<p>例えば以下のような感じになります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import glob
import os

import requests

import library1
import library2</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> glob</span></span>
<span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> os</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> requests</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> library1</span></span>
<span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> library2</span></span></code></pre></div>



<p>より読みやすいように、ライブラリ名の頭文字を基準としてアルファベット順に並べることもあります。</p>



<p>ただしアルファベット順に並べるのはかなり大変なので、<code>isort</code>というフォーマッたを使って自動整形させることが多いです。</p>




<h2 class="wp-block-heading">モジュールの一部だけをインポートする（from）</h2>


<p>以下のように書くことで、モジュールの一部のみをインポートできます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>from os import mkdir

# 新しいディレクトリを作成する
new_dir = "path/to/newdir"
mkdir(new_dir)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#C586C0">from</span><span style="color:#D4D4D4"> os </span><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> mkdir</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># 新しいディレクトリを作成する</span></span>
<span class="line"><span style="color:#D4D4D4">new_dir = </span><span style="color:#CE9178">"path/to/newdir"</span></span>
<span class="line"><span style="color:#D4D4D4">mkdir(new_dir)</span></span></code></pre></div>



<p>複数の関数をインポートするには、カンマ区切りにします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>from os import mkdir, path

# 新しいディレクトリを作成する
base_dir = "path/to/newdir"
new_dir = path.join(base_dir, "joindir")
mkdir(new_dir)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#C586C0">from</span><span style="color:#D4D4D4"> os </span><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> mkdir, path</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># 新しいディレクトリを作成する</span></span>
<span class="line"><span style="color:#D4D4D4">base_dir = </span><span style="color:#CE9178">"path/to/newdir"</span></span>
<span class="line"><span style="color:#D4D4D4">new_dir = path.join(base_dir, </span><span style="color:#CE9178">"joindir"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#D4D4D4">mkdir(new_dir)</span></span></code></pre></div>




<h2 class="wp-block-heading">ライブラリに別名をつける（as）</h2>


<p>ライブラリ名が長い場合などには、別名をつけると呼び出しが簡単です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import pandas as pd

# DataFrame を新規作成
df = pd.DataFrame()</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> pandas </span><span style="color:#C586C0">as</span><span style="color:#D4D4D4"> pd</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># DataFrame を新規作成</span></span>
<span class="line"><span style="color:#D4D4D4">df = pd.DataFrame()</span></span></code></pre></div>



<p>ただしこの場合には別名での呼び出ししかできず、pandas としてもエラーになります。</p>




<h2 class="wp-block-heading">if __name__ == &#8220;__main__&#8221; の意味</h2>


<p>モジュールの最後の方に、以下のコードが書かれている場合があります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>if __name__ == "__main__":
    print("本モジュールが実行されました。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#C586C0">if</span><span style="color:#9CDCFE"> __name__</span><span style="color:#D4D4D4"> == </span><span style="color:#CE9178">"__main__"</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"本モジュールが実行されました。"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>上記のモジュールを「直接」を実行した場合だけ、<code>if</code>節内が実行されます。</p>



<p>地味に重要なのが、<code>__name__</code>はプロパティであり<code>"__main__"</code>は文字列だということです。</p>



<p>特定のモジュール名のプロパティとして<code>__name__</code>を実行すると、そのモジュール名が取得できます。</p>



<p>つまり、以下の例で<code>print(os.__name__)</code>の実行結果は<code>os</code>となります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import os

# 実行結果は "os" となる
print(os.__name__)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> os</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># 実行結果は "os" となる</span></span>
<span class="line"><span style="color:#DCDCAA">print</span><span style="color:#D4D4D4">(os.</span><span style="color:#9CDCFE">__name__</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>一方で、以下のような<code>print()</code>関数だけが存在するコードを考えてみましょう。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>print(__name__)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">print</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">__name__</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>ファイル名を<code>module1.py</code>とします。</p>



<p>実は、<code>__name__</code>の内容は状況によって結果が異なります。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>module1.pyが直接実行された場合</li>

<li>他のモジュールから呼び出された場合</li>
</ul>
</div></div>



<p>それぞれ説明します。</p>



<h3 class="wp-block-heading">module1.py が直接実行された場合</h3>



<p>module1.py は、以下のような<code>print()</code>関数だけが書かれたものでした。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>print(__name__)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">print</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">__name__</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>以下のように、module1.pyが直接実行されたとします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>python module1.py</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">python</span><span style="color:#CE9178"> module1.py</span></span></code></pre></div>



<p>すると、<code>print(__name__)</code>の実行結果は<code>"__main__"</code>になります。</p>



<p class="is-style-icon_announce">本来はモジュール名が出力されますが、直接実行されたモジュール内の<code>__name__</code>は特別に<code>__main__</code>という文字列が格納されます。</p>



<h3 class="wp-block-heading">他のモジュールから呼び出された場合</h3>



<p>例えば、以下のようなmodule2.pyがあったとします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>import module1</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> module1</span></span></code></pre></div>



<p>そして、先ほどとは異なり以下のコマンドを実行したとします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Bash</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>python module2.py</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#DCDCAA">python</span><span style="color:#CE9178"> module2.py</span></span></code></pre></div>



<p>すると、module2.pyが実行されることで、import 文を通して間接的にmodule1.pyが実行されることになります。</p>



<p>この場合には<code>print(__name__)</code>の実行結果は<code>"module1"</code>となります。</p>



<p>そのモジュール自体が実行された場合のみ、<code>__name__</code>は<code>__main__</code>になります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>if __name__ == "__main__":
    print("本モジュールが直接実行されました。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#C586C0">if</span><span style="color:#9CDCFE"> __name__</span><span style="color:#D4D4D4"> == </span><span style="color:#CE9178">"__main__"</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"本モジュールが直接実行されました。"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p><code>if</code>節内に書いたコードに以下の役割を持たせられます。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>デバッグ用コード</li>

<li>デモ用コード</li>

<li>テスト用コード</li>
</ul>
</div></div>



<p>これらは他のモジュールから呼び出された時には実行されないので、スタンドアロンのスクリプトとしてもモジュールとしても使えます。</p>




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


<p>Python のインポートの基礎をご紹介してきました。</p>



<p>本記事でご紹介してきた書き方をマスターいただければ、基本的な書き方としては完璧かと思います。</p>



<p>本ブログでは Python 関連の記事も順次アップしておりますので、ぜひ他記事もご覧になってみてください。</p>



<p><a href="https://cfxlog.com/category/python/">» 参考：CFXLOG – Python に関する記事一覧</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【Python】if 文の基礎的な書き方を解説</title>
		<link>https://cfxlog.com/python-if/</link>
		
		<dc:creator><![CDATA[CFXLOG]]></dc:creator>
		<pubDate>Wed, 12 Aug 2026 15:00:00 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://cfxlog.com/?p=5243</guid>

					<description><![CDATA[このような疑問にお答えします。 if文はプログラムの条件分岐を制御するもので、forに並んで最重要概念の一つです。 本記事では以下の内容を解説します。 ごく基本的な事項を中心に解説していきます。 まずはif文の基本から解 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-group is-style-crease"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>Python の if 文の書き方が知りたい！</li>

<li>ワンライナーで書くにはどうやったらいい？</li>
</ul>
</div></div>



<p>このような疑問にお答えします。</p>



<p><code>if</code>文はプログラムの条件分岐を制御するもので、<code>for</code>に並んで最重要概念の一つです。</p>



<p>本記事では以下の内容を解説します。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>if 文の基本的な書き方</li>

<li>if 文の応用的な使い方</li>
</ul>
</div></div>



<p>ごく基本的な事項を中心に解説していきます。</p>



<p>まずは<code>if</code>文の基本から解説します。</p>



<div class="wp-block-group has-border -border03"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<ul class="wp-block-list">
<li>if のみを使った書き方</li>

<li>if と else を使った書き方</li>

<li>if, elif, else を使った方法</li>
</ul>
</div></div>



<p>それぞれ解説していきます。</p>




<h2 class="wp-block-heading">if文の基本的な書き方</h2>


<p>ある条件に合致した場合のみ処理を行うには、以下のように<code>if</code>節を書きます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>number = 5

if number == 5:
    print("number は 5 です。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">number = </span><span style="color:#B5CEA8">5</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#D4D4D4"> number == </span><span style="color:#B5CEA8">5</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 5 です。"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p><code>if</code>の後に「条件式」と「コロン（<code>:</code>）」を続けて、条件に合致した場合の処理はインデントを開けて書きます。</p>




<h3 class="wp-block-heading">ifとelseを使った書き方</h3>


<p>「条件に合致した場合」と「条件に合致しなかった場合」の処理を指定するには、<code>if</code>と<code>else</code>を併用します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>number = 5

if number == 5:
    print("number は 5 です。")
else:
    print("number は 5 以外です。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">number = </span><span style="color:#B5CEA8">5</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#D4D4D4"> number == </span><span style="color:#B5CEA8">5</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 5 です。"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">else</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 5 以外です。"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>




<h3 class="wp-block-heading">if, elif, elseを使った書き方</h3>


<p><code>if</code>に続けてさらに別の条件を続ける場合には、<code>elif</code>を使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>number = 5

if number == 5:
    print("number は 5 です。")
elif number == 6:
    print("number は 6 です。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">number = </span><span style="color:#B5CEA8">5</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#D4D4D4"> number == </span><span style="color:#B5CEA8">5</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 5 です。"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">elif</span><span style="color:#D4D4D4"> number == </span><span style="color:#B5CEA8">6</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 6 です。"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>上記の例ではまず<code>number</code>が<code>5</code>かどうかを判定し、続いて<code>number</code>が<code>6</code>であるか判定しています。</p>



<p>もし条件をさらに追加したい場合には、<code>elif</code>を増やします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>number = 5

if number == 5:
    print("number は 5 です。")
elif number == 6:
    print("number は 6 です。")
elif number == 7:
    print("number は 7 です。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">number = </span><span style="color:#B5CEA8">5</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#D4D4D4"> number == </span><span style="color:#B5CEA8">5</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 5 です。"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">elif</span><span style="color:#D4D4D4"> number == </span><span style="color:#B5CEA8">6</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 6 です。"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">elif</span><span style="color:#D4D4D4"> number == </span><span style="color:#B5CEA8">7</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 7 です。"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>最後にどのif, elifにも当てはまらない場合の条件分岐を付け加えたい場合には、最後にelseを書きます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>number = 5

if number == 5:
    print("number は 5 です。")
elif number == 6:
    print("number は 6 です。")
elif number == 7:
    print("number は 7 です。")
else:
    print("number は 5, 6, 7 以外です。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">number = </span><span style="color:#B5CEA8">5</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#D4D4D4"> number == </span><span style="color:#B5CEA8">5</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 5 です。"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">elif</span><span style="color:#D4D4D4"> number == </span><span style="color:#B5CEA8">6</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 6 です。"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">elif</span><span style="color:#D4D4D4"> number == </span><span style="color:#B5CEA8">7</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 7 です。"</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">else</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 5, 6, 7 以外です。"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>




<h2 class="wp-block-heading">if文の応用的な使い方</h2>


<p>if文ではTrueの場合にインデント内が実行されます。</p>



<p>そうすると、条件式に真偽に関する式を入れることで条件分岐させることができます。</p>



<p>例えば次の通り。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>is_ok = "OK"

if is_ok == "OK":
   print("OK でした")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">is_ok = </span><span style="color:#CE9178">"OK"</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#D4D4D4"> is_ok == </span><span style="color:#CE9178">"OK"</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">   print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"OK でした"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>これを応用して、以下のような演算子を使って条件分岐させることもできます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>number = 5

if number &gt;= 5:
   print("number は 5 以上の値です。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">number = </span><span style="color:#B5CEA8">5</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#D4D4D4"> number >= </span><span style="color:#B5CEA8">5</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">   print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"number は 5 以上の値です。"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>演算子には、例えば以下のようなものが使えます。</p>



<figure class="wp-block-table"><table><thead><tr><th>演算子</th><th>意味</th></tr></thead><tbody><tr><td>a == b</td><td>aとbが等しい</td></tr><tr><td>a != b</td><td>aとbが等しくない</td></tr><tr><td>a &lt; b</td><td>aはbより小さい</td></tr><tr><td>a &gt; b</td><td>aはbより大きい</td></tr><tr><td>a &lt;= b</td><td>aはb以下</td></tr><tr><td>a &gt;= b</td><td>aはb以上</td></tr><tr><td>a is b</td><td>aとbは同じオブジェクト</td></tr><tr><td>a is not b</td><td>aとbは異なるオブジェクト</td></tr></tbody></table><figcaption class="wp-element-caption">演算子とその意味</figcaption></figure>



<p>より Pythonic な書き方として、以下のようなものがあります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>is_ok = True

if is_ok:
   print("OK です！")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">is_ok = </span><span style="color:#569CD6">True</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#D4D4D4"> is_ok:</span></span>
<span class="line"><span style="color:#DCDCAA">   print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"OK です！"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>条件式が<code>True</code>なら<code>if</code>節が実行されます。</p>



<p>反対に、<code>False</code>の場合に実行したい場合には以下のようにします。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>is_ok = False

if not is_ok:
   print("NG です！")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">is_ok = </span><span style="color:#569CD6">False</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#569CD6"> not</span><span style="color:#D4D4D4"> is_ok:</span></span>
<span class="line"><span style="color:#DCDCAA">   print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"NG です！"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p><code>if</code>の後に<code>not</code>を書くことで、否定を表すことを利用しました。</p>



<p>あるリストに特定の要素を含むかどうか判定するには<code>in</code>を使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>num_list = [1, 2, 3, 4, 5]

if 1 in num_list:
   print("1 を含みます。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">num_list = [</span><span style="color:#B5CEA8">1</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">2</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">3</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">4</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">5</span><span style="color:#D4D4D4">]</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#B5CEA8"> 1</span><span style="color:#569CD6"> in</span><span style="color:#D4D4D4"> num_list:</span></span>
<span class="line"><span style="color:#DCDCAA">   print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"1 を含みます。"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>もちろん、<code>not</code>を使うことで「含まない」ことも表現できます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>num_list = [1, 2, 3, 4, 5]

if 1 not in num_list:
   print("1 を含みません。")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">num_list = [</span><span style="color:#B5CEA8">1</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">2</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">3</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">4</span><span style="color:#D4D4D4">, </span><span style="color:#B5CEA8">5</span><span style="color:#D4D4D4">]</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#B5CEA8"> 1</span><span style="color:#569CD6"> not</span><span style="color:#569CD6"> in</span><span style="color:#D4D4D4"> num_list:</span></span>
<span class="line"><span style="color:#DCDCAA">   print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"1 を含みません。"</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p>実務でよく使うテクニックなので、覚えておきましょう。</p>




<h3 class="wp-block-heading">andとorを使った複合条件</h3>


<p><code>and</code>や<code>or</code>を使うことで、より複雑な条件を加えることが可能です。</p>



<p>例えば、次のような形です。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>age = 25
has_license = True

if age &gt;= 18 and has_license:
    print("You can drive.")
else:
    print("You cannot drive.")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">age = </span><span style="color:#B5CEA8">25</span></span>
<span class="line"><span style="color:#D4D4D4">has_license = </span><span style="color:#569CD6">True</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#D4D4D4"> age >= </span><span style="color:#B5CEA8">18</span><span style="color:#569CD6"> and</span><span style="color:#D4D4D4"> has_license:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"You can drive."</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">else</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"You cannot drive."</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p><code>a and b</code>とした場合には、<code>a</code>も<code>b</code>も<code>True</code>の場合に<code>if</code>節内が実行されます。</p>



<p>今回の場合では<code>age</code>が<code>25</code>なので<code>True</code>、<code>has_license</code>も<code>True</code>なので、<code>if</code>節内が実行されます。</p>



<p>また、<code>or</code>を使った例もご紹介します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>temperature = 30
is_raining = False

if temperature &gt; 25 or is_raining:
    print("Let's use the air conditioner.")
else:
    print("We don't need air conditioning.")</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#D4D4D4">temperature = </span><span style="color:#B5CEA8">30</span></span>
<span class="line"><span style="color:#D4D4D4">is_raining = </span><span style="color:#569CD6">False</span></span>
<span class="line"></span>
<span class="line"><span style="color:#C586C0">if</span><span style="color:#D4D4D4"> temperature > </span><span style="color:#B5CEA8">25</span><span style="color:#569CD6"> or</span><span style="color:#D4D4D4"> is_raining:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"Let's use the air conditioner."</span><span style="color:#D4D4D4">)</span></span>
<span class="line"><span style="color:#C586C0">else</span><span style="color:#D4D4D4">:</span></span>
<span class="line"><span style="color:#DCDCAA">    print</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">"We don't need air conditioning."</span><span style="color:#D4D4D4">)</span></span></code></pre></div>



<p><code>a or b</code>とすると、<code>a</code>と<code>b</code>のいずれか、またはどちらも<code>True</code>の場合に<code>if</code>節内が実行されます。</p>



<p>上記の例では、「気温が25度を超えている」か「雨が降っている」のどちらか一方でも<code>True</code>なら<code>if</code>節内が実行されます。</p>



<p>今回は気温が25度以上なので、雨が降っていなくても<code>if</code>節内が実行されることになります。</p>




<h3 class="wp-block-heading">三項演算子でif文を1行にする</h3>


<p>三項演算子を使えば<code>if</code>文を一行で表現できます。</p>



<p>書き方は以下の通りです。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>"True の場合の値" if 条件式 else "False の場合の値"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#CE9178">"True の場合の値"</span><span style="color:#C586C0"> if</span><span style="color:#D4D4D4"> 条件式 </span><span style="color:#C586C0">else</span><span style="color:#CE9178"> "False の場合の値"</span></span></code></pre></div>



<p>これではちょっと分かりづらいと思うので、実際のコード例で確認しましょう。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 比較対象の数字を定義
a = 10
b = 20

# 三項演算子で大きい方を取得
max_value = a if a &gt; b else b
print(max_value)  # 20が出力される</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#6A9955"># 比較対象の数字を定義</span></span>
<span class="line"><span style="color:#D4D4D4">a = </span><span style="color:#B5CEA8">10</span></span>
<span class="line"><span style="color:#D4D4D4">b = </span><span style="color:#B5CEA8">20</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># 三項演算子で大きい方を取得</span></span>
<span class="line"><span style="color:#D4D4D4">max_value = a </span><span style="color:#C586C0">if</span><span style="color:#D4D4D4"> a > b </span><span style="color:#C586C0">else</span><span style="color:#D4D4D4"> b</span></span>
<span class="line"><span style="color:#DCDCAA">print</span><span style="color:#D4D4D4">(max_value)  </span><span style="color:#6A9955"># 20が出力される</span></span></code></pre></div>



<p>上記の場合には単純に「大きい方の数字」を出力していますが、以下のように文字列を出力することもできます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 比較対象の数字を定義
a = 10
b = 20

# 三項演算子で大きい方を取得
which_value = "10が選択されました" if a &gt; b else "20が選択されました"
print(which_value)  # "20が選択されました" が出力される</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#6A9955"># 比較対象の数字を定義</span></span>
<span class="line"><span style="color:#D4D4D4">a = </span><span style="color:#B5CEA8">10</span></span>
<span class="line"><span style="color:#D4D4D4">b = </span><span style="color:#B5CEA8">20</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># 三項演算子で大きい方を取得</span></span>
<span class="line"><span style="color:#D4D4D4">which_value = </span><span style="color:#CE9178">"10が選択されました"</span><span style="color:#C586C0"> if</span><span style="color:#D4D4D4"> a > b </span><span style="color:#C586C0">else</span><span style="color:#CE9178"> "20が選択されました"</span></span>
<span class="line"><span style="color:#DCDCAA">print</span><span style="color:#D4D4D4">(which_value)  </span><span style="color:#6A9955"># "20が選択されました" が出力される</span></span></code></pre></div>



<p>三項演算子の戻り値として「値」の代わりに「式そのもの」を指定できます。</p>



<p>日本語で表現すると、以下のようになります。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>"True の場合の式" if 条件式 else "False の場合の式"</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#CE9178">"True の場合の式"</span><span style="color:#C586C0"> if</span><span style="color:#D4D4D4"> 条件式 </span><span style="color:#C586C0">else</span><span style="color:#CE9178"> "False の場合の式"</span></span></code></pre></div>



<p>このようにすることで、条件式の結果次第で計算式を変えることができます。</p>



<p>以下の例では、大きい方の数字を二倍した値が取得されます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1e1e1e"><span style="background:#c7c7c7;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1e1e1e">Python</span></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly># 比較対象の数字を定義
a = 10
b = 20

# 三項演算子で大きい方を取得
max_value_double = a * 2 if a &gt; b else b * 2
print(max_value_double)  # 40が出力される</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki dark-plus" style="background-color:#1E1E1E;color:#D4D4D4" tabindex="0"><code><span class="line"><span style="color:#6A9955"># 比較対象の数字を定義</span></span>
<span class="line"><span style="color:#D4D4D4">a = </span><span style="color:#B5CEA8">10</span></span>
<span class="line"><span style="color:#D4D4D4">b = </span><span style="color:#B5CEA8">20</span></span>
<span class="line"></span>
<span class="line"><span style="color:#6A9955"># 三項演算子で大きい方を取得</span></span>
<span class="line"><span style="color:#D4D4D4">max_value_double = a * </span><span style="color:#B5CEA8">2</span><span style="color:#C586C0"> if</span><span style="color:#D4D4D4"> a > b </span><span style="color:#C586C0">else</span><span style="color:#D4D4D4"> b * </span><span style="color:#B5CEA8">2</span></span>
<span class="line"><span style="color:#DCDCAA">print</span><span style="color:#D4D4D4">(max_value_double)  </span><span style="color:#6A9955"># 40が出力される</span></span></code></pre></div>




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


<p><code>if</code>文は Python を学習する上で最重要概念です。</p>



<p>今回の基本的な事項をマスターして、Python をストレスなく書けるようにしていきましょう！</p>



<p>ご不明点がありましたら、下のコメント欄よりお気軽にどうぞ。</p>



<p>また、本ブログの Python 関連記事もぜひ覗いてみてください。</p>



<p><a href="https://cfxlog.com/category/python/">» 参考：CFXLOG – Python に関する記事一覧</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
