はじめに
売上予測や予算計画を立てる際、「もし全体の数値が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などの関数でチェックを入れることで、エラーに強いプログラムになる。
このマクロをクイックアクセスツールバーなどに登録しておけば、さまざまなパターンの増減シミュレーションが手軽に行えるようになり、データ分析や計画立案のスピードを大きく向上させることができます。

 
			 
			 
			 
			 
			 
			 
			