Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2019)
VBAの偶数奇数について
投稿日時: 23/01/12 15:39:45
投稿者: vbaaa

初学者です。ExcelVBAで九九表を作成したのですが、その九九表で偶数の数字のみ表示させたい時の
記述方法が、調べたのですが解決出来ませんでした。
↓のコードは九九表のコードですがここから、どのようにすれば良いかヒントだけでも
よろしいので、ご教示頂きたいです。
 

Sub kuku()
    Dim i, j
For j = 1 To 9
    For i = 1 To 9
        Cells(i, j) = i * j
    Next
Next
End Sub

回答
投稿日時: 23/01/12 16:50:57
投稿者: Suzu

Excel の セルに入れる関数でも、
=IF(○○, ○○が正しい時、○○が正しくない時)
の様に、
○○ を 条件として、正の場合 の処理 / 偽の場合 の処理 と処理を分ける事ができます。
 
VBA だと If...Then...Else...End If を使います。
If...Then...Else ステートメントを使用する
https://learn.microsoft.com/ja-jp/office/vba/language/concepts/getting-started/using-ifthenelse-statements
 
 
If ○○ Then
  ○○が正の時の処理
Else
  ○○が偽の時の処理
End If
 
となります。
 
VBA では、偶数奇数 の判定には、 Mod を使う事が多いです。
 
Mod 演算子
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/mod-operator
 
ある数 から ある数 を割った際の 余り を求める関数です。
 
1/2 = 0 余り 1
2/2 = 1 余り 0
3/2 = 1 余り 1
4/2 = 2 余り 0
 :
 
つまり、偶数は、2で割った際に余りが 0 になる数。
 
なので、
 
If A Mod 2 = 0 Then
    ○○○
End If
 
A が偶数の時だけ ○○○ のステップに進みます。
 
---------------------------------------------------------------------------
偶数 と言うのが 今回の様に 、被乗数や、乗数 が偶数の時 と言う事なら
 
For i = 1 To 9
 〜〜〜
Next
 
For...Next ステートメント
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/fornext-statement
 
For 〜〜Next には、 Step という ○毎 に 進む指定をする 引数 があります。
 
For j = 2 To 8 Step 2
 
とすれば、
 乗数 が2 から 始まり 2毎 に進む
  → j は 2,4,6,8・・ となります。

投稿日時: 23/01/12 17:51:11
投稿者: vbaaa

詳細に解説して頂きありがとうございます。
For文の中でmod演算子を使用したif文を記述する認識でよろしいでしょうか?

回答
投稿日時: 23/01/13 08:23:16
投稿者: Suzu

被乗数・乗数・積 どの数値が偶数の場合なのか が判らないので、
具体的にどこで判定を行えば良いか判断つきません。

投稿日時: 23/01/13 09:30:16
投稿者: vbaaa

説明が不足していて申し訳ございません。
この場合だと、九九の積の偶数数字のみ、表示させたい状態です。

回答
投稿日時: 23/01/13 10:08:10
投稿者: simple

# 横合いからすみません。
>For文の中でmod演算子を使用したif文を記述する認識でよろしいでしょうか?
はい、そのとおりです。
どちらの解釈でも、より踏み込んだ回答がされていたと思います。
mod演算子を使った例文も提示されていますから、それが参考になるはずですが。
読まれて不明なところがあれば、そこを続けて具体的に質問されたらいかがですか?
 
# なお、別法として、 Cells(i, j) = i * j に代えて、
# jが偶数 または iが偶数の時にだけ Cells(i, j) = i * j とする、
# という考え方でもよいと思います。混乱するようでしたら無視してください。
 
また、 Dim i, j は

Dim i As Long, j As Long
などとすることを推奨します。

投稿日時: 23/01/13 14:44:12
投稿者: vbaaa

お二人様、ご丁寧にありがとうございます。
現状、偶数のみの表示は確認できたのですが、九九の表の状態から
マクロで偶数のボタンを押下した時に、偶数の九九のみが表示される状態にはなっていません。
九九の表のまま偶数のみ表示する方法をご教示頂きたいです。
 
下記は現状のコードです。
 

Option Explicit

Sub gusu()
    Dim i As Long, j As Long
For j = 1 To 9
    For i = 1 To 9
    If i Mod 2 = 0 Then
        Cells(i, j) = i * j
    End If
    Next
Next
End Sub

回答
投稿日時: 23/01/13 15:18:28
投稿者: taitani
投稿者のウェブサイトに移動

If i Mod 2 = 0 Then じゃなくて、
If i * j Mod 2 = 0 Then ではないでしょうか。
 
i と j がどのような動きをするのか確認しましょう。

回答
投稿日時: 23/01/13 16:02:05
投稿者: sk

引用:
ExcelVBAで九九表を作成したのですが、その九九表で偶数の数字のみ表示させたい

引用:
九九の積の偶数数字のみ、表示させたい状態

(標準モジュール)
-------------------------------------------------------------
Sub kuku()
    Dim i As Long, j As Long, k As Long
    For j = 1 To 9
        For i = 1 To 9
            k = i * j
            If k Mod 2 = 0 Then
                Cells(i, j) = k
            Else
                Cells(i, j).ClearContents
            End If
        Next
    Next
End Sub
-------------------------------------------------------------
 
以上のように記述なさればよろしいかと。

投稿日時: 23/01/13 16:18:02
投稿者: vbaaa

ありがとうございます・・・!
奇数の方も、併せて理解する事が出来ました。
お三方にご教示頂き理解が深まりました。
ありがとうございました。