前回からの続きで
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善についてです。
3日の仕事を10分、いや5分で片づけようというものです。
今日は、利用日の編集プログラムを作ります。
こんなイメージですね。
実績データも、実績報告書も日付が1日~31日迄の横並びとなっていて処理しやす形式になっています。
こんな時便利な命令が、「繰り返し」と「Offset命令」です。
Offset命令とは、基準のセル(アクティブセル)から数えて何個移動しなさいという
事なので、この処理にぴったり当てはまります。
命令の細かい説明は省きますが、行と列の指定は
Offset(行方向,列方向)
となります。
それでは、考えてみましょう。
テストなので、氏名のセルと利用日のセルのみを編集する事にしましょう。
氏名の編集は、Worksheets("実績報告書").Range("e8") = 対象者 となります。
次が、今回のプログラムの大きなポイントでしょう。
こんな感じでしょうか。
For cnt = 1 To 31
If obj.Offset(0, cnt) = "" Then
Else
Worksheets("実績報告書").Range("l12").Offset(0, cnt) = 1
End If
Next cnt
objはオブジェクト変数で、実績データを指しています。
実績データも実績報告書も日付が31日分繰り返せばいいので、
簡単にできました。
全体のプログラムです。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim obj As Object
r = Target.Row
対象者 = Sheets("対象者名簿").Range("d" & r)
Set obj = Workbooks("実績.xlsx").Worksheets("実績データ").Cells.Find(対象者)
If obj Is Nothing Then
MsgBox 対象者 & " 実績がありません"
Sheets("対象者名簿").Select
Else
Worksheets("実績報告書").Range("e8") = 対象者
For cnt = 1 To 31
If obj.Offset(0, cnt) = "" Then
Else
Worksheets("実績報告書").Range("l12").Offset(0, cnt) = 1 '実績報告書の利用日を編集
End If
Next cnt
Worksheets("実績報告書").Select
End If
End Sub
テストをしてみましょう。
花子さんをダブルクリックします。
結果(実績報告書)
全体を載せていませんが、うまく編集されています。
これで、今回の処理の重要な部分が出来ました。
後は、細かい部分を付け加えて実際に使えるように作っていきます。
では