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【クリアコンテンツ】メソッドを使用してクリアします。


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

スポンサーリンク

関連記事・広告