ExcelマクロでOKボタンの動作を改善し、複数回の入力を可能にする方法

Visual Basic

Excelマクロを使用して、ユーザーインターフェイス(UI)からデータをシートに転記する際、1度目のデータ転記は問題なく動作しますが、2度目以降にデータが上書きされるという問題があります。この記事では、この問題を解決する方法と、複数回OKボタンを押してもデータが適切に転記されるようにする方法を解説します。

問題の概要

ユーザーインターフェイスのOKボタンを押すと、指定されたセルに入力されたデータが転記される仕組みです。しかし、1度目の入力後、2度目以降にOKボタンを押しても、最初に転記したセルが上書きされてしまう問題が発生します。希望する動作は、新たな行にデータを追加することです。

原因

この問題の原因は、転記先の行を動的に指定していないことです。現在のコードでは、転記行が1度目の入力時に確定したまま変更されていないため、2度目以降はその行に上書きされてしまいます。

修正方法

転記行を動的に計算し、毎回最新の行を指定するように修正する必要があります。具体的には、転記行を次の空行に設定するコードを追加します。以下に修正したコード例を示します。

Private Sub OK_Click()
名前 = Me.cmb_namae.Value
日付 = Me.txt_day.Value
時間 = Me.txt_time.Value
休暇 = Me.cmb_kyuka.Value

Call 転送(名前, 日付, 時間, 休暇)
End Sub

Sub 転送(名前, 日付, 時間, 休暇)
With ThisWorkbook.Sheets("休暇")
' 空行を探して次の行を転記行に設定
転記行 = .Cells(Rows.Count, 2).End(xlUp).Row + 1
.Cells(転記行, 2) = 転記行 - 1
.Cells(転記行, 3) = Now
.Cells(転記行, 4) = 名前
.Cells(転記行, 5) = 日付
.Cells(転記行, 6) = 時間
.Cells(転記行, 7) = 休暇
End With
End Sub

動作確認

上記の修正を加えた後、OKボタンを何度でも押しても、データが次の空行に追加されることを確認できます。転記行が動的に決まることで、2回目以降の入力でも上書きされず、新しい行にデータが追加されます。

まとめ

Excelマクロを使って、ユーザーインターフェイスからのデータ転記を行う際、転記先の行が固定されていると、2度目以降の入力が上書きされてしまう問題が発生します。この問題は、転記行を動的に計算し、毎回次の空行にデータを追加するようにすることで解決できます。上記のコード修正を行うことで、複数回の入力がスムーズに行えるようになります。

コメント

タイトルとURLをコピーしました