通貨型の変数宣言

通貨型の変数です。お金などの正確な数字の計算に使用します

'通貨型の変数宣言
Dim 通貨型 As Currency

Currency型は通貨型と呼ばれ、Long型よりも大きな数字を扱うことができる上にマイナスの負の数値と、4桁の小数点数値も扱えます

この変数の型は、お金など正確な数字を計算する場合に特に使用するように推奨されている型になります

小数点数値の範囲が限られてはいますので、基本的に小数点数値はDouble型を使用しますが、このCurrency型の範囲での計算であればこちらの型を使用するほうが正確に計算できます

代入可能な数字の範囲は、負を含む922兆程です、小数点数値は0.0001までを扱えます

金額計算で考えると日本の国家予算が100兆円ぐらいなので、日本9個分ということで、まったく困ってしまう範囲では無さそうですね

Witheventsについて

Witheventsキーワードを使用すると、変数オブジェクトでイベントの作成が可能になります。最強説があります

イベント処理において、「Withevents」キーワードは最強です
身も蓋も後述していきますが、マジ最強伝説です

このキーワードは変数の宣言時に使用します

Dim WithEvents エクセル As Excel.Application

このコードの様に変数名の前に挿入します
このコードではExcelを代入する変数の宣言になります
このコードに関しては以下の記事に詳しく解説しています

Excelのイベントを使用する場合には必須のキーワードです
なので、主に使用される場面もこの使用場面になります

ですが、このキーワード最強伝説はイベント処理の対象を動的に変更できる点です

「UserFormでコントロールの動的新規作成は行ったはいいけど、それに処理が組み込めないなら意味無いやん」

「使いましょう、Withevents」

「ワークシートに埋め込みのコントロール、チェックボックスなどを大量に作成したけど全てのコントロールのイベントに同じ処理を作成すると、作成も大変だし、修正があったときはもっと大変やん」

「使いましょうよ、Withevents」

「シートイベントで、見積書などの入力補助処理を作成しました
原紙からコピー追加でシートが増えていきますが、シートイベントも同時にコピペされるので作成は問題ありませんでした、でも修正があって、シート作りすぎてて大変やん」

「もう使ったら、ええやん!Withevents」

くどいので、これ以上はあげませんが
要はイベントが複製される場合、処理中に作成したオブジェクトに対してイベントを作成する場合、これらに使用することができます

また、プロは嫌うかもしれませんが、通常のシートイベントなどをUserFormモジュールにまとめて作成することもできます
処理をまとめることは、メリットもデメリットもあります
メリットの方が大きい場合もあるので利用できます

記事上部のリンクにある「Excelイベントの作成方法」記事内で解説していますが、コードを入力するだけでイベントの作成が可能なのもいいよね

変数を解放すればイベントが発生しなくなるので、UserFormのコントロール系であればイベント無効を応用的に作成できるのもいいよね

やっぱイベント処理において、Witheventsキーワード最強です

ただ、このキーワードで作成出来るイベントはExcelイベント以外は全てのイベントを作成できない点には注意が必要です
作成出来るイベントの中で処理を考えましょう

そうです、全て完璧な存在より少し欠点があるくらいが愛嬌もあるというやつなので、これを弱点とは捉えなくていいんです
コーヒーにチョコレート!
からあげと餃子にビール!
悟空とベジータにポタラ!
イベント処理にWithevents!みんな最強や!

定数の宣言方法

処理の実行中は変更される事の無い定数の使用方法と解説

'定数を宣言して値の代入を行う
Const パス名 As String = "ファイルパス文字列"

定数を使用するには「Const」を使用します

基本的な宣言の仕方は変数と同じで、定数名とその後にデータの型を宣言します
(文字列型変数の宣言方法はこちら)

定数とは、文字通り定まったデータです
宣言時にデータの代入を行い、代入後にデータの変更は出来ません

基本的には変数を変更しなければ同じ役割で対応できますが、使用する利点は何より宣言セクションで値の代入ができる点です
変数の場合はプロシージャの中でデータを代入しますが、定数はコンパイル時に代入されます

コンパイルとは、実際に処理が実行される前段階の事です

宣言セクションについて

定数の宣言方法と場所
赤枠内のプロシージャの外上が宣言セクション

このように宣言セクションで値を代入させることは、コードの可読性を高めます

例のような固定パスを定数とした場合に、フォルダ名の変更などによりパスが変更される可能性があります
これを変数でプロシージャ内の使用部分で宣言、代入をしていた場合にその位置を探すのが大変です

宣言セクションに定数で代入をしておけば、モジュール最上段にそのコードがあるので、パスの修正が必要な際に見つけやすくなります
これは、自分だけでなく他の人のためにも有用な方法です
優位性が薄まりますが、プロシージャ内に宣言することも変数同様に可能です

なお、定数は文字列や数値で使用しオブジェクトは使用できません
また、宣言セクションで変数に値を代入することは出来ません(宣言自体は可能です)

ONOFF型の変数宣言

真・偽(True・False)のON・OFF切替のような2択にはBoolean型を使用します

'ONOFF型の変数宣言
Dim ブール型 As Boolean
ブール型 = True 'ON
ブール型 = False 'OFF
'ONOFF切替
ブール型 = Not ブール型

ONOFF型の変数は「Boolean型」を使用します
この変数は2通りの値しか代入できません
「True」と「False」の2つのみです

一応、「True」がON、「False」がOFFという感じで考えてください
もちろんこれは処理の作り次第で入れ替えられますが、初期値が「False」なので最初がOFFという方が自然です

この変数を使用するのは、フラグ処理で使うことが多いです

フラグという単語自体はそれほど専門的な単語とは思いませんが、ONになった状態のことをフラグが立ったという表現をします

この変数を最初に使ったのは、ユーザーフォームのイベント無効のためでした
ユーザーフォームにはイベントを無効にするプロパティが存在しないため、自分で無効処理を作る必要がありました
そんな時に、使ったのがこの変数です

ユーザーフォームの特定の処理を実行したら、まずはこの変数をTrueにします
無効にしたいイベントのプロシージャの先頭に、この変数の状態で処理を実行するかを分岐させます
特定の処理が終わったら、変数をFalseに戻します

イベントの処理は変数がFalseであれば実行されるため、任意のタイミングでイベントを無効にすることが出来ます

これを処理中はフラグを立てておく、という表現です

またこのTrueとFalseというのは、文字列ではなくキーワードというVBAのコードの一部として認識されるのでコーディング上もこの変数を使ったほうが分かり易くなります

ブール型 = True 'ON
ブール型 = False 'OFF

例コードで、2つ目と3つ目はそれぞれON・OFFを切り替えています

TrueとFalseを指定せずに切り替え

'ONOFF切替
ブール型 = Not ブール型

さらに4つ目のコードは、簡単にON・OFFを切り替える方法として紹介しています
この右辺についている「Not」はその後に続くものの否定になります
ここでこの変数の最大限の効力を発揮します
TrueのNotはFalse、FalseのNotはTrueとなります
なので、いちいちON・OFFを書き込まなくても、このコードの発生回数で切り替えが制御できることになります

もちろん、もともとの値も変更後の値も可変でコード上からは分からないのでこれだけで良いとはなりませんが、便利な使い方です

さらにこの使い方は、TrueとFalseをプロパティに持つものすべてに対して有効です
チェックボックスのValueもこれで簡単に切り替えたりできますので、他でも使用してみてください

文字列型の変数宣言

文字列を扱う際にはString型を使用します。固定長の宣言方法もあります

'文字列型の変数宣言
Dim 文字列型 As String
'5文字まで代入できる文字列型の変数宣言
Dim 制限文字列型 As String * 5

文字列の変数には「String」型を使用します
また、この変数には文字数の制限を行う場合とそうでない場合の2種類が存在します

Dim 文字列型 As String

文字数の制限を行わないのが、1つ目の例コードになります
この文字列を「可変長文字列」といい、0文字から自由に代入した文字列がそのまま代入できます

Dim 制限文字列型 As String * 5

文字数の制限を行うものが、2つ目の例コードになります
この文字列を「固定長文字列」といい、定まった文字数を常に返す変数になります

基本的な文字列の使用時には1つ目の可変長文字列を使用すればいいです

固定長は固定文字数なので、制限文字数が代入されない場合は空白で文字数を埋めて返されます
例えば、例コードでは5文字の固定長となっています

制限文字列型 = "123"
→→→ 123  

この変数に「123」を代入すると、「123」と空白が2文字分追加されて5文字の固定長文字列になります

制限文字列型 = "123456"
→→→ 12345

また制限を超えた場合は、以降の文字は切り捨てられます

今回の例のように数値でも「”」で囲むことによって文字列にして代入させることができます

ただ、この「”」を代入させたい場合もあります
その方法に関しては以下の記事を確認してください

万能型の変数宣言

Variant型は値もオブジェクトも配列も代入できる万能の型の解説

'万能型変数の宣言
Dim 万能型変数 As Variant
'万能型変数の省略宣言
Dim 省略万能型変数

万能型変数とは、値とオブジェクトどちらのどの型も代入することのできる変数の型です
また、2つ目の例のように型の宣言を省略した場合はこの型に指定されます

型の指定が必要なく便利なように感じるかもしれませんが、そういった意味での使用は絶対に行わないでください
使用に関しての注意点がいくつかあります

●メモリの使用が大きくなる可能性がある
●値とオブジェクトどちらでも入るため、役割が読み取りにくい

無作為に使いすぎると困る点ですね
基本的には、配列を使うときや戻り値が「Variant型」の時に使用します
便利なので、という使い方をすることはありません

オブジェクト型の変数宣言・代入・解放

Object変数の宣言から解放までの基本的な使用方法

'オブジェクト型変数の宣言
Dim オブジェクト変数 As Object
'オブジェクトの代入、Setを使用する
Set オブジェクト変数 = ActiveCell
'変数の解放
Set オブジェクト変数 = Nothing

オブジェクト型の変数とは、通常の変数は値を代入するものです
それと違うのは物自体を扱うのがオブジェクトです

A1セルに「100」と数値が入力されている場合の値は「100」です
それに対して、オブジェクトというのはA1セルそのものとなります

オブジェクトというのは汎用的な型名なので、実際このようにセルを使用する場合は「Dim オブジェクト変数 As Range」という宣言の仕方をするのが通常です
こうしておけば、このオブジェクト変数が何を対象にしているかが分かりやすくなるし、型に使用できるプロパティやメソッドがインテリセンス入力もできるようになるので利用しましょう

オブジェクトとは非常に多くの種類があります
A1セルはオブジェクト、A1セルのあるワークシートもオブジェクトですし
開いているブックもオブジェクト、さらにはExcel自体もオブジェクトです

オブジェクトの代入は文頭に「Set」を使用します
これはオブジェクトの代入の意味合いになるので必ずつけます
対して、値の代入には何もありませんが「Let」が省略されています
なので、値はLet・オブジェクトはSetです

また、オブジェクト型の利用が終わったら「解放」します
「Nothing」を代入することで解放するという操作になります
これはオブジェクト型の初期値になります

オブジェクトは値変数と違い、その変数自体があらゆるプロパティをもっておりますのでメモリ使用量を考慮するとしておいたほうが良いです

超長整数型の変数宣言(64bit)

64bit環境でのみ使用可能なLong型よりも大きな整数値変数はLongLong型を使用します

'超長整数型の変数の宣言
Dim 超長整数型変数 As LongLong

超長整数型は64bitのみ使用できます
32bit以下では実行時エラーが発生します

この型は、主にWinAPIで64bitでの利用時に使用する型ですが変数の型としても使用は可能です

整数なので小数点以下は切り捨てられます
「LongPtr型」という型を使用すると、bitに合わせて32bitならLong型になり、64bitならLongLong型に自動的に変換してくれる変数の型があります(それぞれに変換されるので厳密にはLongPtr型は存在しません)
ですが、結局代入する数値にもその判定が必要になりますので通常は使用しないようにしたほうが良いと思います

ちなみにこのPtrというのは、ポインターの事でこれにはPCの64bit環境ではこのポインターやハンドル値などのアドレス領域が拡大していることに対応して数値の範囲が広がっているようです
ようするにこれらのアドレス領域を使用しない状況で使用する意味はありませんので、基本としてはWinAPI使用時に使ってください

日付型の変数宣言

日付・時刻データを扱う際にはDate型を使用します

'日付型変数の宣言
Dim 日付変数 As Date

日付型の変数は「Date型」を使用します
日付型なので、時刻までのデータが収まるようになっています

日付データは、Excelでは内部数値で処理されています
整数部分が年月日で、小数点以下が時刻データです

独特のデータ形式なので数値型の変数での使用はしませんが、日数の計算などではLong型を使用したりもするので、最終的な出力形式が日付であればこの型を宣言してください
また、この型指定を行って代入すれば日付データと数値データの変換がいらないのも利点とおもいます

少数点数値の変数宣言

小数点を含む実数値にはDouble型を使用します

'小数点値を含む変数の宣言
Dim 小数点変数 As Double

小数点以下の数値も扱う場合は、「Double型(倍精度浮動小数点数型変数)」を使用します

漢字にするとよく分かりにくいですが、小数点以下の数値を扱うものと思ってください

同じように小数点値を扱える「Single型」もありますが、なんとなく英単語的に分かると思いますが、Single型はDouble型よりも扱える数値の幅が小さくなっていますので、使用メモリもその分小さくなります

ですが、小数点以下を扱う際は割り切れない数値であったりすることや
精度の観点でも、Double型使用の一択で問題ありません
また関数の戻り値がSingle型の物もありますが計算結果がその範囲外も出てくるのでその関数の代入変数もDouble型を使用してください