ChangeValueCell|セルの値を上限下限内で増減する
- yuji fukami
- 3 日前
- 読了時間: 2分
この部品でできること
ChangeValueCell は、指定したセルの値を、決めた増減幅で増やしたり減らしたりするExcel VBAの汎用プロシージャです。
セル・増減幅・増やすか減らすかを渡すだけで、セルの値を書き換える
上限値・下限値を指定すると、それを超えないようにクランプ(頭打ち)してくれる
上限・下限は省略可能なので、範囲を決めない単純な加減算としても使える
値が0に極めて近くなったときに指数表記(1E-17のような表示)になってしまう問題への対策も含んでいる
使いどころ
ボタンを押すたびにセルの値を1つずつ増減させたいとき(EventShowSpinButton_Multiがこの用途で使っています)
パラメータの値を「0〜100の範囲でしか増減させたくない」のように、入力できる範囲を制限したいとき
スピンボタンや、ワンクリックで数値を調整するUIを自作したいとき
コード
使い方・引数
引数は5つです。MaxValue・MinValueは省略可能です。
Target(Range)・・・増減対象のセル
Step(Double)・・・増減値
Up_True(Boolean)・・・Trueで増加、Falseで減少
[MaxValue](Double)・・・増減の上限値。省略時は上限なし
[MinValue](Double)・・・増減の下限値。省略時は下限なし
呼び出し例は次のとおりです。
Up_TrueにTrueを渡すとStep分だけ加算、Falseを渡すとStep分だけ減算します。MaxValue・MinValueを両方省略すれば、上限下限を気にしない単純な加減算として使えます。
依存プロシージャ
S__AddValueToCell(0付近での指数表示対策)にのみ依存していますが、上のコードブロックに含めているので、そのまま標準モジュールに貼り付ければ動作します。
応用・注意点
浮動小数点数は、計算結果が0に極めて近いとき(例えば0.00000000000000012のような値)に、セルの表示が指数表記(1.2E-16)になってしまうことがあります。これはVBAの計算誤差によって、本来ぴったり0になるはずの引き算が、ごくわずかにずれた値になってしまうために起きます。
S__AddValueToCellでは、計算結果の絶対値が0.000001未満なら「実質0とみなして0を代入する」ことで、この指数表示を防いでいます。増減を繰り返すセルで表示が急に読みにくくなる、というありがちな不具合への対策です。
MaxValue・MinValueの判定は、Stepの符号とUp_Trueの組み合わせで場合分けしています。例えば「減少方向にマイナスのStepを渡す」といった通常想定しない組み合わせにも対応できるようになっていますが、基本的にはStepは正の値を渡し、増やすか減らすかはUp_Trueだけで指定する使い方をおすすめします。
まとめ
ChangeValueCell は、対象セル・増減幅・方向を渡すだけでセルの値を増減できる汎用プロシージャです。上限下限を指定すればクランプ処理も自動でやってくれるので、スピンボタンのような「範囲を決めて数値を調整するUI」を自作するときの土台として使えます。

