
2013年04月04日
VBA:いくらでもあるVBAでの事務効率化!
今日は、ある事業所の出勤簿の改善例を書きたいと思います。
勤務予定表の記号を、個人ごとの出勤簿の勤務予定欄へ編集するというものです。
つまり、横並びデータを縦並びに処理していきます。
その記号があるだけで、給与計算時のチェックが早く正確にできるとの事。
VBAが得意とする処理ですね。
ということで考えてみました。

考え方は簡単ですね。
勤務予定表のセル(列)を横に一つずつ移動させ、同時に出勤簿は行を下へ一つずつ移動させる繰り返しの、仕組みを作ればいいわけです。
通常、行だけを繰り返し処理するときは、
For 行 = 1 TO 10
Worksheets("出勤簿").Range("l” & 行 )
Next
と書いてできますが、今回は列も移動させますので、cell形式で記述します。
単純に編集の部分だけ記述すると、
For x = 1 To 4
For j = 1 To 31
Worksheets("出勤簿") .Cells(j + 9, 12) = Worksheets("勤務表").Cells(x + 6, j + 3)
Next j
Next x
4人のデータだと限定して、全体のプログラムはこんな感じで作ってみました。
Sub シート編集()
Sheets("出勤簿").Select
With Worksheets("出勤簿")
.Range("H3") = ""
.Range("J3") = ""
.Range("d5") = ""
.Range("d6") = ""
.Range("d7") = ""
.Range("L10:L40") = ""
.Range("l41:L42") = ""
.Range("H3") = Worksheets("勤務表").Range("i2")
.Range("J3") = Worksheets("勤務表").Range("k2")
.Range("d6") = Worksheets("勤務表").Range("b6")
For x = 1 To 4
.Range("d5") = Worksheets("勤務表").Range("c" & x + 6) '名前の編集
For j = 1 To 31
.Cells(j + 9, 12) = Worksheets("勤務表").Cells(x + 6, j + 3) '勤務予定の編集
Next j
n = .Range("d5")
MsgBox (n & "の印刷をします")
Next x
End With
End Sub
この様な単純作業はプロでは応えてくれません。
自分で技術を身につけ、時間を有効に使いましょう。
新入社員を迎える季節になりました。
この時期になると、自分が入社した頃を思い出します。
かれこれ25年も前の事になりますが、今でも記憶残っている社長の言葉があります。
「やりたいこと、やりべきことを書き出して、優先順位をつけて仕事を進める事」
仕事をする上で当たり前の言葉ですが、当時は目の前の仕事に追われ、
書いて整理する気持の余裕もなく、失敗してよく怒られたような記憶があります。
その言葉がきっかけとなり、メモをとる習慣ができ優先順位を意識して仕事を
進めるようになり、段取りよく仕事をこなす事が身についてきたように思います。
今思うと、ビジネス書など読むとどこにでも書いてある言葉だと思うのですが、
活字だけではここまで記憶に残らなかっただろうし、新入社員という緊張感
あふれる時期だったからこそ、25年たった今でもあの光景が鮮明に浮かび、
あの一言が今でも仕事に活かされてると思います。
この3日間、同じ言葉を新入社員に語っていますが果たして25年後に
重みをもった言葉として残っているのだろうか。・・・それは、ないか
勤務予定表の記号を、個人ごとの出勤簿の勤務予定欄へ編集するというものです。
つまり、横並びデータを縦並びに処理していきます。
その記号があるだけで、給与計算時のチェックが早く正確にできるとの事。
VBAが得意とする処理ですね。
ということで考えてみました。

考え方は簡単ですね。
勤務予定表のセル(列)を横に一つずつ移動させ、同時に出勤簿は行を下へ一つずつ移動させる繰り返しの、仕組みを作ればいいわけです。
通常、行だけを繰り返し処理するときは、
For 行 = 1 TO 10
Worksheets("出勤簿").Range("l” & 行 )
Next
と書いてできますが、今回は列も移動させますので、cell形式で記述します。
単純に編集の部分だけ記述すると、
For x = 1 To 4
For j = 1 To 31
Worksheets("出勤簿") .Cells(j + 9, 12) = Worksheets("勤務表").Cells(x + 6, j + 3)
Next j
Next x
4人のデータだと限定して、全体のプログラムはこんな感じで作ってみました。
Sub シート編集()
Sheets("出勤簿").Select
With Worksheets("出勤簿")
.Range("H3") = ""
.Range("J3") = ""
.Range("d5") = ""
.Range("d6") = ""
.Range("d7") = ""
.Range("L10:L40") = ""
.Range("l41:L42") = ""
.Range("H3") = Worksheets("勤務表").Range("i2")
.Range("J3") = Worksheets("勤務表").Range("k2")
.Range("d6") = Worksheets("勤務表").Range("b6")
For x = 1 To 4
.Range("d5") = Worksheets("勤務表").Range("c" & x + 6) '名前の編集
For j = 1 To 31
.Cells(j + 9, 12) = Worksheets("勤務表").Cells(x + 6, j + 3) '勤務予定の編集
Next j
n = .Range("d5")
MsgBox (n & "の印刷をします")
Next x
End With
End Sub
この様な単純作業はプロでは応えてくれません。
自分で技術を身につけ、時間を有効に使いましょう。

新入社員を迎える季節になりました。
この時期になると、自分が入社した頃を思い出します。
かれこれ25年も前の事になりますが、今でも記憶残っている社長の言葉があります。
「やりたいこと、やりべきことを書き出して、優先順位をつけて仕事を進める事」
仕事をする上で当たり前の言葉ですが、当時は目の前の仕事に追われ、
書いて整理する気持の余裕もなく、失敗してよく怒られたような記憶があります。
その言葉がきっかけとなり、メモをとる習慣ができ優先順位を意識して仕事を
進めるようになり、段取りよく仕事をこなす事が身についてきたように思います。
今思うと、ビジネス書など読むとどこにでも書いてある言葉だと思うのですが、
活字だけではここまで記憶に残らなかっただろうし、新入社員という緊張感
あふれる時期だったからこそ、25年たった今でもあの光景が鮮明に浮かび、
あの一言が今でも仕事に活かされてると思います。
この3日間、同じ言葉を新入社員に語っていますが果たして25年後に
重みをもった言葉として残っているのだろうか。・・・それは、ないか

Posted by ミール at 18:56│Comments(0)