<?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>定義 | nujonoa_blog</title>
	<atom:link href="https://nujonoa.com/tag/%e5%ae%9a%e7%be%a9/feed/" rel="self" type="application/rss+xml" />
	<link>https://nujonoa.com</link>
	<description>人生に役立つデータ集</description>
	<lastBuildDate>Mon, 15 Jun 2020 02:07:10 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://nujonoa.com/wp-content/uploads/2019/04/cropped-DSC00976-e1554456145409-32x32.jpg</url>
	<title>定義 | nujonoa_blog</title>
	<link>https://nujonoa.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【マクロVBA】行や列の追加、削除、変更などの仕様変更に対応したプログラムの記述方法！</title>
		<link>https://nujonoa.com/program-for-changing-specifications/</link>
					<comments>https://nujonoa.com/program-for-changing-specifications/#respond</comments>
		
		<dc:creator><![CDATA[nujonoa]]></dc:creator>
		<pubDate>Mon, 15 Jun 2020 10:00:00 +0000</pubDate>
				<category><![CDATA[マクロVBA]]></category>
		<category><![CDATA[vba]]></category>
		<category><![CDATA[仕様変更]]></category>
		<category><![CDATA[行列]]></category>
		<category><![CDATA[追加]]></category>
		<category><![CDATA[削除]]></category>
		<category><![CDATA[定義]]></category>
		<category><![CDATA[const]]></category>
		<guid isPermaLink="false">http://nujonoa.com/?p=6052</guid>

					<description><![CDATA[目次 【VBA】行や列の追加、削除、変更などの仕様変更に対応したプログラムの記述方法！public constにセルの値を入れたい。constが無理なら、プログラムの一つにする。しかも、ctrl+spaceが使えるように [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">【VBA】行や列の追加、削除、変更などの仕様変更に対応したプログラムの記述方法！</a></li><li><a href="#toc2" tabindex="0">public constにセルの値を入れたい。</a></li><li><a href="#toc3" tabindex="0">constが無理なら、プログラムの一つにする。</a></li><li><a href="#toc4" tabindex="0">しかも、ctrl+spaceが使えるように。。</a></li><li><a href="#toc5" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">【VBA】行や列の追加、削除、変更などの仕様変更に対応したプログラムの記述方法！</span></h2>



<p>VBAでプログラムを書いていくうえで、</p>



<div class="wp-block-cocoon-blocks-icon-box information-box common-icon-box block-box">
<p>・テンプレートが定まっておらず、行や列が増えた。</p>



<p>・やりたいことが増えて、行や列がずれた。</p>



<p>・各々担当者が独自に列を追加したい。</p>
</div>



<p>などなどのニーズで、</p>



<p>FOR I= 14 TO LASTY →　FOR I= 20 TO LASTY　→　FOR I= 23 TO LASTY</p>



<p>のように、何度も何度もプログラムを書き換えることがよくあると思います。</p>



<p>かくいう私も、この問題に悩まされており、行や列を追加した後に、</p>



<p><span class="marker-animation">・プログラムが動かない！！<br>・あ、ここも変更し忘れてた、、</span></p>



<p>ということが多々ありました。。</p>



<p>ということで、今回はそんな問題に対して、プログラムの書き方を提案したいと思います！</p>



<h2 class="wp-block-heading"><span id="toc2">public constにセルの値を入れたい。</span></h2>



<p>最初に考えたのは</p>



<p>①行列を定義するシートを作成して、</p>



<p>②PUBLIC CONST(どのモジュールでも使える定数)にシートのセルの値を入れる</p>



<p>という方法でした。</p>



<p>イメージとしては、こんな計算のテンプレートがあった時に、</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="427" height="414" src="https://nujonoa.com/wp-content/uploads/2020/06/image-28.png" alt="" class="wp-image-6083" srcset="https://nujonoa.com/wp-content/uploads/2020/06/image-28.png 427w, https://nujonoa.com/wp-content/uploads/2020/06/image-28-300x291.png 300w" sizes="(max-width: 427px) 100vw, 427px" /></figure>



<p>下のような定義用シートを作って、テンプレートシートに連動して動くようにします。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="596" height="510" src="https://nujonoa.com/wp-content/uploads/2020/06/image-29.png" alt="" class="wp-image-6084" srcset="https://nujonoa.com/wp-content/uploads/2020/06/image-29.png 596w, https://nujonoa.com/wp-content/uploads/2020/06/image-29-500x428.png 500w, https://nujonoa.com/wp-content/uploads/2020/06/image-29-300x257.png 300w" sizes="(max-width: 596px) 100vw, 596px" /></figure>



<p>すると、計算用テンプレートの最初の列にNoを入れ忘れた！！！列を追加しないと！！となった時、</p>



<p>・テンプレートは下記の通り、変更され、「項目」は2列目(B列)→3列目(C列)に変わってしまいます。こうなると、普通はプログラムを書き換える必要が出てきますが、</p>



<div class="wp-block-cocoon-blocks-column-2 column-wrap column-2 column-2-2-1-1 layout-box">
<div class="wp-block-cocoon-blocks-column-left column-left">
<figure class="wp-block-image size-large"><a rel="noopener" target="_blank" href="https://nujonoa.com/wp-content/uploads/2020/06/image-28.png"><img fetchpriority="high" decoding="async" width="427" height="414" src="https://nujonoa.com/wp-content/uploads/2020/06/image-28.png" alt="" class="wp-image-6083" srcset="https://nujonoa.com/wp-content/uploads/2020/06/image-28.png 427w, https://nujonoa.com/wp-content/uploads/2020/06/image-28-300x291.png 300w" sizes="(max-width: 427px) 100vw, 427px" /></a></figure>



<div class="wp-block-cocoon-blocks-column-2 column-wrap column-2 column-2-2-1-1 layout-box"></div>
</div>



<div class="wp-block-cocoon-blocks-column-right column-right">
<figure class="wp-block-image size-large"><a rel="noopener" target="_blank" href="https://nujonoa.com/wp-content/uploads/2020/06/image-30.png"><img decoding="async" width="460" height="391" src="https://nujonoa.com/wp-content/uploads/2020/06/image-30.png" alt="" class="wp-image-6085" srcset="https://nujonoa.com/wp-content/uploads/2020/06/image-30.png 460w, https://nujonoa.com/wp-content/uploads/2020/06/image-30-300x255.png 300w" sizes="(max-width: 460px) 100vw, 460px" /></a></figure>
</div>
</div>



<p>先ほど、行列定義シートを作ったことで、シートの更新に連動して、対応する列を更新することができます。(項目列が2列目→3列目に自動で変更されています。)<br>このセルを変数として定義することができれば、プログラムを書き換えることなく、プログラムは思い通りに動いてくれるはず。と考えたのです。</p>



<div class="wp-block-cocoon-blocks-column-2 column-wrap column-2 column-2-2-1-1 layout-box">
<div class="wp-block-cocoon-blocks-column-left column-left">
<figure class="wp-block-image size-large"><a rel="noopener" target="_blank" href="https://nujonoa.com/wp-content/uploads/2020/06/image-29.png"><img decoding="async" width="596" height="510" src="https://nujonoa.com/wp-content/uploads/2020/06/image-29.png" alt="" class="wp-image-6084" srcset="https://nujonoa.com/wp-content/uploads/2020/06/image-29.png 596w, https://nujonoa.com/wp-content/uploads/2020/06/image-29-500x428.png 500w, https://nujonoa.com/wp-content/uploads/2020/06/image-29-300x257.png 300w" sizes="(max-width: 596px) 100vw, 596px" /></a></figure>
</div>



<div class="wp-block-cocoon-blocks-column-right column-right">
<figure class="wp-block-image size-large"><a rel="noopener" target="_blank" href="https://nujonoa.com/wp-content/uploads/2020/06/image-33.png"><img loading="lazy" decoding="async" width="578" height="492" src="https://nujonoa.com/wp-content/uploads/2020/06/image-33.png" alt="" class="wp-image-6091" srcset="https://nujonoa.com/wp-content/uploads/2020/06/image-33.png 578w, https://nujonoa.com/wp-content/uploads/2020/06/image-33-500x426.png 500w, https://nujonoa.com/wp-content/uploads/2020/06/image-33-300x255.png 300w" sizes="(max-width: 578px) 100vw, 578px" /></a></figure>
</div>
</div>



<p><br>しかし、残念ながらconstには、セルの値を入れることは不可能となっているようでした。。</p>



<h2 class="wp-block-heading"><span id="toc3">constが無理なら、プログラムの一つにする。</span></h2>



<p>ということで、constが無理なようなので、<br>行列数定義というプログラムを一つ作り、そこで、セルの値を代入することにしました。</p>



<p>作成したプログラムは非常に簡単で、こちらに記載の通りです。</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: vb; title: ; notranslate">
'どこでも使えるようにPublicで変数を設定
Public Cnt項目 As Long
Public Cnt単価 As Long
Public Cnt個数 As Long
Public Cnt日付 As Long


Sub 行列数定義()

'Pubkic変数に、定義シートの値を代入
 Cnt項目 = Worksheets(&quot;定義&quot;).Cells(3, 4)
 Cnt単価 = Worksheets(&quot;定義&quot;).Cells(4, 4)
 Cnt個数 = Worksheets(&quot;定義&quot;).Cells(5, 4)
 Cnt日付 = Worksheets(&quot;定義&quot;).Cells(6, 4)

End Sub

Sub TEST1()

'他のプログラムを走らせる前に、まず行列数定義を実行させる。
 Call 行列数定義

 '定数が変更されているか確認
 Debug.Print Cnt項目

End Sub

</pre></div>


<p>・まずは、どこでも使える変数を設定するために、<br>　sub外に変数定義を行う。</p>



<p>・【行列数定義】マクロを作成して、シートの値を代入する。</p>



<p>・他のプログラムを走らせる前に【行列数定義】を実行して、変数に値を代入。<br>　デバッグ画面に正しい値が出るか確認。</p>



<p>という流れです。</p>



<p>結果は、成功。これで、メインのプログラムにおいて、特定の列数を入力する代わりに、「Cnt項目」「Cnt単価」「Cnt個数」「Cnt日付」を使用することで、テンプレートが変更されても(行列が追加削除されても、)対応ができるようになります！</p>



<h2 class="wp-block-heading"><span id="toc4">しかも、ctrl+spaceが使えるように。。</span></h2>



<p>これで、仕様変更に対応できるプログラムが作成できるようになりました。</p>



<p>しかし、実はメリットはこれだけにとどまりません。</p>



<p>なんと、定義した変数は「ctrl+space」で簡単に呼び出せるようになります。</p>



<p>行列定義シートを作成するのはめんどくさいかと思いますが、一度設定してしまえば、プログラムを書くのが非常に楽になります。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="566" height="241" src="https://nujonoa.com/wp-content/uploads/2020/06/image-34.png" alt="" class="wp-image-6098" srcset="https://nujonoa.com/wp-content/uploads/2020/06/image-34.png 566w, https://nujonoa.com/wp-content/uploads/2020/06/image-34-500x213.png 500w, https://nujonoa.com/wp-content/uploads/2020/06/image-34-300x128.png 300w" sizes="(max-width: 566px) 100vw, 566px" /></figure>



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



<p>ということで、</p>



<p>行や列の追加削除に悩まされていた草プログラマーの方は、上記の方法で仕様変更に耐えうるプログラムを作成してみてください！</p>



<p>今回の内容は、VBAを初めて8年目、、</p>



<p>その中でも、至高のプログラムとなります。</p>



<p>たったこれだけのことで今までの苦労が報われていたなんてと、何ともふがいないのですが、この方法は非常に有効だと思いますので、ぜひ参考にしてもらえればと思います！！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nujonoa.com/program-for-changing-specifications/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
