【VBA】入力値で選択範囲の数値を一括更新(パーセント増減)するマクロ

目次

はじめに

売上予測や予算計画を立てる際、「もし全体の数値が5%増加したらどうなるだろう?」「もし10%減少したら…?」といったシミュレーションを手軽に行いたいときがありますよね。

選択した範囲の数値を一つずつ手で計算し直すのは大変ですが、VBAの Application.InputBox を使えば、対話形式でパーセント値を入力し、選択範囲の数値を一括で更新する便利なマクロを作成できます。

この記事では、指定したパーセントに応じて、選択範囲の全ての数値を一括で増減させる、実用的なマ様クロをご紹介します。


入力値で数値を一括更新するVBAサンプルコード

このマクロは、以下の手順で動作します。

  1. ユーザーに入力ボックスを表示し、増減させたいパーセント値(例: 5-10)を入力してもらう。
  2. 入力されたパーセント値をもとに、乗算するための係数(例: 1.050.9)を計算する。
  3. 選択されているセル範囲を一つずつループ処理し、計算した係数を掛け合わせて値を更新する。

完成コード

' 選択範囲の数値を、入力されたパーセント値で増減させる
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 という引数を指定することで、入力される値を数値に限定しています。これにより、ユーザーが誤って文字列を入力するのを防ぎます。
  • ユーザーが「キャンセル」ボタンを押すと、この InputBoxFalse(ブール値)を返します。次の行の 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.InputBoxType:=1 を使うと、安全に数値を受け取れる。
  • ループ処理の中で IsNumeric などの関数でチェックを入れることで、エラーに強いプログラムになる。

このマクロをクイックアクセスツールバーなどに登録しておけば、さまざまなパターンの増減シミュレーションが手軽に行えるようになり、データ分析や計画立案のスピードを大きく向上させることができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次