サンプル画像
Excelマクロ塾メニュー

エクセルマクロ・VBAは慣れが肝心
最初は難しく感じるExcelのマクロとVBAですが、仕組みが理解できると徐々に使いこなせるようになってきます!
自分のペースで着実に勉強しましょう!

エクセルマクロ塾
エクセルマクロ塾

セルの値によって処理を変えるには

If ~ Thenステートメントを使って条件に合うときのみ処理を実行するプログラムを作ってみましょう。If ~ Thenステートメントをまだまだ使っていくので、やり方をしっかりと覚えていきましょう。

 

エクセルVBA

 

今回はこの図の備考欄に「返品」と書かれている商品Fの金額を値引きするマクロを作成します。

プログラミングする手順と内容と順番は

①それぞれ変数を定義し、値を代入していく。

②参照しているセルの値がなくなるまでDo ~ Loopステートメントを行う。

③条件を指定しセルの値が出した条件に合うかどうかを判断する。

 ⇒条件に合う場合 変数「返品」の値にそのセルにある値の金額を加算する。

 ⇒合わない場合  次のセルへ移動するために変数「行番号」に1を加える。

 

 

それではVBEを使いマクロの組み方を順番に説明していきます。

 

①VBEを起動してブックを選択し、モジュールを起動する。

上のプログラミングする内容を見ながらやっていきましょう。

 

エクセルVBA

モジュール挿入先のブックである、「VBAProject (計算書.xls)」が選択されていることを確認してからモジュールの挿入を行います。

タブの挿入から「標準モジュール」をクリック。

エクセルVBA

モジュールが挿入されました。

 

②マクロの開始を宣言してから、変数を値に代入します。

変数を定義します。

 

変数 [ Sub 総合計算_値引き ]と入力し、変数に値を代入します。

 

sub 総計算書_値引き

  Dim  行番号  As integer

  Dim 値引き  As Currencey

  行番号 = 2

  値引き = 0

End Sub

 

行番号はA2から金額のデータが始まるので2を代入する。

値引きは最初0なので、変数には0を入れておく。

変数「値引き」にも0を代入してください。

 

③Do ~ Loopステートメントとループをとめる条件を入力します。

sub 総計算書_値引き

  Dim  行番号  As integer

  Dim 値引き  As Currencey

  行番号 = 2

  値引き = 0

  do until cells(行番号,2).Value=""

End Sub

do untilと半角スペースを入力し、その後にcells(行番号,3).Value=""を入力する。

 

do until cells(行番号,2).Value=""

(セル(行番号,3)の値がなくなるまで以下の処理を繰り返し行います。)

 

④If ~ Thenステートメントと条件を入力する。

sub 総計算書_値引き

  Dim  行番号  As integer

  Dim 値引き  As Currencey

  行番号 = 2

  値引き = 0

  do until cells(行番号,2).Value=""

    if cells(行番号,5).Value="返品" then

End Sub


if cells(行番号,5).Value="返品" then

(もしセル(行番号,6)の値が「返品」であれば)


⑤条件に合ったときの処理を入力する

Sub 計算書()
 Dim 行番号 As Integer
 Dim 返品 As Currency
 行番号 = 2
 返品 = 0
  Do Until Cells(行番号, 2).Value = ""
   If Cells(行番号, 6).Value = "返品" Then
    返品 = 返品 + Cells(行番号, 5).Value

 

変数 「返品」の値に、そこまでの変数 「返品」の値にセル(行番号,5)を設定します。


If ~ Thenステートメントを終了し、行番号の値を設定する。

Sub 計算書()
 Dim 行番号 As Integer
 Dim 返品 As Currency
 行番号 = 2
 返品 = 0
  Do Until Cells(行番号, 2).Value = ""
   If Cells(行番号, 6).Value = "返品" Then
    返品 = 返品 + Cells(行番号, 5).Value
   End If
   行番号 = 行番号 + 1


次に行うループで現在より1つ下の行を参照するので、変数 「行番号」を1増やします。


Do ~ Loopステートメントを終了し、セルの値を設定する。

Sub 計算書()
 Dim 行番号 As Integer
 Dim 返品 As Currency
 行番号 = 2
 返品 = 0
  Do Until Cells(行番号, 2).Value = ""
   If Cells(行番号, 6).Value = "返品" Then
    返品 = 返品 + Cells(行番号, 5).Value
   End If
   行番号 = 行番号 + 1

 Loop
Cells(行番号, 2).Value = "返品"
Cells(行番号, 5).Value = 返品 * -1
End Sub


Do ~ Loopステートメントを終了します。

セル(行番号,2)の値に 「返品」を設定します。

返品の金額にマイナスをつけて表示させるために、変数 「値引き」に-1をかける設定をします。

 

マクロを保存して実行

ファイルのタブから保存を選択し、エクセルに切り替えます。

 

[ ツール ]タブから[ マクロ ] ⇒ [ マクロ ]をクリック

 

[ マクロ ]のボックスが表示されるので、「計算書」をクリックして実行をクリックします。

 

VBA エクセルマクロ

 

商品Fの合計金額がマイナスで表示されたことを確認してください。

 

9行目に 「返品」という項目が追加されたことを確認してください。

 

長くなりましたがこれで終了です。

これまでにやってきた「 If ~ Then 」や「 Do ~ Loop 」などが出てきましたね。

繰り返しや条件判断はマクロの中で必要になってくることが多いので、しっかりと使えるように勉強していきましょう!

VBA