Excel VBA データ入力用セルのデータをつねに表の新しい行に入力する

スポンサーリンク
スポンサーリンク

データ入力用セルのデータをつねに表の新しい行に入力する方法

行方向にデータが増えていく表では
新たなデータは、入力済み行の下の行に入力します。

入力するセルが決まっていれば
効率的にデータの入力ができますし
入力漏れ時の制御などが簡単にでき
ミスの少ないデータの入力ができます。

完成イメージ



コード例

Private Sub CommandButton1_Click()
Dim 最終行 As Long
If Range("B3").Value = "" Then
MsgBox "名前を入力してください。"
Exit Sub
ElseIf Range("C3").Value = "" Then
MsgBox "電話番号を入力してください。"
Exit Sub
Else
最終行 = Cells(Rows.Count, 1).End(xlUp).Row + 1
If 最終行 = 6 Then
Range("A" & 最終行).Value = 1
Else
Range("A" & 最終行).Value = Range("A" & 最終行 - 1).Value + 1
End If
Range("B" & 最終行).Value = Range("B3").Value
Range("C" & 最終行).Value = Range("C3").Value
Range("D" & 最終行).Value = Date
Range("A5").CurrentRegion.Borders.LineStyle = True
Range("B3:C3").ClearContents
End If
End Sub

コードの解説

1行目
【Private Sub CommandButton1_Click()】

コマンドボタンがクリックされたときに発生する
CommandButton【コマンドボタン】コントロールオブジェクトの
Click【クリック】イベントプロシージャにコードを記述します。
シートに配置された
CommandButton【コマンドボタン】コントロールオブジェクトなので
設置されたシートのモジュールにコードを記述します。







2行目
【Dim 最終行 As Long】

表範囲のデータの最終行番号に1を加算した
行数、すなわち、最後のデータの下の行番号を
格納する変数「最終行」を
長整数型(Long)で宣言します。


3行目
【If Range(“B3”).Value = “” Then】

Ifステートメント(条件分岐)を使用して
名前のデータを入力するB3セルが未入力のときを定義します。


4行目~5行目
【MsgBox “名前を入力してください。”
Exit Sub】

3行目の条件分岐が成立したとき
すなわち、B3セルの名前が未入力のとき
MsgBox【メッセージボックス】関数を使用してメッセージを表示し
Exit【エグジッット】ステートメントでSub【サブ】プロシージャを
途中で終了します。


6行目~8行目
【ElseIf Range(“C3”).Value = “” Then
MsgBox “電話番号を入力してください。”
Exit Sub】

ElseIf【エルズイフ】ステートメントに2つ目の条件式を指定します。
電話番号を入力するC3セルが未入力のときを定義します。
条件が成立した場合は、MsgBox関数でメッセージを表示し
Exit【エグジッット】ステートメントでSub【サブ】プロシージャを
途中で終了します。


9行目
【Else】

Else【エルズ】ステートメントを宣言し
条件分岐がすべて成立しなかったとき
つまり、名前を入力するB3セルと電話番号を入力するC3セルに
データが入力されている場合
以下の処理を実行します。


10行目
【最終行 = Cells(Rows.Count, 1).End(xlUp).Row + 1】

Rows.Countプロパティで終端セルを参照し
End【エンド】プロパティの引数をxlUpに指定し
上方向にデータの終端セルを参照してRow【ロウ】プロパティで
行数を取得しその行数に1を加算してデータが入力されている
終端セルの次のセルの行番号を取得して
変数「最終行」に代入します。


11行目
【If 最終行 = 6 Then】

Ifステートメント(条件分岐)を使用して
変数「最終行」が6だったときを定義します。
つまり、表の項目を除き
「データが未入力の状態のとき」を定義します。


12行目
【Range(“A” & 最終行).Value = 1】

4行目の条件分岐が成立したとき
すなわちデータの最初の行の場合
A列の連番が入力されるNO列(A6セル)に1を代入します。


13行目~14行目
【Else
Range(“A” & 最終行).Value = Range(“A” & 最終行 – 1).Value + 1】

Else【エルス】ステートメントを使用して
条件が成立しなかったときの処理を定義します。
変数「最終行」の値が6ではないときの処理をします。
つまり、一番最初のデータではないときの
A列(連番)の処理です。
A列の変数「最終行」を1減算して、前の行の「連番」を
Value【バリュー】プロパティで参照して1加算することで
連番を作成して
Range(”A” & 最終行).Valueで新しい行のA列に連番を
作成します。


16行目
【Range(“B” & 最終行).Value = Range(“B3”).Value】

B列の変数「最終行」すなわち、データの終端セルの新しい行に
B3セルの値(名前)を代入します。


17行目
【Range(“C” & 最終行).Value = Range(“C3”).Value】

C列の変数「最終行」すなわち、データの終端セルの新しい行に
C3セルの値(電話番号)を代入します。


18行目
【Range(“D” & 最終行).Value = Date】

C列の変数「最終行」すなわち、データの終端セルの新しい行に
Date【デイト】関数で入力日の日付を入力します。


19行目
【Range(“A5”).CurrentRegion.Borders.LineStyle = True】

Rangeオブジェクトの
CurrentRegion【カレントリージョン】プロパティを使用して、A5セルから始まる表範囲を参照して
Borders【ボーダーズ】プロパティの引数を省略することで
セルの四辺の罫線を表し
LineStyle【ラインスタイル】プロパティにTrueを指定して
表範囲にセルに罫線を設定します。


20行目
【Range(“B3:C3”).ClearContents】

名前と電話番号を入力する入力用のセルを
Rangeオブジェクトの
ClearContents【クリアコンテンツ】メソッドを使用してクリアします。


以上で
データ入力用セルのデータをつねに表の新しい行に入力する
方法についての解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク