『演算子 + オペランド』から始めるVBA学習
式は演算子によって構造化されます。
式は『演算子 + オペランド』の組み合わせで構成されます。
プログラミング言語の式は、演算子の優先順位と結合性に従って評価される『演算子 + オペランド』の組み合わせで成り立ちます。
ページ内目次
第1章:演算子とは何か ― プログラムの“動詞”を理解する
第2章:式は「演算子 + オペランド」の組み合わせ
第3章:代入演算子 = の正体 ― 最も誤解される記号
第4章:算術演算子 ― 数字を操る基本の記号
第5章:式の優先順位と結合性 ― 処理順を読む力
第6章:比較と論理 ― 条件を式として扱う
第7章:文字列と式 ― &による連結
第8章:式と型 ― 評価の前に知るべきこと
第9章:関数もまた「式」である
第10章:オブジェクトとドット演算子 . の正体
第11章:式の読み方を鍛える ― 分解と変形
第12章:演算子から始まる読み書き思考
はじめに:なぜ「演算子 + オペランド」から学ぶのか
しかし、この記事では異なるアプローチを取ります。
プログラムの最小・最重要単位である「式(Expression)」に焦点を当て、その式を構成する「演算子」と「オペランド」からVBAの基本を説明していきます。
- 式は演算子によって構造化されます
プログラムのコードは、意味のあるまとまりとして成り立っています。この骨組みを作るのが+や=といった演算子です。演算子があることで、コードが単なる文字の羅列ではなく、意味を持った命令や計算のまとまりとして機能します。 - 式は『演算子 + オペランド』の組み合わせで構成されます
演算子だけでは意味を成しません。+(足す)という演算子には、10や5といった足されるオペランド(操作の対象)が必要です。この組み合わせが10 + 5という一つの式となり、15という結果を生み出します。 - プログラミング言語の式は、演算子の優先順位と結合性に従って評価される『演算子 + オペランド』の組み合わせで成り立ちます
10 + 5 * 2のように複数の演算子が混在する式では、計算する順番が厳密に決まっています。この規則が優先順位(*が+より先に計算されるなど)や結合性(同じ優先順位の演算子が左から右へ計算されるなど)です。このルールに従うことで、プログラムは常に意図した通りの結果を返します。
プログラミングは、何かを「操作」し、そこから新しい「値」を得ることの繰り返しです。
この「操作」が演算子、「対象」がオペランド、そしてこれらが組み合わさったものが式です。
この考え方を理解すれば、どんなVBAコードも怖くなくなるでしょう。
次章以降で詳しく解説していきます。
| 算術演算子 | +, -, *, /, \, Mod, ^ |
| 代入演算子 | = |
| 比較演算子 | =, <>, >, <, >=, <=, Is, Like |
| 文字列演算子 | &, + |
| 論理演算子 | Not, And, Or, Xor, Eqv, Imp |
| オブジェクト関連演算子 | ., New |
| 引数関連 | := |
第1章:演算子とは何か ― プログラムの“動詞”を理解する
例えば、+は「足す」、-は「引く」、=は「代入する」という動作を表します。
' VBAの演算子とオペランドの例
' 演算子 (+) とオペランド (10, 5)
' 10 + 5の演算結果を、B1セルに代入
Range("B1").Value = 10 + 5 ' B1セルに15と表示される
' 演算子 (=) とオペランド (my_number, 10 + 5)
Dim my_number As Integer
my_number = 10 + 5
Range("B2").Value = my_number ' B2セルに15と表示される
このように、VBAのプログラムの多くは「演算」によって成り立っています。
プログラミングの基本は、この「演算」がどのように値を生成し、次の処理へと渡されていくかを理解することから始まります。
第2章:式は「演算子 + オペランド」の組み合わせ
my_number = 15 は代入式で、右辺の式 15 の値を左辺の変数 my_number に代入する処理を表します。
' 式の組み合わせの例
Dim result As Integer
' 1. 加算式 (10 + 5) が評価され、値の15になる
' 2. 代入式 (=) が評価され、resultに15が代入される
result = 10 + 5
' 式の評価結果を、セルに直接代入
Range("B3").Value = (result * 2) + 10 ' B3セルに40と表示される
プログラミングは、この「式」を組み合わせて、欲しい値を次々に生み出していく作業だと言えるでしょう。
第3章:代入演算子 = の正体 ― 最も誤解される記号
多くの言語では、代入には=を、比較には==のように異なる記号を使用しますが、VBAではどちらにも=を使います。
比較演算子: 左辺と右辺が等しいか比較し、TrueまたはFalseを返す。
' "=" の2つの役割
' 1. 代入演算子として
Dim x As Integer
x = 5 ' 変数xに5を代入
Range("C1").Value = x ' C1セルに5と表示される
' xの値を更新する
x = x + 1 ' xの値が6になる
Range("C2").Value = x ' C2セルに6と表示される
' 2. 比較演算子として
' If文の後ろのx = 5は「xは5と等しいか?」という式
' 他言語なら「If x == 5 Then」と書くところ
If x = 5 Then
Range("C3").Value = "xは5です"
Else
Range("C3").Value = "xは5ではありません" ' xが6なので、こちらが表示される
End If
If文のように条件を指定する場所では、=は「比較」の意味になることを覚えておきましょう。
第4章:算術演算子 ― 数字を操る基本の記号
| 演算子 | 意味 | 例 | 備考 |
| + | 加算 | 10 + 5 | |
| - | 減算 | 10 - 5 | |
| * | 乗算 | 10 * 5 | |
| / | 除算 | 10 / 4 | 結果は2.5(小数) |
| \ | 整数除算 | 10 \ 4 | 結果は2(整数) |
| Mod | 剰余 | 10 Mod 4 | 結果は2(余り) |
| ^ | べき乗 | 2 ^ 3 | 結果は8 |
' VBAの算術演算子サンプル
Range("D1").Value = 10 + 5 ' D1セルに15と表示
Range("D2").Value = 10 / 4 ' D2セルに2.5と表示
Range("D3").Value = 10 \ 4 ' D3セルに2と表示
Range("D4").Value = 10 Mod 4 ' D4セルに2と表示
\(整数除算)とMod(剰余)は、VBAでよく使われる便利な演算子です。
第5章:式の優先順位と結合性 ― 処理順を読む力
| 優先順位 | 演算子 | 種類 | 備考 |
| 1 | ^ | 算術 | べき乗 |
| 2 | *、/ | 算術 | 乗算・除算(同順位) |
| 3 | +、- | 算術 | 加算・減算(同順位) |
| 4 | & | 文字列 | 文字列連結 |
| 5 | =、<>、<、>、<=、>=、Is、Like | 比較 | 比較演算子 |
| 6 | Not | 論理 | |
| 7 | And | 論理 | |
| 8 | Or、Xor | 論理 |
結合性とは、同じ優先順位の演算子が並んだときに、どちらから計算するかというルールです。
多くの演算子は左から右へ計算する左結合です。
' 優先順位の違いをセルで確認
Range("D5").Value = 10 + 5 * 2 ' D5セルに20と表示される
Range("D6").Value = (10 + 5) * 2 ' D6セルに30と表示される
' 左結合の例
Range("D7").Value = 10 - 5 + 2 ' D7セルに7と表示される
カッコ()を使えば、意図的に優先順位を変えることができます。
複雑な式では、読みやすくするためにカッコを積極的に使いましょう。
第6章:比較と論理 ― 条件を式として扱う
ここでは、VBAで使われるすべての比較・論理演算子を一覧で見ていきましょう。
| 演算子 | 意味 | 説明 |
| = | 等しい | 左辺と右辺の値が等しい場合にTrueを返します。 |
| <> | 等しくない | 左辺と右辺の値が異なる場合にTrueを返します。 |
| > | より大きい | 左辺が右辺より大きい場合にTrueを返します。 |
| < | より小さい | 左辺が右辺より小さい場合にTrueを返します。 |
| >= | 以上 | 左辺が右辺以上の場合にTrueを返します。 |
| <= | 以下 | 左辺が右辺以下の場合にTrueを返します。 |
| Is | オブジェクトの同一性 | オブジェクト変数が同じオブジェクトを参照している場合にTrueを返します。 |
| Like | 文字列のパターンマッチ | 文字列が指定したパターンに一致するかどうかを比較します。 |
| 演算子 | 意味 | 説明 |
| Not | 否定 | オペランドがTrueならFalse、FalseならTrueを返します。 |
| And | 論理積 | 両方のオペランドがTrueの場合にのみTrueを返します。 |
| Or | 論理和 | どちらかのオペランドがTrueの場合にTrueを返します。 |
| Xor | 排他的論理和 | どちらか一方のみがTrueの場合にTrueを返します。 |
| Eqv | 同値 | 両方のオペランドが同じ論理値の場合にTrueを返します。 |
| Imp | 含意 | 最初のオペランドがTrueで、2番目がFalseの場合にのみFalseを返します。 |
' VBAサンプル: And, Or, Is演算子
Sub SampleLogicAndIs()
' And演算子: 複数の条件がすべてTrueの場合
Dim score As Integer
Dim bonus As Boolean
score = 85
bonus = True
If score >= 80 And bonus = True Then
Debug.Print "成績が良く、ボーナスがあります。"
Else
Debug.Print "条件を満たしません。"
End If
' → この場合、両方の条件が満たされるため、1つ目のメッセージが表示される
' Or演算子: 複数の条件のうちいずれか1つでもTrueの場合
If score < 60 Or bonus = True Then
Debug.Print "成績が60未満か、ボーナスがあります。"
Else
Debug.Print "どちらの条件も満たしません。"
End If
' → bonus = Trueであるため、2つ目のメッセージが表示される
' Is演算子の例
Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range
' オブジェクト変数の設定
Set rng1 = ActiveSheet.Range("A1")
Set rng2 = rng1 ' rng1と同じオブジェクトを参照
Set rng3 = ActiveSheet.Sheet("A2") ' rng1とは異なるオブジェクトを参照
' Is演算子: オブジェクト変数が同じインスタンスを参照しているか比較
If rng1 Is rng2 Then
Debug.Print "rng1とrng2は同じオブジェクトです。"
Else
Debug.Print "rng1とrng2は異なるオブジェクトです。"
End If
' → rng1とrng2は同じA1セルを参照しているため、1つ目のメッセージが表示される
If rng1 Is rng3 Then
Debug.Print "rng1とrng3は同じオブジェクトです。"
Else
Debug.Print "rng1とrng3は異なるオブジェクトです。"
End If
' → rng1とrng3は異なるセルを参照しているため、2つ目のメッセージが表示される
End Sub
第7章:文字列と式 ― &による連結
文字を繋げるための演算子が & です。
' 文字列連結の式
Dim name As String
name = "田中"
Range("F1").Value = "こんにちは、" & name & "さん" ' F1セルに「こんにちは、田中さん」と表示
Dim total As Integer
total = 100
' 文字列と数値を連結
Range("F2").Value = "合計は" & total & "円です" ' F2セルに「合計は100円です」と表示
+ 演算子でも文字列を連結できますが、+ 演算子は数値では加算となり予期しない動作になる可能性があります。
文字列を確実に連結したい場合は、 & を使いましょう。
第8章:式と型 ― 評価の前に知るべきこと
予期せぬ結果やエラーを避けるためには、この影響を正しく理解することが重要です。
' データ型による演算の違いを示すサンプル
Sub TypeConversionSample()
Dim valueA As Variant
Dim valueB As Variant
' Variant型に異なるデータ型を代入
valueA = 100 ' 数値
valueB = "20" ' 文字列
' +演算子の場合
' VBAは自動的に文字列"20"を数値の20に変換して計算する
' 結果: 120 (数値)
Debug.Print "valueA + valueB の結果: " & (valueA + valueB)
' &演算子の場合
' VBAは両方のオペランドを文字列として扱い、連結する
' 結果: "10020" (文字列)
Debug.Print "valueA & valueB の結果: " & (valueA & valueB)
' 数値の掛け算
' VBAは文字列"20"を数値に変換して計算する
' 結果: 2000 (数値)
Debug.Print "valueA * valueB の結果: " & (valueA * valueB)
End Sub
上記のサンプルコードでは、+、&、*という異なる演算子が、オペランドの型にどう影響し、異なる結果を生み出すかがよくわかります。
一方、&のような文字列演算子を使うと、VBAはオペランドを文字列として扱い、連結します。
第9章:関数もまた「式」である
(C#などで「演算子オーバーロード」を理解している人以外は、少し理解しづらいかもしれませんが)
たとえば、10 + 20 も Sum(10, 20) も「足し算をして30を返す」点で、同じ「式」です。
' 関数が演算子のように働く式であることのサンプル
Sub FunctionAsOperator()
Dim valueA As Integer
Dim valueB As Integer
Dim sumResult As Integer
Dim totalResult As Integer
valueA = 10
valueB = 20
' 演算子として加算を行う
sumResult = valueA + valueB
Debug.Print "演算子(+)を使った結果: " & sumResult ' 結果: 30
' 関数として加算を行う(SpreadsheetFunction.SumはExcelのSUM関数)
totalResult = WorksheetFunction.Sum(valueA, valueB)
Debug.Print "関数(Sum)を使った結果: " & totalResult ' 結果: 30
' どちらも同じ「式」として評価され、同じ値を得ることができる
End Sub
これは、関数に値を渡す際に引数の名前を明示するための記号です。
引数が多い関数で使うと、どの引数にどの値を渡しているのかが一目で分かり、コードの可読性が高まります。
' 名前付き引数の正しい使用例(MsgBox関数)
' 通常の書き方: 引数の意味が分かりにくい
MsgBox "ファイルを削除しますか?", vbYesNo + vbExclamation, "削除確認"
' 名前付き引数を使った書き方: 引数が何を示しているか明確になる
MsgBox Prompt:="ファイルを削除しますか?", Buttons:=vbYesNo + vbExclamation, Title:="削除確認"
このように、関数は名前が付いた特別な演算子と考えることで、VBAのコード全体が「式を評価して値を得る」という原則に基づいていることが再確認できます。
第10章:オブジェクトとドット演算子 . の正体
このモノが持っている「データ(値)」や「機能(操作)」にアクセスするために使うのが、.(ドット演算子)です。
これは「Range("A1")というオブジェクトのValueというプロパティ(値)にアクセスする」という操作全体を一つの式として表現しています。
このドット演算子を「~の」と頭の中で置き換えると理解しやすくなります。
' ドット演算子によるオブジェクト操作
' オブジェクト:Range("A1")
' プロパティ:Value (オブジェクトの持つ値)
Range("A1").Value = 100 ' A1セルの値を100に設定する
' Range("A1").Valueは、評価されると100という値になる「式」
Range("I1").Value = Range("A1").Value + 50 ' I1セルに150と表示される
' メソッド:ClearContents (オブジェクトの持つ機能)
Range("A1").ClearContents ' A1セルの内容を消去する
.演算子は、「どのオブジェクト」の「何を操作するのか」を指定する、非常に重要な役割を担います。
' New演算子によるオブジェクト生成の例
Dim dict As New Scripting.Dictionary
' ↑ New演算子を使ってDictionaryオブジェクトの新しいインスタンスを作成している
サイト内参考ページ
第11章:式の読み方を鍛える ― 分解と変形
' 複雑な式の例
If (Range("A1").Value >= 100) And (Len(Range("B1").Value) > 0) Then
Range("J1").Value = "条件を満たしました"
End If
' ↓ 読みやすく分解する
' 式を一つずつ評価
Dim is_over_100 As Boolean
is_over_100 = (Range("A1").Value >= 100)
Dim is_not_empty As Boolean
is_not_empty = (Len(Range("B1").Value) > 0)
If is_over_100 And is_not_empty Then
Range("J2").Value = "条件を満たしました"
End If
このように、式を意味のある一時変数に置き換えることで、コードの意図が明確になり、バグの発見も容易になります。
第12章:演算子から始まる読み書き思考
- 式は演算子によって構造化されます。
- 式は『演算子 + オペランド』の組み合わせで構成されます。
- プログラミング言語の式は、演算子の優先順位と結合性に従って評価される『演算子 + オペランド』の組み合わせで成り立ちます。
このシンプルな真理こそが、VBAプログラミングの土台です。
- 処理を演算として捉える
- 結果を値として捉える
この思考法を意識することで、ExcelとVBAの知識が相互に補強され、より柔軟なプログラミングが可能になります。
- コードを読むとき: 複雑な一行のコードに出会ったら、=, +, ., & などの演算子を起点に、どの部分が式として評価され、どんな値を生み出しているのかを一つずつ分解して考えてみましょう。
- コードを書くとき: 目的の「結果」を得るために、どのような「演算」を組み合わせれば良いかを、まず日本語で考えてみましょう。「セルの値に10を足す(算術演算子+)」→「その結果を別のセルに入れる(代入演算子=)」といった具合です。
これらの考え方を基に、ぜひ自分自身のコードを「演算子とオペランド」の視点で見直してみてください。
何かしら新しい発見があるはずです。
※本記事の作成にあたっては、一部の文章作成に生成AI(Gemini)を使用しています。最終的な内容は人間による確認・編集を経て掲載しています。
同じテーマ「マクロVBA技術解説」の記事
印刷範囲の設定・印刷範囲のクリア
VBAの省略可能な記述について
VBAのVariant型について
VBAのインデントについて
VBAの演算子まとめ(演算子の優先順位)
列幅不足による###表示や指数表示を判定する
VBA10大躓きポイント(初心者が躓きやすいポイント)
Excel VBAとは?マクロとの違いやメリット・デメリットを初心者向けに解説
『演算子 + オペランド』から始めるVBA学習
PCの固有情報の取得(ユーザー名、コンピューター名等々)
ウィンドウ設定を引き継いで新規ウィンドウを作成するVBA
新着記事NEW ・・・新着記事一覧を見る
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)
2段階の入力規則リスト作成:最新関数対応|エクセル関数応用(2025-12-24)
IFS関数をVBAで入力するとスピルに関係なく「@」が付く現象について|VBA技術解説(2025-12-23)
数値を記号の積み上げでグラフ化する(■は10、□は1)|エクセル練習問題(2025-12-09)
AI時代におけるVBAシステム開発に関する提言|生成AI活用研究(2025-12-08)
GrokでVBAを作成:条件付書式を退避回復するVBA|エクセル雑感(2025-12-06)
顧客ごとの時系列データから直前の履歴を取得する|エクセル雑感(2025-11-28)
ちょっと悩むVBA厳選問題|エクセル雑感(2025-11-28)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.条件分岐(Select Case)|VBA入門
- ホーム
- マクロVBA応用編
- マクロVBA技術解説
- 『演算子 + オペランド』から始めるVBA学習
このサイトがお役に立ちましたら「シェア」「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.
