<?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>高速化  |  独学エクセル塾</title>
	<atom:link href="https://dokugakuexcel.com/tag/%E9%AB%98%E9%80%9F%E5%8C%96/feed/" rel="self" type="application/rss+xml" />
	<link>https://dokugakuexcel.com</link>
	<description>初心者から中級者までシステム・関数・VBAを伝授します</description>
	<lastBuildDate>Mon, 17 Oct 2022 13:10:48 +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://dokugakuexcel.com/wp-content/uploads/2021/06/cropped-cropped-image-66-1-32x32.jpg</url>
	<title>高速化  |  独学エクセル塾</title>
	<link>https://dokugakuexcel.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">194648711</site>	<item>
		<title>【マクロVBA知識 高速化②】あまり知られていない？大量データで処理が遅いマクロVBAを配列で高速化</title>
		<link>https://dokugakuexcel.com/%e3%80%90vba%e7%9f%a5%e8%ad%98-%e9%ab%98%e9%80%9f%e5%8c%96%e2%91%a1%e3%80%91%e3%81%82%e3%81%be%e3%82%8a%e7%9f%a5%e3%82%89%e3%82%8c%e3%81%a6%e3%81%84%e3%81%aa%e3%81%84%ef%bc%9f%e5%a4%a7%e9%87%8f/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e3%2580%2590vba%25e7%259f%25a5%25e8%25ad%2598-%25e9%25ab%2598%25e9%2580%259f%25e5%258c%2596%25e2%2591%25a1%25e3%2580%2591%25e3%2581%2582%25e3%2581%25be%25e3%2582%258a%25e7%259f%25a5%25e3%2582%2589%25e3%2582%258c%25e3%2581%25a6%25e3%2581%2584%25e3%2581%25aa%25e3%2581%2584%25ef%25bc%259f%25e5%25a4%25a7%25e9%2587%258f</link>
					<comments>https://dokugakuexcel.com/%e3%80%90vba%e7%9f%a5%e8%ad%98-%e9%ab%98%e9%80%9f%e5%8c%96%e2%91%a1%e3%80%91%e3%81%82%e3%81%be%e3%82%8a%e7%9f%a5%e3%82%89%e3%82%8c%e3%81%a6%e3%81%84%e3%81%aa%e3%81%84%ef%bc%9f%e5%a4%a7%e9%87%8f/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[matsu]]></dc:creator>
		<pubDate>Tue, 29 Jun 2021 12:48:45 +0000</pubDate>
				<category><![CDATA[高速化]]></category>
		<category><![CDATA[マクロVBA応用・便利技]]></category>
		<category><![CDATA[VBA高速化]]></category>
		<category><![CDATA[Variant]]></category>
		<category><![CDATA[VBA]]></category>
		<guid isPermaLink="false">https://dokugakuexcel.com/?p=318</guid>

					<description><![CDATA[今回はVBAの高速化について説明します。皆さんは作成したマクロVBAの処理速度が遅くなったことはないでしょうか。 今回はその悩みを解決する第2弾となっています。 前回の内容を合わせると効果はさらに見込めます。 前回の記事 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>今回は<strong><span class="marker-under">VBAの高速化について</span></strong>説明します。<br>皆さんは作成したマクロVBAの処理速度が遅くなったことはないでしょうか。</p>



<p>今回はその悩みを解決する第2弾となっています。</p>



<p>前回の内容を合わせると効果はさらに見込めます。</p>



<p>前回の記事はこちら☟</p>



<p><a href="https://dokugakuexcel.com/%e3%80%90vba%e7%9f%a5%e8%ad%98-%e9%ab%98%e9%80%9f%e5%8c%96%e2%91%a0%e3%80%91vba%e9%ab%98%e9%80%9f%e5%8c%96%e3%81%b8%e3%81%ae%e9%81%93%e3%83%bb%e9%ab%98%e9%80%9f3%e7%a8%ae%e3%81%ae%e7%a5%9e%e5%99%a8/">【VBA知識 高速化①】画面更新・自動計算・イベントのOFFについて（VBA高速3種の神器） &#8211; 独学エクセル塾 (dokugakuexcel.com)</a></p>



<p>それでは見ていきましょう。</p>



<p></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">■高速化の内容</a></li><li><a href="#toc2" tabindex="0">■比較用プログラムの説明</a></li><li><a href="#toc3" tabindex="0">■変数内で記録する</a></li><li><a href="#toc4" tabindex="0">■変更前と比較</a></li><li><a href="#toc5" tabindex="0">■高速化①と今回の対策の混合結果</a></li><li><a href="#toc6" tabindex="0">■まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">■高速化の内容</span></h2>



<p></p>



<p>今回の解決策はVariant変数を使用し、変数内で集計します。<br>そして集計結果を最後にまとめて表示する仕組みです。</p>



<p>処理が遅くなる要因としてセルの値を毎回読み取っている場合があります。<br>そこで変数内で計算させることで<br>読み込みがなくなり、早くなるというわけです。</p>



<p>人で表すと、いちいち紙に書いて計算している作業を頭で考えてまとめて記入するイメージです。</p>



<p>では実際に検証してみましょう。</p>



<p></p>



<h2 class="wp-block-heading"><span id="toc2">■比較用プログラムの説明</span></h2>



<p>今回も高速化①で使用したシートを用いていきます。<br>高速化①をご覧になられた方は次の目次へどうぞ。</p>



<p>では検証用のプログラムについて説明します。<br>A・B行に100000行、ランダムなデータがある状態です。</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="475" height="309" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-141.png" alt="" class="wp-image-319" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-141.png 475w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-141-300x195.png 300w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-141-92x60.png 92w" sizes="(max-width: 475px) 100vw, 475px" /></figure>



<p>データの処理方法としてA1とB1の数値をかけてC1に出力する仕組みとします。<br>その処理を100000行繰り返すのにかかった時間を基準としましょう。</p>



<p>用意したプログラムがこちら。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="696" height="453" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-142.png" alt="" class="wp-image-320" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-142.png 696w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-142-300x195.png 300w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-142-92x60.png 92w" sizes="(max-width: 696px) 100vw, 696px" /></figure>



<p>一応、コピーできるように貼っておきます。</p>



<p></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Sub 高速化①()</p><p>Dim Time1 As Double, Time2 As Double, Result As Double<br>Dim A As Long</p><p>Time1 = Timer</p><p>&#8221;&#8221;計算開始<br>For A = 1 To 100000 Step 1</p><p>     Cells(A, 3) = Cells(A, 1) * Cells(A, 2)</p><p>Next A<br>&#8221;&#8221;計算終わり</p><p>Time2 = Timer</p><p>Result = Time2 &#8211; Time1<br>MsgBox Result &amp; &#8220;秒で処理しました&#8221;</p><p>End Sub</p></blockquote>



<p>では実行してみましょう。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="450" height="346" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-143.png" alt="" class="wp-image-321" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-143.png 450w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-143-300x231.png 300w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-143-78x60.png 78w" sizes="(max-width: 450px) 100vw, 450px" /></figure>



<p>3.62秒かかりましたね。これを元に早くしていきます。</p>



<p></p>



<h2 class="wp-block-heading"><span id="toc3">■変数内で記録する</span></h2>



<p>ではA行とB行で計算した値をVariant関数内で記録してみましょう。</p>



<p>一度、Variant関数内に使用したい範囲の空白セルを入れておきます。<br>この作業をしないとエラーになります。<br>今回はA行*B行の結果の１列だけでいいので、１列分100000行をVariant内に空白として入れます。</p>



<p><strong><em>Dim N As Vriant<br>N = Range(Cells(1, 3), Cells(100000, 3))</em></strong></p>



<p>今回は３列目を使用して空白を入れてますが、計算結果値を上書きするので何列目でも構いません。</p>



<p>そして計算結果値をVariant内に入れます。</p>



<p><strong><em>N(A, 1) = Cells(A, 1) * Cells(A, 2)</em></strong></p>



<p>これを100000行繰り返し、最後に出力する流れです。</p>



<p><strong><em>Range(Cells(1, 3), Cells(100000, 3)) = N</em></strong></p>



<p>こちらをプログラムに入れていきます。</p>



<p></p>



<h2 class="wp-block-heading"><span id="toc4">■変更前と比較</span></h2>



<p>変更後のプログラムはこちら。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="712" height="593" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-144.png" alt="" class="wp-image-322" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-144.png 712w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-144-300x250.png 300w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-144-72x60.png 72w" sizes="(max-width: 712px) 100vw, 712px" /></figure>



<p>このようになりました。<br>またまたコピー用載せておきます。</p>



<p></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Sub 高速化②()</p><p>Dim Time1 As Double, Time2 As Double, Result As Double<br>Dim A As Long, N As Variant</p><p>Time1 = Timer</p><p>&#8221;&#8221;計算開始</p><p>    N = Range(Cells(1, 3), Cells(100000, 3))</p><p>For A = 1 To 100000 Step 1</p><p>    N(A, 1) = Cells(A, 1) * Cells(A, 2)</p><p>Next A</p><p>   Range(Cells(1, 3), Cells(100000, 3)) = N</p><p>&#8221;&#8221;計算終わり</p><p>Time2 = Timer</p><p>Result = Time2 &#8211; Time1<br>MsgBox Result &amp; &#8220;秒で処理しました&#8221;</p><p>End Sub</p></blockquote>



<p></p>



<p>それでは実行してみましょう。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="442" height="372" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-145.png" alt="" class="wp-image-323" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-145.png 442w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-145-300x252.png 300w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-145-71x60.png 71w" sizes="(max-width: 442px) 100vw, 442px" /></figure>



<p>結果が出ました！</p>



<p>3.62秒から0.78秒と2.84秒短縮しました。<br>結果的に78%短縮短縮です。<br>驚異的ですよね…</p>



<p>では高速化①の対策も合わせてみましょう。</p>



<p></p>



<h2 class="wp-block-heading"><span id="toc5">■高速化①と今回の対策の混合結果</span></h2>



<p>高速化①で行った、画面更新・自動計算・イベントをOFFも追加してみましょう。</p>



<p>追加したプログラムがこちら。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="689" height="672" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-146.png" alt="" class="wp-image-324" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-146.png 689w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-146-300x293.png 300w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-146-62x60.png 62w" sizes="(max-width: 689px) 100vw, 689px" /></figure>



<p></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Sub 高速化①②()</p><p>Application.ScreenUpdating = False &#8221;画面更新をOFF<br>Application.Calculation = xlManual &#8221;自動計算をOF<br>Application.EnableEvents = False &#8221;イベントをOFF</p><p>Dim Time1 As Double, Time2 As Double, Result As Double<br>Dim A As Long, N As Variant</p><p>Time1 = Timer</p><p>&#8221;&#8221;計算開始</p><p>　　　N = Range(Cells(1, 3), Cells(100000, 3))</p><p>For A = 1 To 100000 Step 1</p><p>　　　N(A, 1) = Cells(A, 1) * Cells(A, 2)</p><p>Next A</p><p>　　　Range(Cells(1, 3), Cells(100000, 3)) = N</p><p>&#8221;&#8221;計算終わり</p><p>Time2 = Timer</p><p>Result = Time2 &#8211; Time1<br>MsgBox Result &amp; &#8220;秒で処理しました&#8221;</p><p>Application.ScreenUpdating = True &#8221;画面更新をON<br>Application.Calculation = xlAutomatic &#8221;自動計算をON<br>Application.EnableEvents = True &#8221;イベントをON</p><p>End Sub</p></blockquote>



<p>　　　　</p>



<p>実行してみます。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="218" height="170" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-147.png" alt="" class="wp-image-325" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-147.png 218w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-147-77x60.png 77w" sizes="(max-width: 218px) 100vw, 218px" /></figure>



<p>3.62秒→0.78秒→0.71秒<br>すごく早くなりましたね！</p>



<p>高速化①の内容は有名ですがこちらの内容はあまり有名ではない便利な技です！</p>



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



<p>いかがだったでしょうか。<br>計算で処理速度が遅い場合はぜひ試してみてください。</p>



<p></p>



<p>配列はとても便利な機能なので配列の活用についてもご参考にしてみてください。</p>



<p><a href="https://dokugakuexcel.com/%e3%80%90%e3%83%9e%e3%82%af%e3%83%advba%e3%80%91%e8%a4%87%e6%95%b0%e3%81%ae%e7%b9%b0%e3%82%8a%e8%bf%94%e3%81%97%e3%81%ae%e3%82%b3%e3%83%94%e3%83%bc%e3%83%9a%e3%83%bc%e3%82%b9%e3%83%88%e3%81%8c/">【マクロVBA】複数の繰り返しのコピー&amp;ペーストが面倒くさい!?高速で一括で貼り付けできる配列とは ► 独学エクセル塾 (dokugakuexcel.com)</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://dokugakuexcel.com/%e3%80%90vba%e7%9f%a5%e8%ad%98-%e9%ab%98%e9%80%9f%e5%8c%96%e2%91%a1%e3%80%91%e3%81%82%e3%81%be%e3%82%8a%e7%9f%a5%e3%82%89%e3%82%8c%e3%81%a6%e3%81%84%e3%81%aa%e3%81%84%ef%bc%9f%e5%a4%a7%e9%87%8f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">318</post-id>	</item>
		<item>
		<title>【マクロVBA高速化①】画面更新・自動計算・イベントのOFFで高速化！3つのApplication</title>
		<link>https://dokugakuexcel.com/%e3%80%90vba%e7%9f%a5%e8%ad%98-%e9%ab%98%e9%80%9f%e5%8c%96%e2%91%a0%e3%80%91vba%e9%ab%98%e9%80%9f%e5%8c%96%e3%81%b8%e3%81%ae%e9%81%93%e3%83%bb%e9%ab%98%e9%80%9f3%e7%a8%ae%e3%81%ae%e7%a5%9e%e5%99%a8/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e3%2580%2590vba%25e7%259f%25a5%25e8%25ad%2598-%25e9%25ab%2598%25e9%2580%259f%25e5%258c%2596%25e2%2591%25a0%25e3%2580%2591vba%25e9%25ab%2598%25e9%2580%259f%25e5%258c%2596%25e3%2581%25b8%25e3%2581%25ae%25e9%2581%2593%25e3%2583%25bb%25e9%25ab%2598%25e9%2580%259f3%25e7%25a8%25ae%25e3%2581%25ae%25e7%25a5%259e%25e5%2599%25a8</link>
					<comments>https://dokugakuexcel.com/%e3%80%90vba%e7%9f%a5%e8%ad%98-%e9%ab%98%e9%80%9f%e5%8c%96%e2%91%a0%e3%80%91vba%e9%ab%98%e9%80%9f%e5%8c%96%e3%81%b8%e3%81%ae%e9%81%93%e3%83%bb%e9%ab%98%e9%80%9f3%e7%a8%ae%e3%81%ae%e7%a5%9e%e5%99%a8/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[matsu]]></dc:creator>
		<pubDate>Mon, 28 Jun 2021 12:46:58 +0000</pubDate>
				<category><![CDATA[高速化]]></category>
		<category><![CDATA[マクロVBA応用・便利技]]></category>
		<category><![CDATA[画面更新]]></category>
		<category><![CDATA[自動計算]]></category>
		<category><![CDATA[イベント]]></category>
		<category><![CDATA[OFF]]></category>
		<category><![CDATA[VBA高速化]]></category>
		<guid isPermaLink="false">https://dokugakuexcel.com/?p=300</guid>

					<description><![CDATA[今回はマクロ・VBAの高速化について説明します。皆さんは作成したマクロ・VBAの処理速度が遅くなったことはないでしょうか。 データ数やデータ容量が多ければ大きいほど処理速度は遅くなります。データが逐一入ってくるシステムだ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>今回はマクロ・VBAの高速化について説明します。<br>皆さんは作成したマクロ・VBAの処理速度が遅くなったことはないでしょうか。</p>



<p>データ数やデータ容量が多ければ大きいほど処理速度は遅くなります。<br>データが逐一入ってくるシステムだと追いつかないことも…</p>



<p>そこで高速化のスキルが必要になるのですが<br>様々な手法があるため数回に分けて説明します。</p>



<p>それでは見ていきましょう。</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">■時間がない人用コピーリスト</a></li><li><a href="#toc2" tabindex="0">■比較用プログラムの説明</a></li><li><a href="#toc3" tabindex="0">■画面更新のOFF</a></li><li><a href="#toc4" tabindex="0">■自動計算をオフ</a></li><li><a href="#toc5" tabindex="0">■イベントをオフ</a></li><li><a href="#toc6" tabindex="0">■変更前と比較</a></li><li><a href="#toc7" tabindex="0">&#x2b1b;︎公式の説明</a></li><li><a href="#toc8" tabindex="0">■まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">■時間がない人用コピーリスト</span></h2>



<p><strong><span class="fz-22px"><span class="marker-under">・使用方法</span></span></strong></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Application.ScreenUpdating = False &#8221;画面更新をOFF<br>Application.Calculation = xlManual &#8221;自動計算をOFF<br>Application.EnableEvents = False &#8221;イベントをOFF</p><p>&#8216;ここに高速化したいプログラム</p><p>Application.ScreenUpdating = True &#8221;画面更新をON<br>Application.Calculation = xlAutomatic &#8221;自動計算をON<br>Application.EnableEvents = True &#8221;イベントをON</p></blockquote>



<p></p>



<p>上記のように高速化したいプログラムに挟むように設置してください。</p>



<h2 class="wp-block-heading"><span id="toc2">■比較用プログラムの説明</span></h2>



<p>今回は下記のようなデータを用意しました。<br>A・B行に100000行、ランダムなデータがある状態です。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="475" height="322" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-136.png" alt="" class="wp-image-301" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-136.png 475w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-136-300x203.png 300w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-136-89x60.png 89w" sizes="(max-width: 475px) 100vw, 475px" /></figure>



<p>データの処理方法としてA1とB1の数値をかけてC1に出力する仕組みとします。<br>その処理を100000行繰り返すのにかかった時間を基準としましょう。</p>



<p>用意したプログラムがこちら。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="696" height="472" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-137.png" alt="" class="wp-image-302" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-137.png 696w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-137-300x203.png 300w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-137-88x60.png 88w" sizes="(max-width: 696px) 100vw, 696px" /></figure>



<p>一応、コピーできるように貼っておきます。</p>



<p></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Sub 高速化①()</p><p>Dim Time1 As Double, Time2 As Double, Result As Double<br>Dim A As Long</p><p>Time1 = Timer</p><p>&#8221;&#8221;計算開始<br>For A = 1 To 100000 Step 1</p><p>　Cells(A, 3) = Cells(A, 1) * Cells(A, 2)</p><p>Next A<br>&#8221;&#8221;計算終わり</p><p>Time2 = Timer</p><p>Result = Time2 &#8211; Time1<br>MsgBox Result &amp; &#8220;秒で処理しました&#8221;</p><p>End Sub</p></blockquote>



<p>では実行してみましょう。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="450" height="363" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-138.png" alt="" class="wp-image-303" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-138.png 450w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-138-300x242.png 300w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-138-74x60.png 74w" sizes="(max-width: 450px) 100vw, 450px" /></figure>



<p>3.62秒かかりましたね。これを基準に早くしていきます。</p>



<h2 class="wp-block-heading"><span id="toc3">■画面更新のOFF</span></h2>



<p>まず、画面更新についてです。<br>マクロ・VBAでは通常、進行に合わせて過程を画面で確認できるようになっています。<br>要は<br><strong><span class="marker-under">計算→画面出力→計算→画面出力<br>を100000回繰り返している</span></strong>流れです。</p>



<p>これを下記のコードでOFFにします。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><span class="fz-20px"><strong>Application.ScreenUpdating = False &#8221;画面更新をOFF</strong></span></p></blockquote>



<p>これにより<br><strong><span class="marker-under">計算*100000→画面出力</span></strong><br>のように画面出力が<span class="bold-red">1回</span>になります。</p>



<p>出力回数が減るので高速化につながる仕組みです。</p>



<h2 class="wp-block-heading"><span id="toc4">■自動計算をオフ</span></h2>



<p>次に自動計算についてです。<br>エクセルはセルを参照して計算していると元の数値を変えると参照先も変わりますよね。</p>



<p>こちらも<br><strong><span class="marker-under">入力→再計算→入力→再計算</span></strong><br>のように繰り返してしまいます。</p>



<p>なので実行中、セルの参照がない場合はOFFにしましょう。<br>下記のコードでOFFにします。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong><span class="fz-22px">Application.Calculation = xlManual &#8221;自動計算をオフ</span></strong></p></blockquote>



<p>これにより<br><strong><span class="marker-under">計算*100000→まとめて再計算</span></strong><br>のようになります。</p>



<h2 class="wp-block-heading"><span id="toc5">■イベントをオフ</span></h2>



<p>最後はイベントのオフです<br>ここで言われるイベントとはクリックや内容更新、セルのアクティブにより発生するイベントをOFFにするものです。</p>



<p>こちらは下記のコードでOFFにします。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><strong>Application.EnableEvents = False &#8221;イベントをOFF</strong></p></blockquote>



<h2 class="wp-block-heading"><span id="toc6">■変更前と比較</span></h2>



<p>では実際にプログラムに入れてみます。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="728" height="564" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-139.png" alt="" class="wp-image-304" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-139.png 728w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-139-300x232.png 300w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-139-77x60.png 77w" sizes="(max-width: 728px) 100vw, 728px" /></figure>



<p>このようになりました。<br>またまたコピー用載せておきます。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Sub 高速化①()</p><p>Application.ScreenUpdating = False &#8221;画面更新をOFF<br>Application.Calculation = xlManual &#8221;自動計算をOF<br>Application.EnableEvents = False &#8221;イベントをOFF</p><p>Dim Time1 As Double, Time2 As Double, Result As Double<br>Dim A As Long</p><p>Time1 = Timer</p><p>&#8221;&#8221;計算開始<br>For A = 1 To 100000 Step 1</p><p>　　Cells(A, 3) = Cells(A, 1) * Cells(A, 2)</p><p>Next A<br>&#8221;&#8221;計算終わり</p><p>Time2 = Timer</p><p>Result = Time2 &#8211; Time1<br>MsgBox Result &amp; &#8220;秒で処理しました&#8221;</p><p>Application.ScreenUpdating = True &#8221;画面更新をON<br>Application.Calculation = xlAutomatic &#8221;自動計算をON<br>Application.EnableEvents = True &#8221;イベントをON</p><p>End Sub　　</p></blockquote>



<p></p>



<p>ちなみにすべての処理が終わったらOFFにした項目はONに戻しましょう。</p>



<p><strong>Application.ScreenUpdating = True &#8221;画面更新をON<br>Application.Calculation = xlAutomatic &#8221;自動計算をON<br>Application.EnableEvents = True &#8221;イベントをON</strong></p>



<p></p>



<p>では実行してみましょう。</p>



<figure class="wp-block-image size-large"><img decoding="async" width="539" height="348" src="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-140.png" alt="" class="wp-image-305" srcset="https://dokugakuexcel.com/wp-content/uploads/2021/06/image-140.png 539w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-140-300x194.png 300w, https://dokugakuexcel.com/wp-content/uploads/2021/06/image-140-93x60.png 93w" sizes="(max-width: 539px) 100vw, 539px" /></figure>



<p>結果が出ました！</p>



<p><strong>3.62秒から2.20秒と1.42秒短縮しました。<br>結果的に39%短縮短縮です。</strong></p>



<p></p>



<h2 class="wp-block-heading"><span id="toc7">&#x2b1b;︎公式の説明</span></h2>



<p>わかりやすいように説明したため公式と使用する語句が異なりますが<br>マイクロソフト公式の説明については下記のリンクを参照してください。☟</p>



<p><a href="https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.screenupdating">Application.ScreenUpdating プロパティ (Excel) | Microsoft Learn</a></p>



<p><a href="https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.calculation">Application.Calculation プロパティ (Excel) | Microsoft Learn</a></p>



<p><a href="https://learn.microsoft.com/ja-jp/office/vba/api/Excel.Application.EnableEvents">Application.EnableEvents プロパティ (Excel) | Microsoft Learn</a></p>



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



<p>いかがだったでしょうか。<br>私も大容量の処理には必ず入れているテンプレートです。</p>



<p>ぜひ高速化に役立ててみてください。</p>



<p></p>



<p>次回の高速化の記事はこちらから☟</p>



<p><a href="https://dokugakuexcel.com/%e3%80%90vba%e7%9f%a5%e8%ad%98-%e9%ab%98%e9%80%9f%e5%8c%96%e2%91%a1%e3%80%91%e3%81%82%e3%81%be%e3%82%8a%e7%9f%a5%e3%82%89%e3%82%8c%e3%81%a6%e3%81%84%e3%81%aa%e3%81%84%ef%bc%9f%e5%a4%a7%e9%87%8f/">【VBA知識 高速化②】あまり知られていない？大量データで処理が遅いVBAを高速化 &#8211; 独学エクセル塾 (dokugakuexcel.com)</a></p>



<p></p>



<p>それでは次回の記事でお会いしましょう。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dokugakuexcel.com/%e3%80%90vba%e7%9f%a5%e8%ad%98-%e9%ab%98%e9%80%9f%e5%8c%96%e2%91%a0%e3%80%91vba%e9%ab%98%e9%80%9f%e5%8c%96%e3%81%b8%e3%81%ae%e9%81%93%e3%83%bb%e9%ab%98%e9%80%9f3%e7%a8%ae%e3%81%ae%e7%a5%9e%e5%99%a8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">300</post-id>	</item>
	</channel>
</rss>
