Excelでラベル印刷

前のページで簡単な薬剤監査システムはできあがりました。Aで検索して中身Bを照合という形です。でもあれを業務に使うなら、入力方法も考えないといけないですし、ラベルの印刷もする必要があるとおもいます。

ということでまずは入力ですが、患者と薬剤については選択肢から選ぶと自動で患者番号やコードが入力されるようになってくれるとありがたいです。

患者番号を入力したら、患者氏名が自動表示される方が、同姓同名とかのことを考えるといいかもしれないですが。

今回は簡単になので、薬剤を選択すればコードが入力されるようにしておきます。同じ薬剤で、複数コードがとかありますが、そんなことを考えるなら、データベースソフト使いましょう。Excelで作りこむことはできますが、データベースソフト使った方が早いと思います。

まあ、ないと想定してやってるんですが。

使う関数はIfと、VLOOKUPだけです。

私の場合、ifとSumとVLOOKUPがあればExcelはなんとかなると思ってます。他知らないだけですけど。

VLOOKUPを使う場合、決まりもあるみたいなので注意しましょう。検索する列は一番左端で昇順にならんでないといけないとか、Excelのバージョンが新しくなってくると変わっている部分もありそうですが、新しいの持ってないので。

ではとりあえず、薬剤の一覧表を作っておきます。

同じシートに入力してますが、最近のExcelは別シートの値を入力時のリストとして使えるそうなので好きにしてください。

あとはこれをデータの入力規則に指定してあげれば

※日本語入力タブのところも設定しておくといいかもしれないですね。

入力リストのできあがりです。

でもこのままでは薬剤を選ぶだけで、コードは自動表示されません。そこで使うのがVLOOKUPです。

=VLOOKUP(D2,L$2:M$4,2,0)

式は絶対参照にしてます。「$」つけとかないとコピーするときに面倒なので。最後の「0」は完全一致の0です。

さらに、

空白だとエラーになるので

=IF(D2="","",VLOOKUP(D2,L$2:M$4,2,0))

みたいに、If文にして消してます。

入力はこんなもんで。

次は印刷画面です。別のシートに印刷画面をつくります。

患者ID部分に値を入力すると(入力画面と合わせましょう。数値なら数値、文字列なら文字列)それぞれの部分がVLOOKUPで表示されるようになっています。

バーコード部分は

=IF(A2="","","*"&A2&"*")

として、フォントをバーコードに。

あとはそれぞれ

=VLOOKUP($A$2,Sheet1!$A$2:$E$51,3,FALSE)

=VLOOKUP($A$2,Sheet1!$A$2:$E$51,4,FALSE)

=VLOOKUP($A$2,Sheet1!$A$2:$E$51,5,FALSE)

として、Sheet1の対応する部分を表示させただけです。

ではSheet1に戻りまして、印刷ボタンを作りましょう。

照合ボタン同様にコードの編集を表示させ、

こんなのでいいそうです。

まず

Dim i As Integer

Dim LastRow As Integer

で、変数を2つ宣言しています。

Integerとかなってますけど、面倒ならすべてVariant にしとけばいいと思います。

次に印刷の確認にif文つかってます。

If MsgBox("印刷を開始します。", vbOKCancel, "よろしいですか?") = vbOK Then

End If

メッセージボックスの「OK」とか、「いいえ」みたいに、選んだ答えを利用する場合は()が必要です。

あとは

Worksheets("ラベル").Selectでシートをラベル印刷用のシートに切り替えて、

With Worksheets("Sheet1")

        LastRow = .Range("A65536").End(xlUp).Row 

        For i = 2 To LastRow 

            Range("A2").Value = .Range("A" & i).Value

            ActiveSheet.PrintOut  

        Next

    End With

これ貼り付けてください。Sheet名やセルの名前は自分のに合わせるように。

LastRow = .Range("A65536").End(xlUp).Row で最終行を調べてます。65536ってのはExcel2003の最終行ですが、バージョンのよって違いますし、ラベルがそれ以上ありませんって数値ならなんでもいいです。そもそも変数がIntegerってなってるんだから、3万ちょっと以上ラベルがあったらエラー起こすと思います。

式としては、65536行目から上に向かって調べて、何か入力してある最終行を見つけろってことです。

For

Next

は繰り返し処理になります。

表はA2、つまり2行目からデータが入力してありますので、2行目から最終行まで繰り返せという文です。

あとはRange("A2").Value = .Range("A" & i).Valueで、ラベル印刷用シートのA2に、Sheet1のAのi行目、つまり患者IDを1つずつ入力していけばラベルができあがりますから

ActiveSheet.PrintOut 

で1枚ずつ印刷されます。

そう。1枚ずつ。

これをレシート発行するおもちゃみたいなプリンターで印刷してあげると、いい感じで印刷されるのですが、印刷用紙サイズがA4とかだと、紙が無駄になるだけですので注意してください。

A4の紙に上から詰めて・・・みたいにしたければ、調べれば方法は出てくると思いますのでがんばってください。

サーマルプリンターの安い製品だと5000円前後でありますから、こんな用途に使いたいなら1台あってもいいのでは?と思います。紙代かかるけど、インク代かかりませんし。1枚ずつ切ってくれるものもありますから、注射のラベルに使ってるところも多いのではないでしょうか。

ただしExcelって通常だと、印刷にはデフォルトに指定しているプリンターが選ばれると思います。出力プリンターにラベルプリンターを指定しても、一度ファイルを閉じるともとに戻ってしまいます。そんなときは

Application.ActivePrinter = "プリンター名:" 

で出力プリンターを指定することができるようです。詳しく説明してくれているところがありましたので検索してみてください。

マクロでプリンターを選択する作業をし、出来上がったマクロから、プリンター名をコピーするというやり方でした。

これをもう少し大掛かりなものにすると、運用次第で注射のラベル印刷と監査システムができそうな気がしてきますが、Excelであるがゆえの問題も出てきますので、データベースソフトの導入も検討した方がいい気がします。

注射ラベルと簡易監査ということで作ってみましたが、患者IDをバーコード化して印刷するだけで、用途が広がるところもあるかもしれませんね。