今回は鑑別報告書作成画面の登録ボタンを押すと、frmDSearchで選択した医薬品情報をワークシートに転記する、というコードを書いていきます。

 

それではいきましょう。

スポンサーリンク

ユーザーフォーム上のテキストボックスの値をワークシートに転記

vba5-9-1上の画像を見て下さい。この状態で登録ボタンを押すと、印刷シートの医薬品No1の部分に入力した情報が転記されるというコードを書きましょう。

 

まず重要なのは、どのタブが選択されているか、ということです。

 

Tab1(No1)なら印刷シートのNo1の場所に転記され、Tab2(No2)ならNo2の場所に転記されなければなりません。

 

ちなみにどのタブストリップを選択しているかについては、タブストリップ自身が情報を持っています。

 

タブの1個目は0、2個目は1…10個目は9となります。

 

コンボボックスでもお話しましたが、VBAでは先頭を0とするのでしたね。タブストリップも同様です。

 

vba5-9-2それでは登録ボタンをダブルクリック。または右クリックからコードの表示。

 

vba5-9-3タブNo1が選択されている時のコードを書いてみました。

 

テキストボックスに入っている値を該当するセルに転記するというものです。

 

ただですね…これをTabStrip.Value = 1の場合、2の場合なんてやってられませんよね。ものすごいことになりますよ。

 

ここも楽な方法を考えましょう。

 

書き方は色々ありますが、わかりやすさとある程度コードを短くする事を考慮します。

 

vba5-9-3もう一度この画像を見て下さい。セルの行番号に注目です。

 

まず7、8、9、10、11と5つの数字がある事、そしてそれらの差は1である事に注目します。

 

更に、この画像は医薬品No1の情報が転記される場所であり、No2ならば6個下の行、No3ならば12個下の行になります。これはVBA講座5-7でもやりましたね。

 

そしてなるべく同じようなコードは書きたくない。

スポンサーリンク

どのタブストップの場合でも対応可能なコードを書く

変数を使ってこのようにまとめてみました。みなさん理解できますでしょうか?

Dim i As Integer, j As Integer, k As Integer, _
l As Integer, m As Integer, n As Integeri = TabStrip.ValueIf i = 0 Then
j = 7
End Ifk = j + 1
l = k + 1
m = l + 1
n = m + 1With Worksheets(“印刷シート”).Range(“B” & k) = txtKubun.Text
.Range(“C” & k) = txtKigou.Text
.Range(“E” & j) = txtDname.Text
.Range(“E” & k) = txtGname.Text
.Range(“E” & m) = txtEffect.Text
.Range(“F” & k) = cboYouhou.Value
.Range(“G” & k) = txtKishou.Text
.Range(“H” & k) = txtAsa.Text
.Range(“I” & k) = txtHiru.Text
.Range(“J” & k) = txtYuu.Text
.Range(“k” & k) = txtVds.Text
.Range(“L” & k) = txtTani.Text
.Range(“M” & k) = txtNokori.Text
.Range(“G” & m) = txtBikou.Text
.Range(“N” & k) = txtSei1.Text
.Range(“N” & l) = txtSei2.Text
.Range(“N” & m) = txtSei3.Text
.Range(“N” & n) = txtSei4.Text
.Range(“R” & k) = txtKou1.Text
.Range(“R” & l) = txtKou2.Text
.Range(“R” & m) = txtKou3.Text
.Range(“R” & n) = txtKou4.Text

End With

1つずつ解説していきましょう。

 

Dim i As Integer, j As Integer, k As Integer, l As Integer, m As Integer, n As Integer

「変数i、j、k、l、m、nを数字と宣言する」

 

i = TabStrip.Value

「変数iにタブストリップの値を入れる。」タブ1が選択されていれば変数iは0、タブ2なら1となります。

 

If i = 0 Then
j = 7
End If

「もし変数iが0ならば(No1のタブが選択されていれば)変数jに7を入れる。」

 

なぜ7を入れるかは下を見て下さい。

 

k = j + 1
l = k + 1
m = l + 1
n = m + 1

項目毎に列は決まっています。違うのは行番号だけですね。先ほど7~11の数字に注目と言いました。

 

だから7が決まれば後は1を足していくだけですよね。つまりjが7ならkは8、kが8ならlは9、lが9ならmは10、mが10ならnは11と自動的に決まります。

 

j=7、k=8、l=9、m=10、n=11を入れると…最初に書いたコードと同じになっているのを確認して下さい。

 

行を変数にすることで、コードを使いまわす事ができます。あとはちょっと工夫してあげればOKです。

If~Then…ElseIf ステートメント

医薬品No1を選択している時は下記のように書きましたね。

If i = 0 Then
j = 7
End If

医薬品No2の転記する場所はその6個下にある。つまり…

If i = 1 Then
j = 13
End If

と書くことができます。

 

ですがこれを「i=2の場合~i=9の場合」まで書くのはちょっと長くなりますよね。

 

そこで以下のように書いたらどうでしょうか。

 

vba5-9-6If~thenステートメントについては何回も使用していますが、今回は複数の条件と処理を一つにまとめて書いています。

 

If 条件1 then
処理1
End If
If 条件2 then
処理2
End If

これをまとめると…

 

If 条件1 then
処理1
ElseIf 条件2 then
処理2
End If

こうなります。

 

これで選択されたタブの該当するセルに医薬品情報が転記されるようになります。

 

実際に起動し各タブに医薬品を検索して登録した後、一度システムを終了して印刷シートを見て下さい。きちんと医薬品が登録されましたね。

 

それでは今回は以上で終了となります。お疲れ様でした。

 

次回はシートに転記した医薬品情報を削除するコードについてお話します。

>>Excel VBA講座 目次はこちら