VBAで条件分岐を書くとき、
数値の比較は問題なく書けるのに、
文字列の比較になると結果が思った通りにならない
という経験はないでしょうか。
例えば、
- 同じはずの文字列が一致しない
- 大文字と小文字で結果が変わる
- 空白が原因で判定がずれる
こうした問題は、
文字列比較の仕組みを正しく理解していないこと
が原因で起きることがほとんどです。
文字列の比較は単なる記号の一致確認ではありません。
そこには、
- 比較演算子の意味
- 文字列の扱い方
- 判定の基準
といった、設計上の判断 が含まれています。
この記事では、
VBAで文字列を比較する基本から、
実務でつまずきやすい注意点、
安全に運用するための設計の考え方まで、
分かりやすく解説していきます。
目次
- ✅ VBAで文字列を比較する基本|比較演算子の使い方
- ・文字列比較で使用する主な演算子
- ・例:文字列が一致するか確認する
- なぜこの書き方にしているのか(設計意図)
- 別の書き方との違い
- 実務で気をつけるポイント
- ✅ VBAで文字列の大小を比較する仕組み
- ・例:文字列の大小比較
- ・例:名前の比較
- なぜこの理解が重要なのか
- ✅ 大文字と小文字の違いによる比較結果の変化
- ・例:一致しないケース
- なぜこの問題が起きるのか
- 安全な書き方
- なぜこの書き方にしているのか
- 別案との比較
- 実務での判断ポイント
- ✅ 空白が原因で一致しない問題を防ぐ
- ・例:一致しないケース
- 安全な書き方
- なぜこの書き方にしているのか
- 実務での重要ポイント
- ✅ StrComp関数を使った安全な文字列比較
- ・基本構文
- ・例:大文字小文字を区別しない比較
- なぜこの書き方にしているのか
- 別案との違い
- 実務での判断基準
- ✅ 文字列比較でよくある実務トラブルと対策
- ・トラブル1:一致するはずなのに一致しない
- ・トラブル2:大小文字で結果が変わる
- ・トラブル3:条件が複雑になりすぎる
- 安全な設計例
- 設計意図
- 実務メリット
- ✅ 応用:文字列比較は「業務ルール」を表している
- ✅ まとめ:文字列比較は「設計品質」を左右する重要な要素
✅ VBAで文字列を比較する基本|比較演算子の使い方
文字列を比較する場合でも、
VBAでは数値と同じように
比較演算子 を使用します。
しかし、文字列は数値とは異なる特性を持つため、
同じ感覚で扱うと誤解が生まれやすい部分でもあります。
実務では、
- データの一致確認
- 入力値のチェック
- コードや名称の判定
など、文字列比較は非常に頻繁に登場します。
ここを曖昧な理解のまま使っていると、
条件分岐の信頼性そのものが下がってしまいます。
特に、
「同じに見えるのに一致しない」
という現象は、
文字列比較で最も多いトラブルのひとつです。
ここではまず、
基本的な比較演算子の種類と役割を確認していきます。
・文字列比較で使用する主な演算子
| 演算子 | 意味 |
|---|---|
| = | 等しい |
| <> | 等しくない |
| より大きい
< | より小さい
= | 以上
<= | 以下
文字列でも、
これらの演算子をそのまま使用できます。
・例:文字列が一致するか確認する
If department = "営業" Then
MsgBox "営業部です"
End If
このコードは、
department 変数の値が
「営業」と一致する場合に
処理を実行します。
なぜこの書き方にしているのか(設計意図)
このようなシンプルな比較は、
最も読みやすく、誤解が少ない書き方 です。
文字列比較では、
- 条件を短くする
- 意味を明確にする
ことが重要になります。
別の書き方との違い
例えば次のような書き方もできます。
If StrComp(department, "営業") = 0 Then
これはより厳密な比較が可能ですが、
単純な一致判定では
可読性が下がることがあります。
実務で気をつけるポイント
文字列比較は、
見た目が同じでも一致しない
ことがあります。
原因の多くは、
- 空白
- 全角・半角
- 大文字・小文字
です。
✅ VBAで文字列の大小を比較する仕組み
文字列は、
辞書順(文字コード順)
で比較されます。
これは、
数値の大小とはまったく異なる考え方です。
この仕組みを理解していないと、
「なぜこの結果になるのか」
が分からなくなります。
・例:文字列の大小比較
If "B" > "A" Then
MsgBox "BはAより大きい"
End If
この結果は True になります。
理由は、
文字コードが大きい
ためです。
・例:名前の比較
If name1 > name2 Then
この場合、
アルファベット順
または
五十音順
で比較されます。
なぜこの理解が重要なのか
実務では、
- 商品コード
- 顧客名
- 部署名
など、
文字列を並び替えたり比較したりする処理が多くあります。
このとき、
数値の感覚で判断すると
誤ったロジックになります。
✅ 大文字と小文字の違いによる比較結果の変化
文字列比較で最も多いトラブルのひとつが、
大文字と小文字の違い
です。
・例:一致しないケース
If userName = "ADMIN" Then
もし userName に
admin
が入っている場合、
この条件は False になります。
なぜこの問題が起きるのか
VBAは、
大文字と小文字を区別する
ためです。
安全な書き方
If UCase(userName) = "ADMIN" Then
なぜこの書き方にしているのか
UCase を使うことで、
比較条件を統一
できます。
別案との比較
If LCase(userName) = "admin" Then
どちらでも問題ありません。
重要なのは、
比較対象を揃えること
です。
実務での判断ポイント
文字列比較では、
比較する前に正規化する
ことが非常に重要です。
文字列の比較では、単純な一致判定だけでなく、業務ルールに応じて柔軟な判定方法を選択することが重要になります。複数の条件を分かりやすく扱うための手段として、Like 演算子の考え方と実装方法についても【VBA】Like演算子で複数条件を扱う方法の記事で詳しく解説しています。
✅ 空白が原因で一致しない問題を防ぐ
実務で最も多いトラブルが、
空白(スペース)
です。
・例:一致しないケース
If code = "A001" Then
しかし実際の値が:
"A001 "
だった場合、
一致しません。
安全な書き方
If Trim(code) = "A001" Then
なぜこの書き方にしているのか
Trim は、
前後の空白を削除
します。
実務での重要ポイント
入力値は、
必ず汚れている
と考えることが重要です。
空白による不一致を防ぐには、個別の修正だけでなく、データ全体を整える仕組みを用意しておくことが重要です。シート全体のスペースを安全に整理する方法については、【VBA】シート全体のスペースを削除する方法|全角・半角・改行まで実務で完全対策の記事で実務視点から詳しく解説しています。
✅ StrComp関数を使った安全な文字列比較
文字列比較をより安全に行いたい場合、
StrComp関数
を使用します。
・基本構文
StrComp(文字列1, 文字列2, 比較方法)
・例:大文字小文字を区別しない比較
If StrComp(userName, "admin", vbTextCompare) = 0 Then
なぜこの書き方にしているのか
この方法は、
比較ルールを明示できる
ためです。
別案との違い
UCase / LCase は
データを変換します。
StrComp は
比較方法を指定します。
実務での判断基準
厳密な比較が必要な場合:
StrComp
簡単な比較:
= 演算子
安全な文字列比較を実現するためには、比較方法を選ぶだけでなく、入力データをあらかじめ整えておく設計が重要になります。大文字と小文字を統一して扱うための基本手法として、LCase や UCase の活用方法についても【VBA】大文字と小文字を区別しない:LCase・UCaseの記事で詳しく解説しています。
✅ 文字列比較でよくある実務トラブルと対策
ここでは、
現場で実際に発生しやすい問題を整理します。
・トラブル1:一致するはずなのに一致しない
原因:
空白
対策:
Trim
・トラブル2:大小文字で結果が変わる
原因:
比較ルール
対策:
UCase / LCase
・トラブル3:条件が複雑になりすぎる
原因:
直接比較しすぎる
対策:
変数に分ける
安全な設計例
Dim normalizedUser As String
Dim isAdminUser As Boolean
normalizedUser = Trim(UCase(userName))
isAdminUser = normalizedUser = "ADMIN"
If isAdminUser Then
設計意図
この書き方は、
比較
正規化
判定
を分離しています。
実務メリット
・バグが減る
・読みやすい
・変更しやすい
✅ 応用:文字列比較は「業務ルール」を表している
文字列比較は、
単なるプログラムではありません。
それは、
業務判断
です。
例えば:
If status = "完了" Then
これは、
完了状態の定義
を意味します。
ここで重要なのは、
何をもって一致とするのか
です。
例えば:
- 完了
- 完了済
- 完了
すべて同じ意味かもしれません。
しかし、
プログラムでは別物
です。
つまり:
文字列比較は業務ルールの定義
なのです。
✅ まとめ:文字列比較は「設計品質」を左右する重要な要素
この記事では、
VBAで文字列を比較する方法と
実務での注意点について解説しました。
重要なポイントを整理します。
・文字列は比較演算子で判定できる
・文字列の大小は文字コード順で決まる
・大文字小文字で結果が変わる
・空白が原因で一致しないことが多い
・StrComp を使うと安全
・比較前に正規化することが重要
・文字列比較は業務ルールを表している
もし現在、
- 条件式が不安
- 一致判定が信用できない
- データがばらつく
- バグの原因が分からない
と感じているなら、
それは:
文字列比較の設計を見直すタイミング
かもしれません。
ここを整えることで、
VBAの信頼性は大きく向上します。