VBA10大躓きポイント(初心者が躓きやすいポイント)
多くの人のVBA学習のお手伝いをしてきましたが、共通するVBA学習での躓きポイントはいくつかあります。
ここでは多くの人が躓くVBAの10大躓きポイントを解説していきます。
10大と言っても特に統計をとった訳ではありませんので経験からの感覚的なものです。
ほとんどの内容について既存の解説ページがありますので、補足説明をしつつ既存ページへのリンクを掲載しています。
VBA10大躓きポイントのページ内目次
✅どこでインデントすれば良い
✅カンマ「,」とピリオド「.」と半角スペース「 」
✅「:=」ってどこで使う
✅「""」が多すぎて
✅暗黙の型変換とは
✅用語が難しい(オブジェクト、プロパティ、メソッド)
✅配列とは
✅ByValとByRef
✅VBAを書く場所
変数とは
変数と定数のVBAの文法
第12回.変数宣言のDimとデータ型|VBA入門
変数の命名と考え方
変数とプロシージャーの命名について|VBA技術解説
オブジェクト変数
第52回.オブジェクト変数とSetステートメント|VBA入門
変数のメモリアドレス
興味があれば読んでみてください。
VBAにおける変数のメモリアドレスについて|VBA技術解説
どこでインデントすれば良い
こうしなくてはダメだという規則があるわけではありませんが・・・
とはいえ、一般的に推奨されるインデントの基本は押さえておきましょう。
VBAでの推奨インデント
VBE(Visual Basic Editor)でのインデント操作
ショートカット キー | 説明 |
Tab | インデント |
Shift + Tab | インデントを戻す |
カンマ「,」とピリオド「.」と半角スペース「 」
VBAにおけるピリオドとカンマとスペースの使い方|VBA技術解説
ピリオドはくっつけるもの
カンマは区切るもの
スペースは単語の区切り
「:=」ってどこで使う
Pythonでは、「セイウチ演算子」「ウォルラス演算子」などと呼ばれています。
VBAでは特定の呼び方はなく、
「コロンイコール」
と呼ぶのが普通です。
第25回.名前付き引数について|VBA入門
「"」が多すぎて
文字列として「"」を記述するときは、「"」を連続2つで記述します
フォルダ指定の文字列作成で良く書かれるVBA
Dim sPath As String, sSubDir As String
sSubDir = "DATA"
sPath = ThisWorkbook.Path & "\" & sSubDir & "sampla.xlsx"
この"\"はフォルダの中のサブフォルダを指定する場合のフォルダ連結の文字列としての"\"です。
& は、VBAの文字列連結の演算子の& になります。
「\」も「&」も記号ですが、文字列として扱うものは"の中に入れますが、演算子は"で囲んだりせずにそのまま書きます。
セルに数式を入れるVBA
=IF(A2="","",A2*2)
この数式を入れるVBAです。
Range("B2").Formula = "=IF(A2="""","""",A2*2)"
数式には「""」という記述は良く出てきます。
「"」が使われている文字列を扱うときは、
メモ帳等で、「"」を「""」に置換するのが一番手っ取り早いです。
セルの数式をコピーしてメモ帳に貼り付け、
「"」を「""」に置換した後にVBAで""の中に貼り付けます。
暗黙の型変換とは
この、型変換がいつどのように行われるかの全てを覚えるのは困難です。
そのため、意図しない場面で型変換が行われてしまい、意図しない結果になってしまうことがあります。
型変換できるものは自動で型変換します。
型変換できないものはエラーとなります。
まずはこの基本だけは覚えておいてください。
第12回.変数宣言のDimとデータ型|VBA入門
代入の場合
この時、代入先の型に変換できない場合に型エラーとなります。
そのデータ型が格納できる数値範囲を超えている場合もエラーになります。
Integerは-32,768 ~ 32,767の範囲ですので、この範囲外の数値を入れるとエラーになります。
演算の中では
算術演算子であれば、数値変換後に計算されます。
ただし、
+演算子は、足し算の演算子であると同時に文字列結合の演算子でもあるので、
2項とも数値なら足し算、片方でも文字列なら文字列結合が行われます。
(文字列結合については次々回に説明します。)
データ型変換関数一覧
関数名 | 戻り値の種類 | 引数の範囲 |
CBool関数 | Boolean | 任意の有効な文字列式または数式を指定します。 |
CByte関数 | Byte | 0 から 255。 |
CCur関数 | Currency | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807。 |
CDate関数 | Date | 任意の有効な日付式。 |
CDbl関数 | Double | 負の値の場合は -1.79769313486231E308 ~ -4.94065645841247E-324 正の値の場合は4.94065645841247E-324 ~ 1.79769313486232E308。 |
CDec関数 | Decimal | ゼロスケールの値 (小数部分がない値) の場合は 79,228,162,514,264,337,593,543,950,335 です。 小数点以下が 28 桁の値の場合は 7.9228162514264337593543950335 です。 0 以外で可能な最小値は 0.0000000000000000000000000001 です。 |
CInt関数 | Integer | -32,768 から 32,767。 小数点以下は丸められます。 |
CLng関数 | Long | -2,147,483,648 から 2,147,483,647。 小数点以下は丸められます。 |
CLngLng関数 | LongLong | -9,223,372,036,854,775,808 から 9,223,372,036,854,775,807。 小数点以下は丸められます (64 ビット プラットフォームのみで有効)。 |
CLngPtr関数 | LongPtr | 32 ビットのシステムでは -2,147,483,648 ~ 2,147,483,647 64 ビットのシステムでは -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807。 32 ビットと 64 ビットのどちらのシステムでも、小数部分は丸められます。 |
CSng関数 | Single | 負の値の場合は -3.402823E38 ~ -1.401298E-45 正の値の場合は 1.401298E-45 ~ 3.402823E38。 |
CStr関数 | String | CStr の戻り値は、引数に依存します。 |
CVar関数 | Variant | 数値の場合はDoubleと同じ範囲です。 数値以外の場合はStringと同じ範囲です。 |
用語が難しい(オブジェクト、プロパティ、メソッド)
しかし、用語を覚えたからと言ってVBAが書けるようになる訳ではありません。
用語を覚える過程で、その用語が意味する重要な概念を少しずつ理解していきましょう。
配列とは
一度に全てを覚えようとすると大変なので、必要に応じて少しずつ覚えて使える範囲を広げていきましょう。
ByValとByRef
プロシージャーの引数|VBA入門
以下の文章の意味が理解できればOKです。
ByVal:値渡し
つまり、値渡しでは、呼出し先で引数の値を変更しても、呼出し元の引数は変更されません。
ByRef:参照渡し
つまり、参照渡しでは、呼び出し先で引数の値を変更すると、呼び出し元の引数も変更されます。
VBAを書く場所
最初は全て標準モジュールに書くものだと考えて差し支えありません。
VBA学習が進むと、以下の全てのモジュールが扱えるようになります。
シートモジュール
ブックモジュール
フォームモジュール
クラスモジュール
同じテーマ「マクロVBA技術解説」の記事
VBAの小数以下の演算誤差について
スピルでVBAの何が変わったか
CharactersプロパティとCharactersオブジェクト
ユーザーに絶対に停止させたくない場合のVBA設定
印刷範囲の設定・印刷範囲のクリア
VBAの省略可能な記述について
VBAのVariant型について
VBAのインデントについて
VBAの演算子まとめ(演算子の優先順位)
列幅不足による###表示や指数表示を判定する
VBA10大躓きポイント(初心者が躓きやすいポイント)
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- VBA10大躓きポイント(初心者が躓きやすいポイント)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。