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の何が変わったか
CharactersプロパティとCharactersオブジェクト
ユーザーに絶対に停止させたくない場合のVBA設定
印刷範囲の設定・印刷範囲のクリア
VBAの省略可能な記述について
VBAのVariant型について
VBAのインデントについて
VBAの演算子まとめ(演算子の優先順位)
列幅不足による###表示や指数表示を判定する
VBA10大躓きポイント(初心者が躓きやすいポイント)
Excel VBAとは?マクロとの違いやメリット・デメリットを初心者向けに解説
新着記事NEW ・・・新着記事一覧を見る
Gemini CLIの徹底解説:AIをターミナルから使いこなす|生成AI活用研究(2025-07-03)
Gemini CLIとPowerShellでVBAerのAI活用を加速する実践ガイド|生成AI活用研究(2025-07-02)
「Gemini CLI」によるExcel自動化フレームワーク:実践ガイド|生成AI活用研究(2025-07-01)
AI(Gemini)とエクセル数式対決 その3|生成AI活用研究(2025-06-24)
不合理の砦|AIが計算を終えた場所から、人間の価値が始まる|生成AI活用研究(2025-06-23)
生成AIはExcelの複雑な数式を書けるのか?|AIとの対話から学ぶ協業のリアル|生成AI活用研究(2025-06-22)
日時データから日付ごとの集計(UNIQUE,SUMIFS,GROUPBY)|エクセル雑感(2025-06-20)
AI時代の働き方革命:オンリーワン戦略 ― 属人化で搾取されない労働者に|生成AI活用研究(2025-06-20)
VBA開発の標準化を実現する共通プロンプトのすすめ|生成AI活用研究(2025-06-14)
生成AIと100本ノック 29本目:画像の挿入|生成AI活用研究(6月13日)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.変数宣言のDimとデータ型|VBA入門
3.繰り返し処理(For Next)|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- VBA10大躓きポイント(初心者が躓きやすいポイント)
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.