« 2011年センター試験、数学プログラム問題 | トップページ | シートの並び替えをする »

2011年1月29日 (土)

0以下は0に、その他はそのままにする

まずは、ワークシート関数でやってみます。

IF関数を使います。
たとえば、
A1-B1の計算をして
その答えを0以下は0に、その他はそのままにするには

=IF(A1-B1<0,0,A1-B1)

とセルに入力します。

もしA1-B1が0より小さいなら値を0に、
そうでないなら値をA1-B1にする働きをします。

下のシートの画像のA列、B列には

=RAND()

で乱数をいれています。
C列の1行目は

=A1-B1

D列の1行目が

=IF(A1-B1<0,0,A1-B1)

になっています。
C列、D列は2行目以降オートフィルで入力。
Vba20110129a

以上の内容をVBAでやります。

コードはこちら

0以下は0に、その他はそのままにするコード:

Sub macro110129a()
'0以下は0に、その他はそのままにする

    'A列、B列
    Range("A1:B10").Formula = "=RAND()"
    'C列
    Range("C1:C10").Formula = "=A1-B1"
    'D列
    Range("D1:D10").Formula = "=IF(A1-B1<0,0,A1-B1)"
   
End Sub

次はワークシート関数を使わない方法です。

if文で条件分岐すればいいのですが、
単純な条件でifを使って
コードが長くなるのも見にくいので
なにかいい関数はないかと
VBAのヘルプで関数を調べてみたら
Switch関数が見つかったのでそれを使います。

Switch関数の使い方の簡単な説明:

Switch(式1, 値1, 式2, 値2, 式3, 値3, ・・・)

式を順に評価していき
最初に真(True)になる式に関連付けられた値(式1なら値1)を返す。

ほぼIf文の代わりに使えそうです。

コードはこちら

0以下は0に、その他はそのままにするコード2:

Sub macro110129b()
'0以下は0に、その他はそのままにする

    'A列、B列に乱数
    Range("A1:B10").Formula = "=RAND()"
    Range("A1:B10") = Range("A1:B10").Value
        '↑再計算されてしまうので値に変換
    'C列にA列-B列
    Range("C1:C10").Formula = "=A1-B1"
   
    Dim i As Integer
    Dim Val1 As Single
   
    'D列
    For i = 1 To 10
        Val1 = Cells(i, 1) - Cells(i, 2)
        Cells(i, 4) = Switch(Val1 < 0, 0, True, Val1)
        '0より小さいなら0
        'そのほかはそのまま
    Next i
   
End Sub

今までは計算しながら条件判断、入力をしていましたが、
次は既にある値を条件判断し値を変更します。

For Each Nextを使って指定範囲内のセルをまわして
If文で条件分岐して値を変更します。

コードはこちら

0以下は0に、その他はそのままにするコード3:

Sub macro110129c()
'0以下は0に、その他はそのままにする

    Dim i As Integer, j As Integer
   
    'Range("A1:E10")に適当な値を入れる
    For i = 1 To 10
        For j = 1 To 5
            Cells(i, j) = Rnd() - Rnd()
        Next j
    Next i
   
    Stop
   
    '判断
    Dim obj As Object
    For Each obj In Range("A1:E10")
        If obj < 0 Then obj = 0
    Next obj
   
End Sub

実行例
Vba20110129b

Switch関数はいろいろ使えそうですね。

|

« 2011年センター試験、数学プログラム問題 | トップページ | シートの並び替えをする »

コメント

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

トラックバック


この記事へのトラックバック一覧です: 0以下は0に、その他はそのままにする:

« 2011年センター試験、数学プログラム問題 | トップページ | シートの並び替えをする »