PR

【VBA】UserFormを常設してセルにデータを書き込む

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
Excelでデータ入力をしていると既存データの内、特定箇所だけ修正したいケースが発生
することがあると思います。

元のデータ数や修正しようとするデータ数が少ない場合は手動でファイルを開いて対象を
探して修正してもそれほど手間では無いのですが、数千~数万データの場合や修正データが
多い場合はかなり手間になりますので、手動で対処する工数も相応に発生します。

そこで、同一シート上であればUserFormを常時アクティブ状態としてセルに入力するように
Formに入力することで対象を検索しセルへデータを書き込む簡易的なサンプルコードを
紹介します。

スポンサーリンク

1.サンプルSheet/UserForm

サンプルSheetとして検索対象とする「SN」(TextBox1)欄があり、「Data1」「Data2」
(TextBox2,TextBox3)にそれぞれ入力するものとします。

UseFormについてはSheet同様に「SN」「Data1」「Data2」を入力するTextBoxを準備し
データを書き込む「反映」とTextBoxクリア用の「Clear」、作業完了時に使う「終了」を
コマンドボタンとして設置しています。

動作としてはUserFormに入力して反映ボタンを押すと、検索対象のSNを抽出してData1,2へ
Formに入力したデータを書き込みます。
UserFormは常時アクティブなので書込み後も表示されており、次入力に備えてTextBox1を
フォーカスした状態にしています。

2.サンプルコード

◆UserForm呼び出し

Sub Dat_RefSample()
 
 UserForm1.Show vbModeless

End Sub

UserFormを呼び出す際に、常時アクティブ化の状態とするには
UserForm1.Show vbModelessの様に記述します。

◆コマンドボタン1「反映」

Private Sub CommandButton1_Click()

  Dim Sn(1) As Integer
  Dim Num(2) As Double
  Dim Tgtnm As Variant

  Sn(1) = Me.TextBox1
  Num(1) = Me.TextBox2
  Num(2) = Me.TextBox3

  For Each Tgtnm In Range("B:B") 'B列から対象を検索
       If Tgtnm = Sn(1) Then
           Tgtnm.Select          '検索対象と一致したらセルを選択
           ActiveCell.Offset(0, 1) = Num(1)  'Data1書込み
           ActiveCell.Offset(0, 2) = Num(2)  'Data2書込み
           Exit For
       End If
  Next
  
  'UserForm内のTextBoxを一括でクリアする
  Dim Txt_Clear As Control

  For Each Txt_Clear In Controls
        If TypeName(Txt_Clear) = "TextBox" Then _
            Txt_Clear.Value = ""
  Next

  Erase Sn, Num
  Me.TextBox1.SetFocus  '次入力に備えて選択させる

End Sub

「反映」ボタンを押した際の処理になりますが、For Eachを使ってB列から入力されたSNを
検索し一致したら対象セルへData1,2を書き込み、ループを抜けてForm内のTextBoxデータを
一括でクリアします。

その後、次入力に備えてTextBox1をフォーカス状態として終了です。

◆コマンドボタン2「Clear」

Private Sub CommandButton2_Click()

  Dim Txt_Clear As Control

  For Each Txt_Clear In Controls
        If TypeName(Txt_Clear) = "TextBox" Then _
            Txt_Clear.Value = ""
  Next

  TextBox1.SetFocus

End Sub

この部分はコマンドボタン1「反映」コード内に記述したものと同一です。

◆コマンドボタン3「終了」

Private Sub CommandButton3_Click()

  Unload UserForm1

End Sub

ここはUserFormを閉じますのでUnload UserForm1 のみで大丈夫です。

3.動作例

仮にB列の「SN」8050のデータを修正するとします。
既に赤枠に示す通りデータが入っていますので、UserForm内にデータを記入します。

 

入力後に「反映」ボタンを押すことで「SN」8050のデータが置換されます。
画面固定等の記述はしていませんので置換される際に、対象セルが表示されますから
目視で確認も出来ます。

私の場合は製造部門で管理するデータ等で変更や修正が生じた際に適宜修正するものもあり、
その際の手間を簡略化する目的で簡易的に作ってみたものです。
既に入力されたデータに対し修正しようとするデータ等が順不同だったりすると、今回の様な
方法が活きると思います。



以上がUserFormを常設してセルにデータを書き込むサンプルのご紹介でした。
何かのお役に立てれば幸いです。

Ryo

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