こんにちは、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