はじめに
売上予測や予算計画を立てる際、「もし全体の数値が5%増加したらどうなるだろう?」「もし10%減少したら…?」といったシミュレーションを手軽に行いたいときがありますよね。
選択した範囲の数値を一つずつ手で計算し直すのは大変ですが、VBAの Application.InputBox
を使えば、対話形式でパーセント値を入力し、選択範囲の数値を一括で更新する便利なマクロを作成できます。
この記事では、指定したパーセントに応じて、選択範囲の全ての数値を一括で増減させる、実用的なマ様クロをご紹介します。
入力値で数値を一括更新するVBAサンプルコード
このマクロは、以下の手順で動作します。
- ユーザーに入力ボックスを表示し、増減させたいパーセント値(例:
5
や-10
)を入力してもらう。 - 入力されたパーセント値をもとに、乗算するための係数(例:
1.05
や0.9
)を計算する。 - 選択されているセル範囲を一つずつループ処理し、計算した係数を掛け合わせて値を更新する。
完成コード
' 選択範囲の数値を、入力されたパーセント値で増減させる
Sub UpdateSelectionByPercentage()
'== 変数を定義します ==
Dim promptMessage As String
Dim boxTitle As String
Dim userInput As Variant
Dim multiplier As Double
Dim targetCell As Range
'== InputBoxのメッセージとタイトルを設定 ==
promptMessage = "数値を増減させるパーセント値を入力してください。" & vbCrLf & _
"(例: 10%増なら 10, 5%減なら -5)"
boxTitle = "シミュレーション実行"
'== ユーザーからの入力を受け付けます ==
userInput = Application.InputBox(Prompt:=promptMessage, Title:=boxTitle, Type:=1) 'Type:=1 は数値のみ
' キャンセルボタンが押されたり、無効な値が入力された場合は処理を終了
If VarType(userInput) = vbBoolean And userInput = False Then Exit Sub
'== 入力値から乗算係数を計算 ==
multiplier = 1 + (userInput / 100)
'== 選択範囲の数値セルのみを更新 ==
For Each targetCell In Selection.Cells
' セルの値が数値で、かつ空白でない場合のみ処理を実行
If IsNumeric(targetCell.Value) And Not IsEmpty(targetCell.Value) Then
targetCell.Value = targetCell.Value * multiplier
End If
Next targetCell
MsgBox "選択範囲の数値を " & userInput & "% で更新しました。", vbInformation
End Sub
コードの解説
userInput = Application.InputBox(...)
Application.InputBox
を使って、ユーザーからの入力を受け付けるダイアログボックスを表示しています。
Type:=1
という引数を指定することで、入力される値を数値に限定しています。これにより、ユーザーが誤って文字列を入力するのを防ぎます。- ユーザーが「キャンセル」ボタンを押すと、この
InputBox
はFalse
(ブール値)を返します。次の行のIf
文でそれをチェックし、処理を安全に中断しています。
multiplier = 1 + (userInput / 100)
入力されたパーセント値から、実際にセル値に乗算するための係数を計算しています。
- 例えば、
10
が入力されれば1 + (10 / 100)
で1.1
(10%増) となります。 -5
が入力されれば1 + (-5 / 100)
で0.95
(5%減) となります。
For Each targetCell In Selection.Cells
Selection
(現在選択されているセル範囲)の中のセルを、For Each
ループで一つずつ処理しています。
If IsNumeric(targetCell.Value) And Not IsEmpty(targetCell.Value) Then
選択範囲に数値以外の文字列や空白セルが含まれている場合、それらに乗算を行うとエラーが発生します。この If
文で、セルの値が IsNumeric
(数値である)かつ Not IsEmpty
(空白でない)ことを確認し、条件を満たすセルだけを更新する、安全な処理を行っています。
まとめ
今回は、ユーザーからの入力値をもとに、選択範囲の数値を一括で更新するシミュレーションマクロをご紹介しました。
Application.InputBox
のType:=1
を使うと、安全に数値を受け取れる。- ループ処理の中で
IsNumeric
などの関数でチェックを入れることで、エラーに強いプログラムになる。
このマクロをクイックアクセスツールバーなどに登録しておけば、さまざまなパターンの増減シミュレーションが手軽に行えるようになり、データ分析や計画立案のスピードを大きく向上させることができます。