VBA技術解説
『演算子 + オペランド』から始めるVBA学習

ExcelマクロVBAの問題点と解決策、VBAの技術的解説
公開日:2025-08-04 最終更新日:2025-08-04

『演算子 + オペランド』から始めるVBA学習


式は演算子によって構造化されます。
式は『演算子 + オペランド』の組み合わせで構成されます。
プログラミング言語の式は、演算子の優先順位と結合性に従って評価される『演算子 + オペランド』の組み合わせで成り立ちます。


この記事は、この考え方を基に、VBAの基本を解説します。

はじめに:なぜ「演算子 + オペランド」から学ぶのか

プログラミングを学ぶ際、多くの書籍では「変数」や「If文」から解説を始めます。
しかし、この記事では異なるアプローチを取ります。
プログラムの最小・最重要単位である「式(Expression)」に焦点を当て、その式を構成する「演算子」と「オペランド」からVBAの基本を説明していきます。

まず、冒頭に掲げた3つの文について、簡潔に説明します。
  • 式は演算子によって構造化されます
    プログラムのコードは、意味のあるまとまりとして成り立っています。この骨組みを作るのが+や=といった演算子です。演算子があることで、コードが単なる文字の羅列ではなく、意味を持った命令や計算のまとまりとして機能します。

  • 式は『演算子 + オペランド』の組み合わせで構成されます
    演算子だけでは意味を成しません。+(足す)という演算子には、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章:式は「演算子 + オペランド」の組み合わせ

式は『演算子 + オペランド』の組み合わせで構成されます。

式とは、評価されると何らかの「値」になるものです。

10 + 5 は加算式で、評価されると 15 という値になります。
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の=は、プログラミング初心者だけでなく、他の言語を経験した人にとっても最も誤解されやすい記号です。
多くの言語では、代入には=を、比較には==のように異なる記号を使用しますが、VBAではどちらにも=を使います。

このため、文脈によって=が持つ役割を正しく理解することが重要です。

=の2つの役割を明確に見ていきましょう。

代入演算子: 右辺の値を左辺に代入する。
比較演算子: 左辺と右辺が等しいか比較し、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文のように条件を指定する場所では、=は「比較」の意味になることを覚えておきましょう。

サイト内参考ページ
第8回.セルに文字を入れるとは(RangeオブジェクトのValueプロパティ)|VBA入門
・前回書いたVBAコード ・セル番地ついて ・= 記号について ・値はValue ・オブジェクトとは、プロパティとは ・セルに文字を入れるとは


第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でよく使われる便利な演算子です。

サイト内参考ページ
第15回.四則演算と注釈(コメント)|VBA入門
エクセルは表計算ソフトですから、計算が出来なくては話になりません。四則演算(加減剰余)は必須です。この四則演算で使う算術演算の演算子は、ワークシートの演算子と同じです。あわせて、注釈(コメント)の書き方も覚えましょう。


第5章:式の優先順位と結合性 ― 処理順を読む力

プログラミング言語の式は、演算子の優先順位と結合性に従って評価される『演算子 + オペランド』の組み合わせで成り立ちます。

複数の演算子がある式では、評価される順番が決まっています。これが優先順位です。

例えば、10 + 5 * 2という式では、*が+よりも優先されるため、5 * 2が先に計算され、結果は20になります。

優先順位 演算子 種類 備考
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と表示される

カッコ()を使えば、意図的に優先順位を変えることができます。
複雑な式では、読みやすくするためにカッコを積極的に使いましょう。

サイト内参考ページ
VBAの演算子まとめ(演算子の優先順位)|VBA技術解説
・演算子の優先順位 ・算術演算子 ・比較演算子 ・論理演算子 ・連結演算子 ・単項演算子


第6章:比較と論理 ― 条件を式として扱う

If文やDo While文で使う「条件」も、評価されるとTrueまたはFalseになる式です。
ここでは、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コード
これらの演算子は、条件を複数組み合わせる際に不可欠です。

' 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

サイト内参考ページ
第20回.条件分岐(IF)|VBA入門
・Ifステートメントの構文 ・IFステートメントの条件式 ・Ifステートメントの使用例文 ・Ifステートメントのネスト(入れ子) ・サイト内のIfステートメント参考ページ ・最後に


第7章:文字列と式 ― &による連結

文字列にも式があります。
文字を繋げるための演算子が & です。

' 文字列連結の式

Dim name As String
name = "田中"
Range("F1").Value = "こんにちは、" & name & "さん" ' F1セルに「こんにちは、田中さん」と表示

Dim total As Integer
total = 100
' 文字列と数値を連結
Range("F2").Value = "合計は" & total & "円です" ' F2セルに「合計は100円です」と表示

+ 演算子でも文字列を連結できますが、+ 演算子は数値では加算となり予期しない動作になる可能性があります。
文字列を確実に連結したい場合は、 & を使いましょう。

サイト内参考ページ
第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)|VBA入門
あるセルの文字と、あるセルの文字をくっつけて、別のセルに表示する、よくある事例であり、頻繁に行われることです。A1セルに"abc" B1セルに"123" この時に、C1セルに"abc123"を入れるような場合のマクロVBAになります。


第8章:式と型 ― 評価の前に知るべきこと

式の評価は、オペランドのデータ型に強く影響されます。
予期せぬ結果やエラーを避けるためには、この影響を正しく理解することが重要です。

ここでは、VBAが持つ自動的な型変換機能によって、計算結果がどのように変わるかを見てみましょう。

' データ型による演算の違いを示すサンプル

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は文字列を自動的に数値に変換して計算しようとします。
一方、&のような文字列演算子を使うと、VBAはオペランドを文字列として扱い、連結します。

このように、VBAは演算子に応じて型を推論してくれますが、意図しない結果を招くこともあるため、常にデータ型を意識することが大切です。

サイト内参考ページ
If条件式のいろいろな書き方:TrueとFalseの判定とは|VBA技術解説
If条件式の書き方で、VBAプログラムは大きく様相が変わってきます、VBAを習い始めは、比較演算子で比較した結果が 正しければTrue、間違っていればFalse という事で理解するはずです。しかし、いろいろなサンプルコードを見ていると、「あれっ」比較演算子が無い… というようなIfステートメントやSelectCas…


第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


名前付き引数
VBAでは、:= を使って名前付き引数を渡すことができます。
これは、関数に値を渡す際に引数の名前を明示するための記号です。
引数が多い関数で使うと、どの引数にどの値を渡しているのかが一目で分かり、コードの可読性が高まります。

' 名前付き引数の正しい使用例(MsgBox関数)

' 通常の書き方: 引数の意味が分かりにくい
MsgBox "ファイルを削除しますか?", vbYesNo + vbExclamation, "削除確認"

' 名前付き引数を使った書き方: 引数が何を示しているか明確になる
MsgBox Prompt:="ファイルを削除しますか?", Buttons:=vbYesNo + vbExclamation, Title:="削除確認"

このように、関数は名前が付いた特別な演算子と考えることで、VBAのコード全体が「式を評価して値を得る」という原則に基づいていることが再確認できます。

サイト内参考ページ
第25回.名前付き引数について|VBA入門
・仮引数と実引数 ・メソッドとは ・名前付き引数について ・名前付き引数の例文 ・名前付き引数の必要性


第10章:オブジェクトとドット演算子 . の正体

ここまでの「式」の概念を理解した上で、VBA学習の大きな壁となる「オブジェクト」について見ていきましょう。

Excelのセルやシート、ブックなどは、すべて「オブジェクト」と呼ばれる「モノ」として扱われます。
このモノが持っている「データ(値)」や「機能(操作)」にアクセスするために使うのが、.(ドット演算子)です。

Range("A1").Value のような . を使った一連の書き方は、「オブジェクト式」と呼ばれます。
これは「Range("A1")というオブジェクトのValueというプロパティ(値)にアクセスする」という操作全体を一つの式として表現しています。
このドット演算子を「~の」と頭の中で置き換えると理解しやすくなります。
->(アロー演算子)のような記号を使い、オブジェクト -> プロパティと書く言語もありますが、VBAでは.を使います。

' ドット演算子によるオブジェクト操作

' オブジェクト: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 という演算子を使うと、クラスから新しいオブジェクトのインスタンスを生成できます。

' New演算子によるオブジェクト生成の例
Dim dict As New Scripting.Dictionary
' ↑ New演算子を使ってDictionaryオブジェクトの新しいインスタンスを作成している

サイト内参考ページ
オブジェクト式について|VBA技術解説
・オブジェクト式の書き方 ・オブジェクトは直接指定できない ・オブジェクト式の書き始めは何か ・メソッドとプロパティの違いについて ・オブジェクト式の最後に


第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章:演算子から始まる読み書き思考

ここまでの学習で、プログラムは式の評価の連続であるという考え方が身についたはずです。

改めて、この記事の冒頭に掲げた3つの言葉を思い出してください。
  • 式は演算子によって構造化されます。
  • 式は『演算子 + オペランド』の組み合わせで構成されます。
  • プログラミング言語の式は、演算子の優先順位と結合性に従って評価される『演算子 + オペランド』の組み合わせで成り立ちます。

このシンプルな真理こそが、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入門




このサイトがお役に立ちましたら「シェア」「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.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ