今回は「ユーザーフォームに登録した医薬品データをワークシートに転記するコード」を書いていきます。
それではいきましょう。
スポンサーリンク
上下のセルを参照するoffset()プロパティ
上の画像の赤枠の部分が今回書くコードになります。VBA講座2-14で書いた「医薬品新規登録の最終確認のコード」の下に書きます。
Dim TargetRow As IntegerTargetRow = .Range(“A65536”).End(xlUp).Offset(1).Row.Range(“A” & TargetRow).Value = txtDname.Text
.Range(“B” & TargetRow).Value = txtGname.Text
.Range(“C” & TargetRow).Value = txtKigou.Text
.Range(“D” & TargetRow).Value = txtEffect.Text
.Range(“E” & TargetRow).Value = cboKubun.Value
.Range(“F” & TargetRow).Value = cboTani.Value
.Range(“G” & TargetRow).Value = txtSei1.Text
.Range(“H” & TargetRow).Value = txtSei2.Text
.Range(“I” & TargetRow).Value = txtSei3.Text
.Range(“J” & TargetRow).Value = txtSei4.Text
.Range(“K” & TargetRow).Value = txtKou1.Text
.Range(“L” & TargetRow).Value = txtKou2.Text
.Range(“M” & TargetRow).Value = txtKou3.Text
.Range(“N” & TargetRow).Value = txtKou4.TextEnd With
1行ずつ解説していきます。
まずはwithステートメント。Worksheets(“医薬品マスタ”)を省略する目的で使用します。
続いて変数の宣言。変数TagetRowを整数と宣言します。なぜ整数かは追々わかりますので、このまま読み進めて下さい。
まず=の左側の意味は…「変数TargetRowは」ですね。
そして=の右側。
採用区分と単位のコンボボックスにワークシートの値を読み込ませる所で、「最終行の取得」についてお話しましたね(VBA講座2-11参照)。
ただ今回はOffset(1)というのが入っています。これが非常に重要なポイントです。
Offset(1)は「1つ下」という意味です。
(2)なら「2つ下」。後ろに「.Row」が付いていますので、「Offset(1).Row」は「1つ下の行」となります。
withで省略されていますが、「Worksheets(“医薬品マスタ”)のA65536のセルから上に向かってぶつかった行の1つ下の行」という意味です。
なぜこのように書く必要があるのでしょうか?
もしこのoffset(1)を入れないと、ぶつかった行を上書きしてしまう事になります。なのでぶつかった行の一つ下の行にデータを登録していくんですね。
まだ医薬品データが一つも登録されていない状態です。この状態では上に向かってぶつかった行は1行目ですよね?
それの1つ下ですから2行目に登録されるという事です。もしoffset(1)を入れないと1行目の見出しに上書きされてしまいます。わかりますか?
次にいきましょう。
「ワークシート医薬品マスタのA列、変数TargetRow行の値はtxtDnameに入力されたテキストである。」
1行に1個の医薬品データを登録していきます。薬品名はA列になりますね。
なぜ行を変数にするのかわかりますか?
登録する行はぶつかった行の一個下ということになるので、行は既に登録されている薬の数により変わるので、TargetRowと変数にするわけです。
txtGname以下も同じように入力していきます。成分名はB列になりますね。
「ワークシート医薬品マスタの(B列、変数TargetRow行)の値はtxtGnameに入力されたテキストである」となります。これで一般名が転記されます。
最後の行です。
これで同効薬の4つ目が転記されるようになります。
最後に「End With」を入れるのを忘れずに。エラーが発生します。
それではF5を押して実行してみましょう。
スポンサーリンク
実際に登録されるかチェックしてみよう
上の画像のように入力してみてください。
今回は「アリセプトD錠5mg」を入力しました。あなたが勤務する病院には採用がなく、後発品の「ドネペジルOD錠5mg「JG」」の採用があるという設定です。
では「登録ボタン」を押して、「はい」をクリック。
ユーザーフォームの後ろに表示されているワークシートの2行目に注目!
データが登録されましたね。今回見やすいように列の幅を一部拡げていますが、しなくてもOKです。
ここで1つ注意です。データを登録する際は、全角か半角か必ずどちらかに統一して入力するようにして下さい。
例えばアリセプトD錠3mgとアリセプトD錠3mgは別の医薬品と認識されてしまいますので、同一の医薬品が複数登録される可能性があります。
それでは今回はこれで終了となります。お疲れ様でした。
次回もこれまた重要なポイント。医薬品が重複して登録されないようにチェックするコードを書いていきます。