病院で処方された薬や病気についてわかりやすく解説します

VBA講座2-15  登録したデータをワークシートに転記する

ノートパソコンとハーブ

今回はユーザーフォームに登録したデータをワークシートに転記するコードを書いていきます。ではいきましょう。

スポンサーリンク

上下のセルを参照するoffset()プロパティ

 

vba2-15-1上の画像の赤枠の部分が今回書くコードになります。前回の登録の最終確認のコードの下に書きます。

 

1行ずつ解説していきます。

With Worksheets(“医薬品マスタ”)

まずはwithステートメント。Worksheets(“医薬品マスタ”)を省略するためです。

 

 Dim TargetRow As Integer

続いて変数の宣言。変数TagetRowを整数と宣言します。なぜ整数かは追々わかります。

 

TargetRow = .Range(“A65536”).End(xlUp).Offset(1).Row

まず=の左側の意味は…「変数TargetRowは」ですね。

 

そして=の右側。

採用区分と単位のコンボボックスにワークシートの値を読み込ませる所で、最終行の取得についてお話しました。ただ今回はOffset(1)というのが入っています。

 

これが非常に重要です。

これは1つ下という意味です。(2)なら2つ下。後ろに.Rowが付いていますので、1つ下の行となります。

 

withで省略されていますが、Worksheets(“医薬品マスタ”)のA65536のセルから上に向かってぶつかった行の1つ下の行という意味です。

 

なぜこのように書く必要があるのでしょうか?

もしこのoffset(1)を入れないとぶつかった行を上書きしてしまう事になります。そのためぶつかった行の一つ下の行にデータを登録していくんですね。

 

 

vba2-15-2上の画像を見て下さい。

まだ医薬品データが一つも登録されていない状態です。この状態では上に向かってぶつかった行は1行目ですよね?それの1つ下ですから2行目に登録されるという事です。もしoffset(1)を入れないと1行目に上書きされてしまいます。わかりますか?

次は簡単です。

.Range(“A” & TargetRow).Value = txtDname.Text

「ワークシート医薬品マスタのA列、変数TargetRow行の値はtxtDnameに入力されたテキストである。」

 

1行に1個の医薬品データを登録していきます。薬品名はA列になりますね。登録する行はぶつかった行の一個下ということになるので、行は既に登録された薬の数により変わるのでTargetRowと変数にします。

 

txtGname以下も同じように入力して下さい。

.Range(“B” & TargetRow).Value = txtGname.Text

「ワークシート医薬品マスタの(B列、変数TargetRow行)の値はtxtGnameに入力されたテキストである」となります。これで一般名が転記されます。

 

このように書いていきまして…最後の行です。

.Range(“N” & TargetRow).Value = txtKou4.Text

同効薬の4つ目が転記されます。

 

この後には「End With」を入れるのを忘れずに。エラーが発生します。それではF5を押して実行してみましょう。

 

vba2-15-3そして上の画像のように入力してみてください。

今回はアリセプトD錠5mgを入力しました。病院には採用がなく、後発品のドネペジルOD錠5mg「JG」の採用があるとします。では登録ボタンを押して、「はい」をクリック。

 

vba2-15-4ユーザーフォームの後ろに表示されているワークシートの2行目に注目!データが登録されましたね。※今回見やすいように列の幅を一部拡げていますが、皆さんはしなくても大丈夫です。

 

ここで1つ注意です。データを登録する際は、全角か半角か必ずどちらかに統一して入力するようにして下さい。

 

例えばアリセプトD錠3mgとアリセプトD錠3mgは別の医薬品と認識されてしまいますので、同一の医薬品が複数登録される可能性があります。

 

それでは今回はこれで終了となります。お疲れ様でした。次回は医薬品が重複して登録されないようにチェックするコードを書いていきます。

次の講座

スポンサーリンク

こちらの記事もおすすめです

関連記事

サイト内検索