<?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>VBA　Switch関数 アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<atom:link href="https://nyanblog2222.com/tag/vba%E3%80%80switch%E9%96%A2%E6%95%B0/feed/" rel="self" type="application/rss+xml" />
	<link>https://nyanblog2222.com/tag/vba　switch関数/</link>
	<description>ちょっとしたことを調べているよ</description>
	<lastBuildDate>Fri, 03 Sep 2021 13:13:28 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7</generator>

<image>
	<url>https://nyanblog2222.com/wp-content/uploads/2021/09/cropped-favicon-32x32.png</url>
	<title>VBA　Switch関数 アーカイブ - nyanblog ~にゃんぶろぐ~</title>
	<link>https://nyanblog2222.com/tag/vba　switch関数/</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>【VBA】Switch関数とSelect Caseステートメント【違いや記述方法を簡単に解説】</title>
		<link>https://nyanblog2222.com/programming/vba/2344/</link>
					<comments>https://nyanblog2222.com/programming/vba/2344/#respond</comments>
		
		<dc:creator><![CDATA[nyan2222]]></dc:creator>
		<pubDate>Sun, 13 Sep 2020 13:11:00 +0000</pubDate>
				<category><![CDATA[Access]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Office]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Switch　Select Case　違い]]></category>
		<category><![CDATA[VBA　Select Caseステートメント]]></category>
		<category><![CDATA[VBA　Switch関数]]></category>
		<guid isPermaLink="false">https://nyanblog2222.com/?p=2344</guid>

					<description><![CDATA[<p><img src="https://nyanblog2222.com/wp-content/uploads/2022/11/36.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" fetchpriority="high" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/36.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/36-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/36-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/36-768x402.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" />VBAには条件分岐の手段の一つとしてSwitch関数やSelect Caseステートメントがありますが、これらの違いや記述方法を紹介します。C言語やJAVA言語でのswitch文との比較もしてますので、そちらも良かったら [&#8230;]</p>
<p>投稿 <a href="https://nyanblog2222.com/programming/vba/2344/">【VBA】Switch関数とSelect Caseステートメント【違いや記述方法を簡単に解説】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<img src="https://nyanblog2222.com/wp-content/uploads/2022/11/36.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" decoding="async" srcset="https://nyanblog2222.com/wp-content/uploads/2022/11/36.png 1280w, https://nyanblog2222.com/wp-content/uploads/2022/11/36-300x157.png 300w, https://nyanblog2222.com/wp-content/uploads/2022/11/36-1024x536.png 1024w, https://nyanblog2222.com/wp-content/uploads/2022/11/36-768x402.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" />
<p>VBAには条件分岐の手段の一つとして<strong><span style="color:#b78d4a" class="has-inline-color">Switch関数</span></strong>や<strong><span style="color:#b78d4a" class="has-inline-color">Select Caseステートメント</span></strong>がありますが、これらの違いや記述方法を紹介します。<br>C言語やJAVA言語でのswitch文との比較もしてますので、そちらも良かったらどうぞ♪</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Switch関数</a></li><li><a href="#toc2" tabindex="0">Select Caseステートメント</a></li><li><a href="#toc3" tabindex="0">参考（C言語のswitch文との比較）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">Switch関数</span></h2>



<p><strong><span style="color:#b78d4a" class="has-inline-color">Switch関数は、ある式（expr）を評価し、Trueであれば値や式（value）を返します。</span></strong></p>



<p>構文については以下となります。</p>



<figure class="wp-block-table"><table><tbody><tr><td>Switch(expr_1,value_1,[expr_2,value_2…,[expr_n,value_n]))<br>expr ：必須。評価する式を指定<br>value：必須。式がTrueの場合に返される値または式</td></tr></tbody></table></figure>



<p>記述例として、以下を用意しました。<br>変数の値と特定の値が一致すれば、メッセージを返し、イミディエイトウィンドウに表示します。</p>



<pre class="wp-block-code basic"><code>' PrintImmediate
' イミディエイトウィンドウにメッセージを表示
Sub PrintImmediate()
    
    Dim sMsg As String
    sMsg = GetMsg_Switch(2)
    
    Debug.Print sMsg
    
End Sub</code></pre>



<pre class="wp-block-code basic"><code>' GetMsg_Switch(Integer)
' Switch関数を使ってメッセージを取得
Function GetMsg_Switch(iMsgCase As Integer)

    GetMsg_Switch = Switch(iMsgCase = 1, "正常１", iMsgCase = 2, "正常２")

End Function</code></pre>



<p>結果は、「正常２」と表示されます。</p>



<p>Switch関数を使っていく上で知っておきたいポイントは以下になります。<br>（例については上記の記述例を元にしています。）<br><strong><span style="color:#b78d4a" class="has-inline-color">・Switch関数を変数に代入しないとコンパイルエラーとなる</span></strong><br>例）○GetMsg_Switch = Switch(iMsgCase = 1, &#8220;正常１&#8221;, iMsgCase = 2, &#8220;正常２&#8221;)<br>　　×Switch(iMsgCase = 1, &#8220;正常１&#8221;, iMsgCase = 2, &#8220;正常２&#8221;)<br><strong><span style="color:#b78d4a" class="has-inline-color">・全ての式を評価するため、除算エラー等が起きる式には要注意</span></strong><br>例）iMsgCase = 1で、<br>　　GetMsg_Switch = Switch(iMsgCase = 1, &#8220;正常１&#8221;, iMsgCase = 2, &#8220;正常２&#8221;, iMsgCase = 3, 5 / 0)<br>　　といったコードの場合、「iMsgCase = 3, 5 / 0」部分も評価し除算エラーとなります。<br><strong><span style="color:#b78d4a" class="has-inline-color">・式がFalseだった場合、Nullを返す</span></strong><br>例）iMsgCaseが3の場合、Nullを変数に代入しようとするため、エラーが起きます。</p>



<p>こういったマイナス要素があるため、私は次項の「Select Caseステートメント」がおすすめです。</p>



<h2 class="wp-block-heading"><span id="toc2">Select Caseステートメント</span></h2>



<p><strong><span style="color:#b78d4a" class="has-inline-color">Select Caseステートメントは、ある変数の値（testexpression）を複数の値（expressionlist-n）と比較し、一致していれば特定の処理（statements-n）を行います。</span></strong></p>



<p>構文については以下となります。</p>



<figure class="wp-block-table"><table><tbody><tr><td>Select Case testexpression<br>[ Case expressionlist-n [ statements-n ]]<br>[ Case Else [ elsestatements ]]<br>End Select<br><br>testexpression：必須。 任意の変数を指定<br>expressionlist-n：省略可能。Caseがある場合は必須<br>statements-n：省略可能。値が一致していた場合実行される処理<br>elsestatements 省略可能。値が一致しない場合に実行される処理</td></tr></tbody></table></figure>



<p>記述例として、以下を用意しました。<br>変数の値と特定の値が一致すれば、メッセージを返し、イミディエイトウィンドウに表示します。</p>



<pre class="wp-block-code"><code>' PrintImmediate
' イミディエイトウィンドウにメッセージを表示
Sub PrintImmediate()
    
    Dim sMsg As String
    sMsg = GetMsg_SelectCase(2)
    
    Debug.Print sMsg
    
End Sub</code></pre>



<pre class="wp-block-code"><code>' GetMsg_SelectCase(Integer)
' SelectCaseステートメントを使ってメッセージを取得
Function GetMsg_SelectCase(iMsgCase As Integer)

       
    Select Case iMsgCase
    Case 1
        GetMsg_SelectCase = "正常１"
    Case 2
        GetMsg_SelectCase = "正常２"
    Case Else
        GetMsg_SelectCase = "異常"
    End Select
        

End Function</code></pre>



<p>結果は、「正常２」と表示されます。<br>もし、sMsg = GetMsg_SelectCase(3)だった場合は、「異常」と表示されます。</p>



<p><strong><span style="color:#b78d4a" class="has-inline-color">変数に想定外の値が入っていても、Case Elseがあるためエラーを出さずに対応できます。</span></strong></p>



<h2 class="wp-block-heading"><span id="toc3">参考（C言語のswitch文との比較）</span></h2>



<p>参考になりますが、C言語のswitch文は以下のような書き方をします。</p>



<pre class="wp-block-code"><code>int iMsgCase = 2;

switch(iMsgCase){
  case 1:
    printf("正常１¥n");
    break;
  case iMsgCase:
    printf("正常２¥n");
    break;
  default:
    printf("異常¥n");
}</code></pre>



<p>記述内容はほぼSelect Caseステートメントで、内容もほぼ同等の性能です。<br>逆にSwitch関数とは、名前は似てますが内容は似てません。</p>



<p>以上、今回はSwitch関数やSelect Caseステートメントについて紹介しました。<br>両者比較すると、<strong><span style="color:#b78d4a" class="has-inline-color">マイナスポイントの多いSwitch関数を使うよりは、Select Caseステートメントを使った方がよい</span></strong>のかなと思います。</p>



<p>Switch関数の強みは条件分岐を1行で書けるところかな？と当初考えましたが、いざコードを書いてみると1行に条件を詰め込むのは逆に読みにくいかもと感じました。。</p>



<p>以下まとめです。</p>



<figure class="wp-block-table"><table><tbody><tr><td>・個人差あるかもしれませんが性能は、<br>　Select Caseステートメント＞＞＞Switch関数<br>・C言語のswitch文とVBAのSwitch関数は似てるようで似てない<br>　　　　　　　　　　VBAでほぼ同等の性能はSelect Caseステートメント</td></tr></tbody></table></figure>



<p>本記事で参考にさせていただいたサイト：<br><a class="link" href="https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/switch-function">Microsoft Doc：Switch 関数</a><br><a class="link" href="https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/select-case-statement">Microsoft Doc：Select Case ステートメント</a></p>
<p>投稿 <a href="https://nyanblog2222.com/programming/vba/2344/">【VBA】Switch関数とSelect Caseステートメント【違いや記述方法を簡単に解説】</a> は <a href="https://nyanblog2222.com">nyanblog ~にゃんぶろぐ~</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nyanblog2222.com/programming/vba/2344/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
