Modの概要
剰余(余り)演算 VBAの予約語 | ||
Mod 概要 Mod 演算子は、VBAで2つの数値を割り算した際の「余り」を求めるために使用されます。 わかりやすく説明 Mod は、「割り算をしたときの余り」を計算する演算子です。例えば、 |
||
|
Modの基本的な使い方
Mod 演算子を使って、2つの数値の余りを求める基本的な例です。
Sub ModExample()
Dim result As Integer
result = 10 Mod 3
MsgBox "10 ÷ 3 の余りは " & result, vbInformation, "Modの例"
End Sub
解説:
10 Mod 3
の結果は 1(10 ÷ 3 の余り)。- 計算結果をメッセージボックスで表示。
ExcelでのModの活用例
Excelのセルに入力された値が偶数か奇数かを判定する例です。
Sub CheckEvenOdd()
Dim i As Integer
Dim lastRow As Integer
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' A列の最終行を取得
For i = 1 To lastRow
If Cells(i, 1).Value Mod 2 = 0 Then
Cells(i, 2).Value = "偶数"
Else
Cells(i, 2).Value = "奇数"
End If
Next i
End Sub
解説:
- A列に入力された数値をチェックし、偶数ならB列に「偶数」、奇数なら「奇数」を表示。
値 Mod 2 = 0
なら偶数、それ以外は奇数。
特定の間隔ごとに処理を実行する
Mod を使用すると、例えば5行ごとに特定の処理を実行できます。
Sub HighlightEvery5Rows()
Dim i As Integer
Dim lastRow As Integer
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lastRow
If i Mod 5 = 0 Then
Cells(i, 1).Interior.Color = RGB(255, 255, 0) ' 黄色に塗る
End If
Next i
End Sub
解説:
- 5行ごとにセルの背景色を黄色に変更。
i Mod 5 = 0
で、行番号が5の倍数のときに処理を実行。
エラーを回避する方法
0で割ろうとするとエラーになるため、エラーハンドリングを追加します。
Sub SafeModUsage()
Dim num As Integer
Dim divisor As Integer
Dim result As Variant
num = 10
divisor = 0 ' わざと0を設定
On Error Resume Next
result = num Mod divisor
If Err.Number <> 0 Then
MsgBox "エラー発生: " & Err.Description, vbExclamation, "エラー"
Err.Clear
Else
MsgBox "結果: " & result
End If
End Sub
解説:
- 0で割ろうとするとエラーになるため、
On Error Resume Next
を使用。 - エラー発生時にはメッセージを表示し、エラーをクリアする。
Modの注意事項
- 整数同士でのみ使用可能: Modは整数同士の演算にしか使用できない(小数には適さない)。
- ゼロ除算エラーに注意: 0で割ろうとするとエラーが発生するため、適切にチェックする。
- 負の数の扱い: 負の数をMod演算に使うと、結果も負になる可能性がある(例:
-10 Mod 3
の結果は -1)。
よくある質問
- Q: Mod は小数にも使えますか?
- A: いいえ。Mod は整数のみ対応しており、小数の余りを求める場合は
WorksheetFunction.Mod
を使用する必要があります。 - Q: Mod を使って特定の間隔で処理を行うには?
- A:
If i Mod 5 = 0 Then
のようにすると、5の倍数のときに処理を実行できます。 - Q: 0で割るとどうなりますか?
- A: エラー(ゼロ除算エラー)が発生します。
On Error Resume Next
で回避可能ですが、事前にチェックするのが望ましいです。 - Q: 負の数の Mod の結果は?
- A: 負の数を使うと、結果も負になることがあります。例えば、
-10 Mod 3
は -1 になります。
まとめ
- Mod 演算子は、整数の割り算の「余り」を求める。
- 偶数・奇数の判定や、特定の間隔ごとの処理に便利。
- Excelのセル処理で特定の行ごとに処理を実行できる。
- ゼロ除算エラーを防ぐために、適切なエラーハンドリングを行う。