VBA:いくらでもある事務改善パート2(5)

ミール

2013年04月19日 09:12

前回からの続きで
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善についてです。

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

テストをしてみましょう。

花子さんをダブルクリックします。



結果(実績報告書)



全体を載せていませんが、うまく編集されています。

これで、今回の処理の重要な部分が出来ました。

後は、細かい部分を付け加えて実際に使えるように作っていきます。

では