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