Worksheet Changeはワークシートのセルの内容に変化(change)があった事でプログラムが起動します。
仕入管理同様にWorksheet Changeから記述していきます。仕入管理と同じ内容が多くなりますがご了承ください。
VBA経費管理1 (Workbookの構成)に基づいて作成しています。
VBE画面
Worksheet「経費申請」作成したのち、画面下のWorksheet「経費申請」タブを右クリックして「コードの表示」選択してVBE画面に移動します。
画面左にSheet1(経費申請)が薄く選択されていることを確認してください。
Worksheet_Change
Option Explicit
画面右上のリストボックスは「Worksheet」と「Change」を選択。
Private Sub Worksheet_Change(ByVal Target As Range)が作成されます。
改行してその上にOption Explicitと入力して使用する予定の変数を定義します。
Option Explicit で変数を定義するとSheet1(経費申請)内で使用できます
変数の説明は変数をご参照ください。
Worksheetの内容に変更があった場合に処理が開始されます。
例)セルA1に文字を入力する。
Worksheet_Changeの全体
On Error GoTo jump1
Application.EnableEvents = False
‘セルの行と列の取得
cr1 = Target.Row
cc1 = Target.Column
‘入力欄に入力後のセルの横移動
If cr1 = 6 And cc1 > 5 And cc1 < 11 Then
Cells(6, cc1 + 1).Select
End If
‘ID No.入力してデータの呼出
If cr1 = 6 And cc1 = 5 Then
If Cells(9, 5).Value <> “作成” Then ‘進捗状況「作成」以外処理をしない
MsgBox (“清算完了処理を行ってください。”)
GoTo jump1
End If
If Cells(6, 5).Value = “” Then GoTo jump1
Cells(2, 5).Value = “修正”
‘データの呼出
For h = 13 To 37
If Cells(6, 5).Value = Cells(h, 5).Value Then
For k = 6 To 11
Cells(6, k).Value = Cells(h, k).Value
Next
GoTo jump1
End If
Next
For h = 41 To 45
If Cells(6, 5).Value = Cells(h, 5).Value Then
For k = 5 To 10
Cells(6, k).Value = Cells(h, k).Value
Next
GoTo jump1
End If
Next
MsgBox (“ID No.が見当たりません。”)
Clr_01
End If
jump1:
Application.EnableEvents = True
End Sub
Application.EnableEvents, Target
冒頭の記述はVBAプログラム(ワークシートイベント1)をご参照ください。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
cr1 = Target.Row
cc1 = Target.Column
Error処理
On Error GoTo jump1
(中略)
jump1:
入力欄に入力後のセルの横移動
If cr1 = 6 And cc1 > 5 And cc1 < 11 Then
Cells(6, cc1 + 1).Select
End If
ID No.入力してデータの呼出
If cr1 = 6 And cc1 = 5 Then
(中略)
End If
If Cells(9, 5).Value <> “作成” Then ‘進捗状況「作成」以外処理をしない
MsgBox (“清算完了処理を行ってください。”)
GoTo jump1
End If
セルE9には”作成”,”発行済”,”清算済”の状態があり”作成”であることを、処理をすすめる条件としています。
If Cells(6, 5).Value = “” Then GoTo jump1
Cells(2, 5).Value = “修正”
空白ではない場合にセルE2を“修正”として、以下の処理に進みます。
データの呼出
For h = 13 To 37
If Cells(6, 5).Value = Cells(h, 5).Value Then
For k = 6 To 11
Cells(6, k).Value = Cells(h, k).Value
Next
GoTo jump1
End If
Next
For h = 41 To 45
If Cells(6, 5).Value = Cells(h, 5).Value Then
For k = 5 To 10
Cells(6, k).Value = Cells(h, k).Value
Next
GoTo jump1
End If
Next
セルE6に入力された値がE13:E37(支出)もしくはE41:E45(収入)にあればその行の値を入力欄に戻し、修正可能とします。
GoTo jump1で処理をでます。
For…Next文を使って連続的に値を代入します。代入終了後は処理を出ます。
For…Nextの外
MsgBox (“ID No.が見当たりません。”)
Clr_01
Clr_01は入力欄、入力候補欄の値を消去します。Module1に記述し、他のプログラムから呼出します
以上でWorksheet Changeの説明は終わりです。次回はWorksheet_SelectChange1に進みます。