ある数値がどの範囲にあるかを知りたい
仕事で作成中のツールにて。
ある数値が100単位で、どの範囲にあるか知る必要がでてきた。具体的には、例えば以下のとおり。
数値:130 ⇒ 0100~0199
数値:351 ⇒ 0300~0399
要は、「351」(数値)という入力に対し、「0300~0399」(文字列)という戻り値を得る関数があれば良い訳で。
そこで今回は、二通りの方法を考えてみた。
1.引いて引いて余りが0
とにかく、入力した値を1ずつ引いていく。で、100で割って余りが0なら、そこは100の倍数となり、つまり求める範囲の最小値になる。
Function GetNumberRange(val As Long) As String Dim i As Long If val Mod 100 <> 0 Then For i = 1 To 100 val = val - 1 If val Mod 100 = 0 Then Exit For End If Next End If GetNumberRange = Format(val, "0000") & _ "~" & _ Format(val + 99, "0000") End Function
最初に余りを確認しているのは、入力値が100などの場合、そこが最小値だから。
ループで1~100としたのは、100回以内に最小値へ到達するから。
1つずつ引くという地味な作業だが、初学者がFor ~ Next ループを学ぶ題材に使えるかもしれない。
2.最寄りの値を求めてみる。
MROUND関数を用いて、入力した値が100飛びで最も近い値を求めてみる。
例えば、
MROUND(1,100)=0
となる。1 は 0 と 100 の間にあって、0 の方が近いから。その後、50から先の戻り値は100となる。
MROUND(48,100)=0
MROUND(49,100)=0
MROUND(50,100)=100
MROUND(51,100)=100
そこでMROUND関数で求めた値と元の値の大小を比較して、最小値を求めてみた。
Function GetNumberRange(val As Long) As String Dim Temp As Long Temp = WorksheetFunction.MRound(val, 100) If Temp > val Then Temp = Temp - 100 End If GetNumberRange = Format(Temp, "0000") & _ "~" & _ Format(Temp + 99, "0000") End Function
行数が少ない分、こちらの方がお勧めです。
参考まで。