« 1時間の内で15分ごとに実行する | トップページ | セルの値を配列に格納して使う »

2010年11月13日 (土)

商と余り

基本的なことですが
しっかり調べてみるといろいろと知らないことがあるものです。

いままで紹介してきたプロシージャでも
商と余りは利用してきました。
最近の記事ではこのように使いました。

商: Int( i / j )
余り: i - Int( i / j ) * j

除数と被除数が共に0より大きいなら問題ないですが
どちらがマイナスのときInt関数では間違いであることがわかりました。

この式を使うなら、
Fix関数を使わないと
答えがマイナスのときに値が違ってきます。

その理由は
Int関数とFix関数は引数が正の値なら同じ値を返しますが
引数が負の値のとき
Int関数はその値を超えない最大の負の値を返して
Fix関数はその値以上の最小の負の値を返すからです。
VBAヘルプの例をそのまま使いますが具体的には

Int(-8.4) = -9
Fix(-8.4) = -8

-8.4 = -84 / 10 = -8 余り -4
ですから上の式でマイナスも扱うならFix関数が適切です。

まあこんな式を使わなくても
便利な演算子があります。

商: i \ j
余り: i Mod j

Mod演算子は余りを使用するとき使うので知っていましたが、
\の方は恥ずかしながら新発見でした。

使用例のコードはこちら

商と余りの使用例コード:

Sub macro101113a()
'商と余り

    Dim i As Integer, j As Integer
    i = 11: j = 4
    Debug.Print i & "を" & j & "で割ったときの商は " & i \ j & _
        " 、余りは " & i Mod j
       
End Sub

商と余りを使って
ある数からある数までの繰り返す数を生成したいと思います。
実際のところ「余り」しか使ってませんが…

0と1の繰り返し、
1から10までの繰り返し、
1から任意の数までの繰り返し、
を生成する3つのプロシージャです。

コードはこちら

数の繰り返しを生成するコード:

Sub macro101113b()
'0と1を繰り返し生成する

    Dim i As Integer
    For i = 0 To 19
        Debug.Print i Mod 2
    Next i
   
End Sub

Sub macro101113c()
'1から10までの数字の繰り返しを生成する

    Dim i As Integer
    For i = 0 To 99
        Debug.Print i Mod 10 + 1
    Next i
   
End Sub

Sub macro101113d()
'1から任意の整数までの数字の繰り返しを生成する

    Dim i As Integer, j As Integer
    j = 7
    For i = 0 To 99
        Debug.Print i Mod j + 1
    Next i
   
End Sub

割り算で忘れてはいけないことは
0で割らないことです。

0で割るともちろんエラーになります。

コピペ関係の原因不明のミスで
値が入っているはずのセルを参照したつもりが
空白のセルの値で割ってしまうことがたまにあります。

割り算を使った式でエラーになったときは
分母をウォッチウィンドウで調べてみてください。
0かもしれません。

|

« 1時間の内で15分ごとに実行する | トップページ | セルの値を配列に格納して使う »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 商と余り:

« 1時間の内で15分ごとに実行する | トップページ | セルの値を配列に格納して使う »