床上手
2013年4月から半年間、医局のベッド係になりました。病棟を持たず、外来と、ベッドコントロール専従です。大きな組織ならではの仕事です。
週一回、医局員全員に患者氏名の入ったベッド表を配布しているのですが、個人情報保護の観点から、持ち主がわかるように医局員の名前が入った判子をそれぞれ押していました。なんと数十人分の判子を押すのがベッド係の仕事の一つ。前任者が「医師の仕事に非ず」として、医局秘書の仕事にしました。しかし、その話を聞いた時、仕事を押し付けた感があって、何とかしたいと思っていました。
そこで、ベッド表をプリントするときに、自動で各医局員の名前が印刷されるようにプログラムを書くことにしました。医局員の名前を変数にして、セルに埋め込めれば良いわけです。知り合いに相談したら、エクセルでマクロ+ Visual Basicが良いのではないかとのことでした。さっそく Visual Basicをダウンロードし、インストール。
まず、エクセルでベッド表を立ち上げ、「マクロの記録」をクリックし、そのままプリント動作を行い、マクロの記録を終了します。そして “Macro1” という名前でマクロを登録します。マクロの編集を行うようにすると、Visual Basicのプログラミング画面が立ち上がります。
プログラムは下記 (先ほどの “マクロの記録” で出来たプログラムに上書きすれば大丈夫)。
Sub Macro1()
Dim LastRow As Long
Dim i As Long
Dim myNo As StringWith Worksheets(“printmember”)
LastRow = .Cells(Application.Rows.Count, “A”).End(xlUp).Row
For i = 2 To LastRow
myNo = .Range(“A” & i).Value
With Worksheets(“print”)
.Range(“O3”).Value = myNo
.PrintOut Copies:=1, Collate:=True
End WithNext i
End With
End Sub
エクセル側でやることは次のとおりです。
①「名前をつけて保存」を選択、必要なデータを「マクロ有効ブック (*.xlsm)」形式で保存。
②基本設定で「開発タブ」をリボンに追加。「挿入」→「ボタン」で、必要な位置にボタンを設置。ボタンを押すと「Macro1」が実行されるように設定。ボタンには「医局員配布用プリント」と記しておく。
③医局員の名前を「printmember」というシートのセルA列に列挙 (A1にはタイトルを入れて、データは A2以下)。もし B列にしたいときは、上記プログラムの “A” を “B” に変更。
④配布用資料を「print」というシートに保存。医局員名簿がセル “O3” に印刷されるようにレイアウトを調整する。プログラムの “O3” を書き換えれば、別のセルに表示させることも可能。
⑤実行のため、必要に応じてセキュリティレベルを変更。
勉強したサイトでは、変数が数字になっていたのでプログラム 4行目「As String」が「As Long」になっていました。それを真似したためプログラムが動かず 1時間近く試行錯誤しました。しかし、デバックしたときに ”実行時エラー13” と表示されて,セルからデータがきちんと読み込めていないことがわかり,「セルの内容が文字列だから As Longでは読み込めないのだ」と判明してからは一瞬で解決でした.今回は医局員の名前が変数なので “As String” ですが、数字にしたいときはそれを “As Long” に書き換えればよいということです。
プログラムは、大学 2年生のときに HTMLを覚えて以来でしたが、数行の簡単なプログラムでも、動いた時の感動はたまらないですね。やみつきになりそうです。
それとともに、普段から、こんな難解な言語を書いているプログラマの皆様を尊敬します。
(参考)
呼吸器内科にはToko-Johns分類というのがあってですね・・・・・・。
Hugh-Johnsね。Toko-Johnsでググったら、さる方のツイッターアカウントが引っかかってきましたぞ。