Excel VBAユーザーのためのC#構文入門:三項演算子の魅力と注意点
1. 三項演算子とは?
C#には、条件分岐を1行で書ける「三項演算子(?:)」という構文があります。
これは、VBAには存在しないため、初めて見ると戸惑う方も多いです。
書式
条件式 ? 条件がtrueのときの値 : 条件がfalseのときの値
例:偶数・奇数の判定
int a = 3, b = 4;
Console.WriteLine((a * b) % 2 == 0 ? "Even" : "Odd");
-
(a * b) % 2 == 0がtrueなら"Even"、そうでなければ"Odd"を表示します。 -
if–elseよりもコンパクトに書けるのが特徴です。
2. VBAとの違いと注意点
VBAには三項演算子がないため、同じ処理は必ず If...Then...Else で書く必要があります。
VBAでの同等処理
Dim a As Integer, b As Integer
a = 3: b = 4
If (a * b) Mod 2 = 0 Then
Debug.Print "Even"
Else
Debug.Print "Odd"
End If
| 比較項目 | VBA | C# |
|---|---|---|
| 条件分岐 | If...Then...Else |
条件式 ? 真の場合 : 偽の場合 |
| 書き方 | 複数行で記述 | 1行で記述可能 |
| 可読性 | 明示的でわかりやすいが冗長 | 慣れると簡潔で読みやすい |
| ネスト構造 |
ElseIfで分岐を追加 |
三項演算子のネストは可読性に注意 |
3. よくある混乱ポイントと使い分け
| 構文 | 意味 | よくある混乱 |
|---|---|---|
?:(三項演算子) |
条件による値選択 |
if–elseと違って「値を返す」ことに注意 |
if–else |
条件分岐 | 複雑な処理や副作用がある場合はこちらが適切 |
Console.WriteLine() |
出力 | 三項演算子と組み合わせると1行で判定+出力が可能 |
三項演算子のネスト例(可読性に注意)
string result = score >= 80 ? "A" :
score >= 60 ? "B" :
score >= 40 ? "C" : "D";
- 条件が増えると読みづらくなるため、必要に応じて
if–elseに切り替えるのがベターです。
ミニコーナー:ABC086AをC#で三項演算子で解いてみよう
問題概要
2つの整数 A, B が与えられる。
A × B が偶数なら "Even"、奇数なら "Odd" を出力せよ。
C#コード例(1行で完結)
using System;
class Program
{
static void Main()
{
string[] input = Console.ReadLine().Split();
int A = int.Parse(input[0]);
int B = int.Parse(input[1]);
Console.WriteLine((A * B) % 2 == 0 ? "Even" : "Odd");
}
}
使用されている構文の復習
-
Split():空白区切りで複数の値を取得 -
int.Parse():文字列を整数に変換 -
?::条件に応じて"Even"または"Odd"を選択 -
Console.WriteLine():結果を出力
おわりに
三項演算子は、「値を選ぶ」ための条件分岐として非常に便利です。
VBAユーザーにとっては新鮮な構文ですが、慣れると設計の幅が広がります。
今後も、VBAとC#の構文比較シリーズとして、Forループ、配列操作、例外処理なども取り上げていく予定です。
興味があればぜひフォローしてください!