値の入力(代入)と比較
ExcelVBAでは、値の入力(代入)と比較が似ています
値の入力は、Range(“A1”)=100
比較は、この条件式のままIfなどを使用すると比較になります
文字列の扱い方
関数でも同じなのですが、コード中に文字列を扱いたい場合は「”(ダブルクォーテーション)」で挟む必要があります
Shift+2キーで入力できる文字です、自動的に変換はされますが半角で入力します
「”文字列”」 こんな感じで使用します
また、文字列の結合は「&」を使用します
「”単価:” & 10 & “円”」 → 「単価:10円」となります
改行は「vbLf」を使用し、結合と組み合わせます
「”商品A” & vbLf & “単価:” & 10 & “円”」
↓
「商品A
単価:10円」となります
改行には「vbCr」「vbCrLf」が他にもあります
どれもVBAで改行として使用できますが、セル内での改行は「vbLf」が使用されるのでそれに合わせておいたほうが、改行の検索する際に便利です
ちなみに、CrとLfはそれぞれ改行文字として1文字入っています
なので、置換や文字数のカウントでは注意が必要です
ワイルドカード文字
ワイルドカード文字とは、文字列の検証に使う特殊な文字の事です
Excelの検索や置換でも使用するものです
「?」は任意の1文字を表します
「*」は不特定の文字を表します
例
「VBAの部品庫」を検証する場合
「VBAの???」=○
「VBAの????」=×
「VBAの*」=○
「*VBA*」=○
これらの文字を扱うことで、完全一致ではないものを検索が可能となり
条件に一致するものをまとめて操作することが出来るようになります
FindメソッドやDir関数でこれらの文字を扱うことで、完全一致ではないものを検索が可能となり条件に一致するものをまとめて操作することが出来るようになります
日付データの入力
日付データは文字列や数値とは違う入力ができます(実際の日付データの中身は数値なので数値としての入力も問題ありません)
「#m/d/yyyy#」の形式で入力すると、日付として扱えます
「#1/31/2000#」 こんな感じで使用します
また、時刻まで指定する場合は「#m/d/yyyy h:m:s#」というように西暦年の後にスペースを置いてから時分秒を「:」で区切り入力します
「#1/31/2000 20:13:25#」 こんな感じで使用します
条件式の等符号
Ifで条件式を使う際に必要なのが等符号です
ExcelVBAは代入と比較が同じ「=」を使うので、混乱しないようにしましょう
A=B → AとBは同じ
A<>B → AとBは同じではない
A>B → AはBよりも大きい
A<B → AはBよりも小さい
A>=B → AはB以上
A<=B → AはB以下
文字列の比較は「Like」を使用、ワイルドカード文字も使用できます
A Like “*あ*“ → Aは文字列「あ」を含む
オブジェクトの比較は「Is」を使用
A Is Nothing → オブジェクトAは「Nothing」である(オブジェクトの初期値)
処理の停止
無限ループや処理時間が長く一時処理を停止したい場合は「Escキー」もしくは「Ctrlキー+Breakキー」を押下します
1回では止まらない事もあります、あきらめず押しましょう
Selectionについて
当サイトでは、1行のステートメントでコピペして作るという想定のもと構成していることからセル範囲のオブジェクト指定には「Selection」を使用しています
ただ、このSelectionというのは実際にはワークシート上にあるオブジェクトが対象となっています
つまり、セルだけでなく図形等も含むオブジェクトがSelectionの対象になっています
なのでセルのプロパティやメソッドを、他のオブジェクトで実行するとエラーが発生する恐れがあります
Selectionはこのコード実行前に必ずオブジェクトの指定を行っているはずなので問題は出にくいかもしれませんが、意識として「Selection=選択中のセル」とはならないということを持っておいてください
パスの¥マークとバックスラッシュについて
絶対パスなどで使用するフォルダ内を表す文字「\」について
この画面ではどう見えていますか?
Web上では「バックスラッシュ」という記号になっていることが多いと思います
ですが、エクスプローラーでは「半角の¥マーク」です
なので当然VBAコード上も後者です
これは文字コードが全く同じなので、どちらに見えていても動きには全く問題ないので安心してください
「コピペしたら¥マークになった」これは正常です
引数の入力方法
引数の入力には2通りの方法があります
引数の名称を指定して入力する方法と名称を省略して入力する方法です
例えば、MsgBox関数でいうと
引数の名称指定あり → MsgBox Title:=”タイトル”, Prompt:=”本文”
引数の名称指定省略 → MsgBox “本文”, , “タイトル”
こんな形の指定方法になります
実行時は全く同じ結果が表示されます
引数はインテリセンス入力ができないので、入力はめんどうです
なのでほとんどの場合は後者の省略したほうを使用することが多いです
ただ、当然引数を知らなければ意味不明です
引数の数が多く、途中で改行でもすればさらに分かりにくくなります
とはいえ知らずに作成するのも不可能なので、作成できる時点で知っているはずです
なのに省略をしない方法の利点は、順番を入れ替えれる点と指定外は非入力で良い点かと思います
省略法の場合は、引数の順番は固定で省略時は「,」だけ入力する必要があります
省略しない方法は、順番も好きなように入れ替えれるので分かりやすくなる可能性もあります
先にタイトルがあって、本文がある流れの方が分かりやすければ前者が有用です
このサイトでもどちらかに固定はしていません、引数の必要なコードで臨機応変に使い分ければいいかなと思います
(引数が多く、コピペするひとがわかりにくくなりそうなときは非省略法で解説してます)
日本語の使用について
VBAでは文字コードがUnicode形式となっています
これは1つの文字に対して、2バイトで表現する形式です
半角の文字列であっても2バイトで表現されます
このおかげでVBAでは日本語の変数も使用できますし、日本語に連番で「1」などの半角文字と混在させてもプログラムに支障が無いようになっています
アルファベット圏では無い日本人にはありがたい形式ですね
色々とWeb上でも賛否両論ある日本語使用でありますが、自分としては使用することをおすすめします
主な利点として「コメントが必要ない程分かり易くなる・コード中に出てきたらいきなり日本語なので変数と分かり易い」辺りかなと思います
あと感情的な理由ですが、Microsoftのプログラマーさん達がわざわざ日本語などの母国語文字を使えるように仕様を作ってくれているのです
自分でもそうですが、せっかく作った仕様は使い尽くして欲しいと感じますしね
配列変数の下限値について
配列変数の下限値は通常「0」から始まります
ですが「Option Base」や「( 3 To 5)」などの使い方によって変動してきます
なので、下限値が「0」ではない可能性はあります
ただそれには上記の特別な使い方をした場合に限られます
配列というメモリ上のデータの連番の始点を可変にすることもあまりおすすめできません
なので、このサイトでは下限値は「0」であるという想定の下解説を行いますし
上記の下限値を変更するコードを記事にもしません