VBAの高速化!コピぺで簡単!文系初心者もわかるVBAの変数

 

いたちめです。

 

僕がVBAの高速化させることを楽しんだ記録、備忘録を兼ねてます。

今回はコピペでできるもの、変数でできるものの二つを紹介します。

 

 

簡単高速化!のコピペとその意味

誰でもできるコピペから始めます。

 

Application.ScreenUpdating = False

Application.EnableEvents = False

Application.Calculation = xlCalculationManual

 

この三行をです。

これを「sub」の直下とかVBAの変数を定義したりしたあとにコピペします。

 

 

で、「end sub」の前には、

 

Application.ScreenUpdating = True

Application.EnableEvents = True

Application.Calculation = xlCalculationAutomatic

 

これで元に戻します。

 

かなりざっくりした説明

Application.ScreenUpdating = False

画面表示をOFFにする。

Sheet1からsheet2へ移動したり、別ブックを開いたり、セルに入力したりなどの画面移動がとまる。動いてんじゃねぇてこと。

 

Application.EnableEvents = False

通知機能をOFFにする。

アプリケーションからのイベント通知するプロパティ、いちいち確認いらねぇから!っててこと。

 

Application.Calculation = xlCalculationManual

計算方式を手動計算に切り替える。

セルごとの計算を自動計算から手動計算に切り替えて、計算問題は面倒だから後回しするってこと。

 

 

注意というか当たり前のことなんだけど。

計算方式の高速化は「自動計算から手動計算」に変更するので、

セルに数式を入れているいる場合、それが計算されないままマクロが終了するってこと。

 

例えば、

A1セルとB1セルに マクロでそれぞれ「1」を入力

C1セルに数式「=sum(A1:B1)」が入力されてるとき。

 

こういったものがあるときは、「計算方式の高速化」のコピペは外しておいた方がいいですね☆

 

 

スポンサーリンク

変数を決めてValiant型からの脱出

VBAを始めると「変数ってなんだ?」ってなりますが、イメージは箱。AMAZONの箱。

でValiant(バリアント)って万能な箱、なんでも入る箱。ただし、デカい。

 

デカくて重たい箱だから、メモリを食い散らかす。

 

万能なんだけど重たい箱を使うより、入れたいものにあったサイズの箱を使う。

これが変数を宣言するっていう変数を決めること。

 

何にも決めてないと、いつだってデカい箱を使う。

プラカラー一つを段ボール箱で送ってくれるAMZON様みたいにね。

 

たとえば

 

i = 12345

 

みたいに何も変数を宣言していないときや

 

Dim i as Valiant

i = 12345

 

Valiant型で変数を宣言したとき、これは数字でもいけるし文字でもいける。

 

対して、

 

Dim i as long

i = 12345 って変数を決めてあげるとiは数値で12,345となり

 

Dim i as string

i = 12345 って変数を決めてあげるとiは文字で12345となる。

 

 

この違いです。数値のときは別にlongじゃなくても構いません。

 

 

例題で実践してみよう♪

下記のVBAを適当に標準モジュールに添付して、コピペと変数の宣言をやってみよう☆

 

Sub 実践してみよう()

 

ThisWorkbook.Activate

Sheets("sheet1").Select

Range("A1").Value = 1

 

Sheets("sheet2").Select

Range("A2").Value = 2

 

Sheets("sheet3").Select

Range("A3").Value = Sheets("sheet1").Range("A1") + Sheets("sheet2").Range("A2")

 

End sub

 

 

正解でも最適解でもないけど、僕なりの高速化として

 

Sub 実践してみよう me()

 

Dim sh1 As Worksheet

Set sh1 = ThisWorkbook.Sheets("sheet1")

Dim sh2 As Worksheet

Set sh2 = ThisWorkbook.Sheets("sheet2")

Dim sh3 As Worksheet

Set sh3 = ThisWorkbook.Sheets("sheet3")

 

Application.ScreenUpdating = False

Application.EnableEvents = False

 

sh1.Activate

sh1.Range("A1").Value = 1

sh2.Range("A2").Value = 2

sh3.Range("A3").Value = sh1.Range("A1") + sh2.Range("A2")

 

sh1.Activate

 

Application.ScreenUpdating = True

Application.EnableEvents = True

 

End Sub

 

 

僕なりのこだわり。

シートとセルで変数を宣言しておく

入力をするシートやセルが決まっていても名前を変更したりすると、

その記載を全て変更するので、めんどくせぇ

 

実にめんどくせぇ。

 

何度となく変更していけば、このめんどくせぇってのがわかります。

なので、もれなくシートは全て。変動しやすいセルについてはなるべく変数を宣言します。

 

今回の例題みたいに短く、少ないシートのときはいいですけどね。

スポンサーリンク
おすすめの記事