【Excel VBA】奇数/偶数を判定し抽出する方法!Mod演算子使用!

【Excel VBA】奇数/偶数を判定し抽出する方法!Mod演算子使用!

VBAで奇数/偶数を判定し抽出したいときはないでしょうか。

けど、そんな中で悩むことは、

・VBAで奇数/偶数を判定し抽出したいが方法がよくわからない
・VBAで奇数/偶数を判定し抽出したが思うように取得できず困っている

ですよね。

今回はそんなお悩みを解決する

・VBAでMod演算子を使い奇数/偶数を判定し抽出する方法

についてまとめます!

VBAで奇数/偶数を判定し抽出するイメージ

VBAで奇数/偶数を判定し抽出するイメージについて説明をします。

Excel側に表を作成します。

VBAを実行すると、Forループ処理で表のセルの値を取得し、
A列の番号を奇数

偶数別に

それぞれ抽出していきます。

それでは早速試してみましょう。

データを取得する表を準備する

Excel側に”Sheet1″シートを作成し、セルの値を取得する対象となる表を作成します。

奇数/偶数の判定を行う対象の列はA列となります。

奇数/偶数を判定し抽出するVBAで使用する機能

次に奇数/偶数を判定し抽出するVBAで使用する機能について説明をします。
今回メインで使用する機能は以下の通りです。

For…Next ステートメントの構文

For…Next ステートメントの構文は以下の通りです。

For counter = start To end step [ statements ] [ Exit For ] Next counter

For…Next ステートメントの構文の指定項目は以下の通りです。

パーツ 説明
counter 必須。 ループ カウンターとして使用する数値変数を指定します。 この変数には、ブール値または配列要素を指定できません。
start 必須です。?counter?の初期値を指定します。
end 必須。?counter?の最終値を指定します。
step オプション。 ループを繰り返すたびに、counter?の数が変更されます。 省略されると、step?は既定値の 0 になります。
statements 省略可能。 指定した回数実行される?For?と?Next?の間の 1 つ以上のステートメント。
Exit For For ループを抜けます。

参考:https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/fornext-statement

Mod演算子

Mod演算子は割り算の余りを求める演算子となります。

Mod演算子の構文は以下の通りです。

result = number1 Mod number2

Mod演算子の構文の指定項目は以下の通りです。

パーツ 説明
result 必須。任意の数値変数。
number1 必須。任意の数値式。
number2 必須。任意の数値式。

参考:https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/mod-operator

奇数/偶数の判定は「Mod 2」を指定し、2で割り余りが0なら偶数、その反対の偶数以外であれば奇数として判定しています。

VBAで奇数を判定し抽出する

まずはVBAで奇数を判定し抽出する方法について説明をします。

VBAコード

サンプルのVBAコードは以下の通りです。

Sub 奇数を判定し抽出する()
    Dim intLastRowNum As Integer
    Dim i As Integer
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

        For i = 2 To intLastRowNum
            
            '2の倍数(偶数)の以外(奇数)の時に出力します。
            If .Cells(i, 1).Value Mod 2 <> 0 Then
                Debug.Print .Cells(i, 1).Value & "|" & .Cells(i, 2).Value & "|" & .Cells(i, 3).Value
            End If
            
        Next i
        
    End With

End Sub

VBAの実装

VBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにA列の値が奇数のみの値が表示されましたね!

1|A|100
3|C|120
5|E|140
7|G|160

VBAの説明

VBAについて説明をします。

“Sheet1″シートを対象にします。

With Sheets("Sheet1")

対象の表のA列最終行数を取得します。

intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

For…Next ステートメントで2行目から最終行目まで繰り返し処理をおこないます。

For i = 2 To intLastRowNum

2の倍数(偶数)の以外(奇数)の時に出力します。

If .Cells(i, 1).Value Mod 2 <> 0 Then

タカヒロ
タカヒロ
「Mod 2」とすると2で割れる場合は0となり、つまり偶数ということがわかります。奇数はその反対ですので、0でないものという条件にすることにより奇数だけを抽出することができます。

CellsオブジェクトのValueプロパティでセルの値を取得し、 “|”区切りで文字結合をして出力します。

Debug.Print .Cells(i, 1).Value & "|" & .Cells(i, 2).Value & "|" & .Cells(i, 3).Value

VBAで偶数を判定し抽出する

次にVBAで偶数を判定し抽出する方法について説明をします。

VBAコード

サンプルのVBAコードは以下の通りです。

Sub 偶数を判定し抽出する()
    Dim intLastRowNum As Integer
    Dim i As Integer
    
    '"Sheet1"シートを対象にします。
    With Sheets("Sheet1")
        '最終行数を取得します。
        intLastRowNum = .Cells(Rows.Count, 1).End(xlUp).Row

        For i = 2 To intLastRowNum
            
            '2の倍数(偶数)の時に出力します。
            If .Cells(i, 1).Value Mod 2 = 0 Then
                Debug.Print .Cells(i, 1).Value & "|" & .Cells(i, 2).Value & "|" & .Cells(i, 3).Value
            End If
            
        Next i
        
    End With

End Sub

VBAを実行する

VBAを実行してみましょう。

イミディエイトウィンドウにA列の値が偶数のみの値が表示されましたね!

2|B|110
4|D|130
6|F|150

VBAの説明

VBAについて説明をします。

2の倍数(偶数)の時に出力します。

If .Cells(i, 1).Value Mod 2 = 0 Then

タカヒロ
タカヒロ
「Mod 2」とすると2で割れる場合は0となり、つまり偶数ということがわかりそれをIF文の条件とすることで偶数の値のみを抽出することができます。

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・VBAでMod演算子を使い奇数/偶数を判定し抽出する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です