2015年06月04日
少しの知識で大きな効果
エクセルマクロを習得すると業務の効率化だけでなく
経費の節約にも大いに効果を発揮します。
現在使っている業務ソフトの簡単な帳票カスタマイズを業者に依頼したところ
6万円の見積もりが提示されました。
ホントに単純なので、多く見積もっても1万円以内で収まるだろうと思っていましたが
想像以上に高いので一旦保留し、エクセルマクロで作れないものか検討してみました。
すると、以外にも30行程のプログラムで作る事ができました。
ということは、1行2000円のマクロということになります。
ほしい情報は↓これだけです。
この帳票は事務担当が紙に記録された値を、エクセルで個人毎のブックを作り、血圧、脈を毎日
入力し月末に関数で最大値や最小値などを求めていました。
しかし、この情報は業務ソフトでも入力しているので、2度手間の作業をやっているわけです。
業務ソフトのデータがあるのなら、そこから必要な情報を印刷したほうが、早いしミスもなくなります。という訳で、業者へお願いしようと思ったわけですが、ちょっと高すぎました。
エクセルマクロで作るうえで、最初に考える事は、
業務ソフトのデータを外部にアウトプットできないかということです。
これが、あるかないかで作業効率が数倍変わってきます。
今回の業務ソフトの機能を調べてみると、うれしい事に、ほしいデータをEXCEL形式で書き出す機能がついていました。
後は仕組み作りです。
今回は、対象者が少ないので、あらかじめ集計表に対象者の
氏名を入力しておき、その氏名を元にデータを順次オートフィルターでデータを絞り込み
SUBTOTAL関数で、最大値、最小値、平均などを求め、集計表に編集する方法で作りました。
もちろん他にも、いろいろな方法はありますが今回は、対象者の件数が少いためシンプルかな
と思い、このような仕組みにしました。
この様なマクロプログラムになりました。
Sub バイタル集計()
Application.ScreenUpdating = False
line1 = 6
Sheets("バイタル集計").Select
Range("c6:h30") = ""
Do Until Worksheets("バイタル集計").Range("b" & line1) = ""
Name = Worksheets("バイタル集計").Range("b" & line1)
Sheets("バイタルデータ").Select
Range("A1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$AH$1000").AutoFilter Field:=1, Criteria1:=Name
cnt = WorksheetFunction.Subtotal(2, Range("i:i"))
If cnt > 0 Then
Worksheets("バイタル集計").Range("c" & line1) = WorksheetFunction.Subtotal(4, Range("i:i"))
Worksheets("バイタル集計").Range("d" & line1) = WorksheetFunction.Subtotal(5, Range("j:j"))
Worksheets("バイタル集計").Range("e" & line1) = WorksheetFunction.Subtotal(1, Range("i:i"))
Worksheets("バイタル集計").Range("f" & line1) = WorksheetFunction.Subtotal(1, Range("j:j"))
Worksheets("バイタル集計").Range("g" & line1) = WorksheetFunction.Subtotal(1, Range("h:h"))
Worksheets("バイタル集計").Range("h" & line1) = WorksheetFunction.Subtotal(4, Range("ah:ah"))
End If
line1 = line1 + 1
Selection.AutoFilter
Loop
Sheets("バイタル集計").Select
Application.ScreenUpdating = True
End Sub
Sub 集計エリアクリア()
Sheets("バイタル集計").Select
Range("c6:h30") = ""
End Sub
集計ボタンを付けて、実行してみると見事集計できました。
今までの作業時間を考えると
1日10分×25日=250分/60≒4時間
月4時間もかかっていた事になります。
それがマクロになると、業務ソフトのデータアウトプットを含め、
5分以内で済むようになりました。
なにより1回の作業で結果が得られるという大きなメリットがあります。
時短+経費節減+単純事務の繰り返し作業によるストレスからの解放と
いいことづくめのエクセルマクロ、勉強しないという選択はないですよね。
経費の節約にも大いに効果を発揮します。
現在使っている業務ソフトの簡単な帳票カスタマイズを業者に依頼したところ
6万円の見積もりが提示されました。
ホントに単純なので、多く見積もっても1万円以内で収まるだろうと思っていましたが
想像以上に高いので一旦保留し、エクセルマクロで作れないものか検討してみました。
すると、以外にも30行程のプログラムで作る事ができました。
ということは、1行2000円のマクロということになります。
ほしい情報は↓これだけです。
この帳票は事務担当が紙に記録された値を、エクセルで個人毎のブックを作り、血圧、脈を毎日
入力し月末に関数で最大値や最小値などを求めていました。
しかし、この情報は業務ソフトでも入力しているので、2度手間の作業をやっているわけです。
業務ソフトのデータがあるのなら、そこから必要な情報を印刷したほうが、早いしミスもなくなります。という訳で、業者へお願いしようと思ったわけですが、ちょっと高すぎました。
エクセルマクロで作るうえで、最初に考える事は、
業務ソフトのデータを外部にアウトプットできないかということです。
これが、あるかないかで作業効率が数倍変わってきます。
今回の業務ソフトの機能を調べてみると、うれしい事に、ほしいデータをEXCEL形式で書き出す機能がついていました。
後は仕組み作りです。
今回は、対象者が少ないので、あらかじめ集計表に対象者の
氏名を入力しておき、その氏名を元にデータを順次オートフィルターでデータを絞り込み
SUBTOTAL関数で、最大値、最小値、平均などを求め、集計表に編集する方法で作りました。
もちろん他にも、いろいろな方法はありますが今回は、対象者の件数が少いためシンプルかな
と思い、このような仕組みにしました。
この様なマクロプログラムになりました。
Sub バイタル集計()
Application.ScreenUpdating = False
line1 = 6
Sheets("バイタル集計").Select
Range("c6:h30") = ""
Do Until Worksheets("バイタル集計").Range("b" & line1) = ""
Name = Worksheets("バイタル集計").Range("b" & line1)
Sheets("バイタルデータ").Select
Range("A1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$AH$1000").AutoFilter Field:=1, Criteria1:=Name
cnt = WorksheetFunction.Subtotal(2, Range("i:i"))
If cnt > 0 Then
Worksheets("バイタル集計").Range("c" & line1) = WorksheetFunction.Subtotal(4, Range("i:i"))
Worksheets("バイタル集計").Range("d" & line1) = WorksheetFunction.Subtotal(5, Range("j:j"))
Worksheets("バイタル集計").Range("e" & line1) = WorksheetFunction.Subtotal(1, Range("i:i"))
Worksheets("バイタル集計").Range("f" & line1) = WorksheetFunction.Subtotal(1, Range("j:j"))
Worksheets("バイタル集計").Range("g" & line1) = WorksheetFunction.Subtotal(1, Range("h:h"))
Worksheets("バイタル集計").Range("h" & line1) = WorksheetFunction.Subtotal(4, Range("ah:ah"))
End If
line1 = line1 + 1
Selection.AutoFilter
Loop
Sheets("バイタル集計").Select
Application.ScreenUpdating = True
End Sub
Sub 集計エリアクリア()
Sheets("バイタル集計").Select
Range("c6:h30") = ""
End Sub
集計ボタンを付けて、実行してみると見事集計できました。
今までの作業時間を考えると
1日10分×25日=250分/60≒4時間
月4時間もかかっていた事になります。
それがマクロになると、業務ソフトのデータアウトプットを含め、
5分以内で済むようになりました。
なにより1回の作業で結果が得られるという大きなメリットがあります。
時短+経費節減+単純事務の繰り返し作業によるストレスからの解放と
いいことづくめのエクセルマクロ、勉強しないという選択はないですよね。
Posted by ミール at
14:25
│Comments(0)
2015年02月06日
オートフィルターで可視セルを扱う・・・もうひとつの方法
可視セルを対象とした繰り返し処理は次のようにも記述できます。
For Each c In Worksheets("個人データ").Columns(1).SpecialCells(xlCellTypeVisible)
↓
For Each c In Worksheets("個人データ").Range("A1").CurrentRegion.Columns(1).SpecialCells(xlCellTypeVisible)
この記述に変えると何が違うかというと、前回ポイントにあげた
下の記述がいらなくなります。
If c = "" Then
Exit For
End If
つまり可視セルで表示されたデータの入っているセルのみ対象とできます。
For Each c In Worksheets("個人データ").Range("A1").CurrentRegion.Columns(1).SpecialCells(xlCellTypeVisible)
If c.Row > 1 Then
Sheets("家族構成").Range("g5") = Sheets("個人データ").Range("f" & c.Row)
Sheets("家族構成").Range("o5") = Sheets("個人データ").Range("g" & c.Row)
Sheets("家族構成").Range("g6") = Sheets("個人データ").Range("h" & c.Row)
Sheets("家族構成").Range("j6") = Sheets("個人データ").Range("i" & c.Row)
Sheets("家族構成").Range("n6") = Sheets("個人データ").Range("j" & c.Row)
Sheets("家族構成").Range("e" & r) = Sheets("個人データ").Range("d" & c.Row)
Sheets("家族構成").Range("g" & r) = Sheets("個人データ").Range("a" & c.Row)
Sheets("家族構成").Range("k" & r) = Sheets("個人データ").Range("b" & c.Row)
If Sheets("個人データ").Range("b" & c.Row) <> "" Then
生年月日 = Sheets("個人データ").Range("b" & c.Row)
本日年月日 = Date
年齢 = DateDiff("yyyy", 生年月日, 本日年月日) _
+ (Format(生年月日, "mmdd") > Format(本日年月日, "mmdd"))
End If
Sheets("家族構成").Range("q" & r) = 年齢
Sheets("家族構成").Range("s" & r) = Sheets("個人データ").Range("c" & c.Row)
Sheets("家族構成").Range("u" & r) = Sheets("個人データ").Range("k" & c.Row)
r = r + 1
End If
Next c
奥が深いですが、自分で使うマクロですから、
自分がわかりやすい方法を選択していいのではないでしょうか。
For Each c In Worksheets("個人データ").Columns(1).SpecialCells(xlCellTypeVisible)
↓
For Each c In Worksheets("個人データ").Range("A1").CurrentRegion.Columns(1).SpecialCells(xlCellTypeVisible)
この記述に変えると何が違うかというと、前回ポイントにあげた
下の記述がいらなくなります。
If c = "" Then
Exit For
End If
つまり可視セルで表示されたデータの入っているセルのみ対象とできます。
For Each c In Worksheets("個人データ").Range("A1").CurrentRegion.Columns(1).SpecialCells(xlCellTypeVisible)
If c.Row > 1 Then
Sheets("家族構成").Range("g5") = Sheets("個人データ").Range("f" & c.Row)
Sheets("家族構成").Range("o5") = Sheets("個人データ").Range("g" & c.Row)
Sheets("家族構成").Range("g6") = Sheets("個人データ").Range("h" & c.Row)
Sheets("家族構成").Range("j6") = Sheets("個人データ").Range("i" & c.Row)
Sheets("家族構成").Range("n6") = Sheets("個人データ").Range("j" & c.Row)
Sheets("家族構成").Range("e" & r) = Sheets("個人データ").Range("d" & c.Row)
Sheets("家族構成").Range("g" & r) = Sheets("個人データ").Range("a" & c.Row)
Sheets("家族構成").Range("k" & r) = Sheets("個人データ").Range("b" & c.Row)
If Sheets("個人データ").Range("b" & c.Row) <> "" Then
生年月日 = Sheets("個人データ").Range("b" & c.Row)
本日年月日 = Date
年齢 = DateDiff("yyyy", 生年月日, 本日年月日) _
+ (Format(生年月日, "mmdd") > Format(本日年月日, "mmdd"))
End If
Sheets("家族構成").Range("q" & r) = 年齢
Sheets("家族構成").Range("s" & r) = Sheets("個人データ").Range("c" & c.Row)
Sheets("家族構成").Range("u" & r) = Sheets("個人データ").Range("k" & c.Row)
r = r + 1
End If
Next c
奥が深いですが、自分で使うマクロですから、
自分がわかりやすい方法を選択していいのではないでしょうか。
2015年01月30日
オートフィルターで可視セルを扱う(説明)
前回のコードの説明です。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
・・・ダブルクリックした時に発生するイベントの記述です。
Application.ScreenUpdating = False
・・・画面更新をOFFにする。
Dim c As Range
Sheets("家族構成").Range("g5") = ""
Sheets("家族構成").Range("o5") = ""
Sheets("家族構成").Range("g6") = ""
Sheets("家族構成").Range("j5") = ""
Sheets("家族構成").Range("n6") = ""
Sheets("家族構成").Range("e9:y20") = ""
・・・家族構成画面の編集項目をクリア
x = Target.Row
・・・個人データの何行目でダブルクリックされたか行数を取得する。
世帯主 = Sheets("個人データ").Range("e" & x)
現住所1 = Sheets("個人データ").Range("f" & x)
現住所2 = Sheets("個人データ").Range("g" & x)
・・・抽出キーになる項目(世帯主、住所)を変数に代入する。
Range("A1").Select
・・・オートフィルターを設定する行を選択。(1行目とする為、セルA1を選択)
Selection.AutoFilter
・・・オートフィルターモードにする
Range("A1").AutoFilter Field:=5, Criteria1:=世帯主
Range("A1").AutoFilter Field:=6, Criteria1:=現住所1
Range("A1").AutoFilter Field:=7, Criteria1:=現住所2
・・・オートフィルターの実行
r = 9
・・・家族構成画面の家族構成を編集する最初の行を変数に設定する。
For Each c In Worksheets("個人データ").Columns(1).SpecialCells(xlCellTypeVisible)
・・・
If c = "" Then
Exit For
End If
・・・ cは個人データの1列(A列):氏名を参照している。
氏名のセルが空白になった時点で繰り返し処理を抜ける。
※可視セルといっても、データが入力されているセルだけではない
データが入力されていなくても、空白セルは表示されているので
この処理を入れないと、最終行迄処理してしまう。
重要です。
If c.Row > 1 Then
・・・1行目はタイトル行なので、読み飛ばす
C.Rowは、可視セルの行番号が取得できる
Sheets("家族構成").Range("g5") = Sheets("個人データ").Range("f" & c.Row)
Sheets("家族構成").Range("o5") = Sheets("個人データ").Range("g" & c.Row)
Sheets("家族構成").Range("g6") = Sheets("個人データ").Range("h" & c.Row)
Sheets("家族構成").Range("j6") = Sheets("個人データ").Range("i" & c.Row)
Sheets("家族構成").Range("n6") = Sheets("個人データ").Range("j" & c.Row)
Sheets("家族構成").Range("e" & r) = Sheets("個人データ").Range("d" & c.Row)
Sheets("家族構成").Range("g" & r) = Sheets("個人データ").Range("a" & c.Row)
Sheets("家族構成").Range("k" & r) = Sheets("個人データ").Range("b" & c.Row)
If Sheets("個人データ").Range("b" & c.Row) <> "" Then
生年月日 = Sheets("個人データ").Range("b" & c.Row)
本日年月日 = Date
年齢 = DateDiff("yyyy", 生年月日, 本日年月日) _
+ (Format(生年月日, "mmdd") > Format(本日年月日, "mmdd"))
End If
Sheets("家族構成").Range("q" & r) = 年齢
Sheets("家族構成").Range("s" & r) = Sheets("個人データ").Range("c" & c.Row)
Sheets("家族構成").Range("u" & r) = Sheets("個人データ").Range("k" & c.Row)
r = r + 1
End If
・・・家族構成画面の編集(個人データが表示されている分だけ繰り返す)
Next c
Selection.AutoFilter
・・・オートフィルターの解除
Sheets("家族構成").Select
・・・処理終了後、家族構成画面を表示させる
Application.ScreenUpdating = True
・・・画面更新をONにする
End Sub
・・・ 終了
簡単なシートを作って、マクロを入力してみると
理解できると思います。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
・・・ダブルクリックした時に発生するイベントの記述です。
Application.ScreenUpdating = False
・・・画面更新をOFFにする。
Dim c As Range
Sheets("家族構成").Range("g5") = ""
Sheets("家族構成").Range("o5") = ""
Sheets("家族構成").Range("g6") = ""
Sheets("家族構成").Range("j5") = ""
Sheets("家族構成").Range("n6") = ""
Sheets("家族構成").Range("e9:y20") = ""
・・・家族構成画面の編集項目をクリア
x = Target.Row
・・・個人データの何行目でダブルクリックされたか行数を取得する。
世帯主 = Sheets("個人データ").Range("e" & x)
現住所1 = Sheets("個人データ").Range("f" & x)
現住所2 = Sheets("個人データ").Range("g" & x)
・・・抽出キーになる項目(世帯主、住所)を変数に代入する。
Range("A1").Select
・・・オートフィルターを設定する行を選択。(1行目とする為、セルA1を選択)
Selection.AutoFilter
・・・オートフィルターモードにする
Range("A1").AutoFilter Field:=5, Criteria1:=世帯主
Range("A1").AutoFilter Field:=6, Criteria1:=現住所1
Range("A1").AutoFilter Field:=7, Criteria1:=現住所2
・・・オートフィルターの実行
r = 9
・・・家族構成画面の家族構成を編集する最初の行を変数に設定する。
For Each c In Worksheets("個人データ").Columns(1).SpecialCells(xlCellTypeVisible)
・・・
If c = "" Then
Exit For
End If
・・・ cは個人データの1列(A列):氏名を参照している。
氏名のセルが空白になった時点で繰り返し処理を抜ける。
※可視セルといっても、データが入力されているセルだけではない
データが入力されていなくても、空白セルは表示されているので
この処理を入れないと、最終行迄処理してしまう。
重要です。
If c.Row > 1 Then
・・・1行目はタイトル行なので、読み飛ばす
C.Rowは、可視セルの行番号が取得できる
Sheets("家族構成").Range("g5") = Sheets("個人データ").Range("f" & c.Row)
Sheets("家族構成").Range("o5") = Sheets("個人データ").Range("g" & c.Row)
Sheets("家族構成").Range("g6") = Sheets("個人データ").Range("h" & c.Row)
Sheets("家族構成").Range("j6") = Sheets("個人データ").Range("i" & c.Row)
Sheets("家族構成").Range("n6") = Sheets("個人データ").Range("j" & c.Row)
Sheets("家族構成").Range("e" & r) = Sheets("個人データ").Range("d" & c.Row)
Sheets("家族構成").Range("g" & r) = Sheets("個人データ").Range("a" & c.Row)
Sheets("家族構成").Range("k" & r) = Sheets("個人データ").Range("b" & c.Row)
If Sheets("個人データ").Range("b" & c.Row) <> "" Then
生年月日 = Sheets("個人データ").Range("b" & c.Row)
本日年月日 = Date
年齢 = DateDiff("yyyy", 生年月日, 本日年月日) _
+ (Format(生年月日, "mmdd") > Format(本日年月日, "mmdd"))
End If
Sheets("家族構成").Range("q" & r) = 年齢
Sheets("家族構成").Range("s" & r) = Sheets("個人データ").Range("c" & c.Row)
Sheets("家族構成").Range("u" & r) = Sheets("個人データ").Range("k" & c.Row)
r = r + 1
End If
・・・家族構成画面の編集(個人データが表示されている分だけ繰り返す)
Next c
Selection.AutoFilter
・・・オートフィルターの解除
Sheets("家族構成").Select
・・・処理終了後、家族構成画面を表示させる
Application.ScreenUpdating = True
・・・画面更新をONにする
End Sub
・・・ 終了
簡単なシートを作って、マクロを入力してみると
理解できると思います。
2015年01月28日
オートフイルターで可視セルを扱う
約10カ月ぶりの更新となります。
今年も、エクセルマクロ(VBA)講座を開催予定です。
お楽しみに!
久しぶりですが、最近質問が多い、
オートフイルターを使った条件抽出と、可視セルの扱い方に
ついて、書いてみたいと思います。
事例:
住所等が記録された個人データから、
「世帯主」と「住所」が一致するデータを抽出し、
家族構成として別画面に編集する処理を作っていきます。
(個人データ)
↓ 家族構成を編集する
(家族構成)
検索命令(Find)で条件に合うデータを絞り込んでいく方法もありますが
エクセルの便利な機能を使う事もプログラムのわかりやすさにつながります。
今回は、わかりやすくオートフィルターを使って作ってみます。
処理の動きとしては、
個人データのシートから対象者をダブルクリックすると、条件にあうデータを
抽出し、家族構成の画面へ編集する。
という動きにします。
ダブルクリックすると動く仕組みは、ワークシートイベントの
“セルがダブルクリックされた時に発生する”
BeforeDoubleClickイベントプロシジャーを使います。
下記コードを個人データのシートモジュールに入力します。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
Dim c As Range
Sheets("家族構成").Range("g5") = ""
Sheets("家族構成").Range("o5") = ""
Sheets("家族構成").Range("g6") = ""
Sheets("家族構成").Range("j5") = ""
Sheets("家族構成").Range("n6") = ""
Sheets("家族構成").Range("e9:y20") = ""
x = Target.Row
世帯主 = Sheets("個人データ").Range("e" & x)
現住所1 = Sheets("個人データ").Range("f" & x)
現住所2 = Sheets("個人データ").Range("g" & x)
Range("A1").Select
Selection.AutoFilter
Range("A1").AutoFilter Field:=5, Criteria1:=世帯主
Range("A1").AutoFilter Field:=6, Criteria1:=現住所1
Range("A1").AutoFilter Field:=7, Criteria1:=現住所2
r = 9
For Each c In Worksheets("個人データ").Columns(1).SpecialCells(xlCellTypeVisible)
If c = "" Then
Exit For
End If
If c.Row > 1 Then
Sheets("家族構成").Range("g5") = Sheets("個人データ").Range("f" & c.Row)
Sheets("家族構成").Range("o5") = Sheets("個人データ").Range("g" & c.Row)
Sheets("家族構成").Range("g6") = Sheets("個人データ").Range("h" & c.Row)
Sheets("家族構成").Range("j6") = Sheets("個人データ").Range("i" & c.Row)
Sheets("家族構成").Range("n6") = Sheets("個人データ").Range("j" & c.Row)
Sheets("家族構成").Range("e" & r) = Sheets("個人データ").Range("d" & c.Row)
Sheets("家族構成").Range("g" & r) = Sheets("個人データ").Range("a" & c.Row)
Sheets("家族構成").Range("k" & r) = Sheets("個人データ").Range("b" & c.Row)
If Sheets("個人データ").Range("b" & c.Row) <> "" Then
生年月日 = Sheets("個人データ").Range("b" & c.Row)
本日年月日 = Date
年齢 = DateDiff("yyyy", 生年月日, 本日年月日) _
+ (Format(生年月日, "mmdd") > Format(本日年月日, "mmdd"))
End If
Sheets("家族構成").Range("q" & r) = 年齢
Sheets("家族構成").Range("s" & r) = Sheets("個人データ").Range("c" & c.Row)
Sheets("家族構成").Range("u" & r) = Sheets("個人データ").Range("k" & c.Row)
r = r + 1
End If
Next c
Selection.AutoFilter
Sheets("家族構成").Select
Application.ScreenUpdating = True
End Sub
今日は、ここまで!
次回、コードの説明をしていきます。
それでは。
今年も、エクセルマクロ(VBA)講座を開催予定です。
お楽しみに!
久しぶりですが、最近質問が多い、
オートフイルターを使った条件抽出と、可視セルの扱い方に
ついて、書いてみたいと思います。
事例:
住所等が記録された個人データから、
「世帯主」と「住所」が一致するデータを抽出し、
家族構成として別画面に編集する処理を作っていきます。
(個人データ)
↓ 家族構成を編集する
(家族構成)
検索命令(Find)で条件に合うデータを絞り込んでいく方法もありますが
エクセルの便利な機能を使う事もプログラムのわかりやすさにつながります。
今回は、わかりやすくオートフィルターを使って作ってみます。
処理の動きとしては、
個人データのシートから対象者をダブルクリックすると、条件にあうデータを
抽出し、家族構成の画面へ編集する。
という動きにします。
ダブルクリックすると動く仕組みは、ワークシートイベントの
“セルがダブルクリックされた時に発生する”
BeforeDoubleClickイベントプロシジャーを使います。
下記コードを個人データのシートモジュールに入力します。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
Dim c As Range
Sheets("家族構成").Range("g5") = ""
Sheets("家族構成").Range("o5") = ""
Sheets("家族構成").Range("g6") = ""
Sheets("家族構成").Range("j5") = ""
Sheets("家族構成").Range("n6") = ""
Sheets("家族構成").Range("e9:y20") = ""
x = Target.Row
世帯主 = Sheets("個人データ").Range("e" & x)
現住所1 = Sheets("個人データ").Range("f" & x)
現住所2 = Sheets("個人データ").Range("g" & x)
Range("A1").Select
Selection.AutoFilter
Range("A1").AutoFilter Field:=5, Criteria1:=世帯主
Range("A1").AutoFilter Field:=6, Criteria1:=現住所1
Range("A1").AutoFilter Field:=7, Criteria1:=現住所2
r = 9
For Each c In Worksheets("個人データ").Columns(1).SpecialCells(xlCellTypeVisible)
If c = "" Then
Exit For
End If
If c.Row > 1 Then
Sheets("家族構成").Range("g5") = Sheets("個人データ").Range("f" & c.Row)
Sheets("家族構成").Range("o5") = Sheets("個人データ").Range("g" & c.Row)
Sheets("家族構成").Range("g6") = Sheets("個人データ").Range("h" & c.Row)
Sheets("家族構成").Range("j6") = Sheets("個人データ").Range("i" & c.Row)
Sheets("家族構成").Range("n6") = Sheets("個人データ").Range("j" & c.Row)
Sheets("家族構成").Range("e" & r) = Sheets("個人データ").Range("d" & c.Row)
Sheets("家族構成").Range("g" & r) = Sheets("個人データ").Range("a" & c.Row)
Sheets("家族構成").Range("k" & r) = Sheets("個人データ").Range("b" & c.Row)
If Sheets("個人データ").Range("b" & c.Row) <> "" Then
生年月日 = Sheets("個人データ").Range("b" & c.Row)
本日年月日 = Date
年齢 = DateDiff("yyyy", 生年月日, 本日年月日) _
+ (Format(生年月日, "mmdd") > Format(本日年月日, "mmdd"))
End If
Sheets("家族構成").Range("q" & r) = 年齢
Sheets("家族構成").Range("s" & r) = Sheets("個人データ").Range("c" & c.Row)
Sheets("家族構成").Range("u" & r) = Sheets("個人データ").Range("k" & c.Row)
r = r + 1
End If
Next c
Selection.AutoFilter
Sheets("家族構成").Select
Application.ScreenUpdating = True
End Sub
今日は、ここまで!
次回、コードの説明をしていきます。
それでは。
Posted by ミール at
21:52
│Comments(0)
2014年03月17日
1回目の講座を行いました
13日(木)に、第1回目の講座を行いました。
19:00~21:00と遅い時間帯の講座でしたが、
7名の方に参加頂きました。
ありがとうございました。
今回は、「マクロの記録」から自動化の仕組みを学びましたが、
皆さん、エクセル操作には慣れており、思ったよりスムーズに
進める事ができました。
エクセルには、便利な機能がたくさんあります。
特定のデータを抽出する時は、オートフィルターを使います。
並べ替えをする時は、ソート機能を使います。
関数やグラフ機能も便利です。
目的に応じて機能を使い分けますが、
その選択肢に、「マクロ」も入れて頂くと、
今まで以上に、仕事が捗ります。
「マクロ」を知っていて、使わないというのであれば仕方ありませんが
「マクロ」を知らないで、日々の業務に追われているのであれば
一度体験してみてはいかがでしょうか。
次回は、名簿の中から特定の項目を編集し
性別が、男性なら”○”、女性なら”☆”、空白なら”エラー”と編集する
マクロを作りながら、自動化の基本、「繰り返し処理」、「条件分岐」、
「変数」について勉強していきたいと思います。
<名簿>
↓
<参加者名簿>
それでは、お楽しみに!
19:00~21:00と遅い時間帯の講座でしたが、
7名の方に参加頂きました。
ありがとうございました。
今回は、「マクロの記録」から自動化の仕組みを学びましたが、
皆さん、エクセル操作には慣れており、思ったよりスムーズに
進める事ができました。
エクセルには、便利な機能がたくさんあります。
特定のデータを抽出する時は、オートフィルターを使います。
並べ替えをする時は、ソート機能を使います。
関数やグラフ機能も便利です。
目的に応じて機能を使い分けますが、
その選択肢に、「マクロ」も入れて頂くと、
今まで以上に、仕事が捗ります。
「マクロ」を知っていて、使わないというのであれば仕方ありませんが
「マクロ」を知らないで、日々の業務に追われているのであれば
一度体験してみてはいかがでしょうか。
次回は、名簿の中から特定の項目を編集し
性別が、男性なら”○”、女性なら”☆”、空白なら”エラー”と編集する
マクロを作りながら、自動化の基本、「繰り返し処理」、「条件分岐」、
「変数」について勉強していきたいと思います。
<名簿>
↓
<参加者名簿>
それでは、お楽しみに!
2014年02月26日
講座が始まります。
マクロの講座や勉強会でよく質問にあがるのが、
「マクロの記録」で、ソート処理の記録を作りましたが、
データが゙増えると、うまく並び替えできません。どうしてですか?
というもの。
例えば、下のデータを参考に考えてみましょう。
Sheet1
Sheet1のデータを売上金額の多い順に並べ替える処理を記録します。
マクロの記録の手順でいくと、
「マクロの記録」開始
①Sheet1をクリック
②セルA1をクリック
③ショートカットキー(Shift + Ctrl + :)
※対象データが選択される。
④並べ替えをクリック(データタブ)
売上/降順でソート実行
⑤セルA1をクリック
「マクロの記録」終了
マクロを実行してみましょう。
うまくいきました。
では、2月6日のデータを1件追加してみましょう。
先ほどの、マクロを実行してみましょう。
追加された2月6日のデータがソートされてません。
なぜ?・・・というもの。
記録されたマクロをみてみましょう。
Sub ソート()
'
' ソート Macro
'
'
Sheets("Sheet1").Select
Range("A1").Select
Selection.CurrentRegion.Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C6"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:C6")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
End Sub
「マクロの記録」の手順の中で、
③ショートカットキー(Shift + Ctrl + :)
をしました。
データが何件増えても、選択できるようにという思いで、
行った操作のつもりです。
でも、その下のソート処理でことごとく、くずされてしまいます。
下線の部分で、しっかり範囲指定がされています。
これでは自動化の意味がありません。
オートフィルターやソートの「マクロの記録」は、このような仕組みみたいですね。
こんな時、VBAを少し勉強すれば、すんなり解決できるんですよ。
方法はいくつかありますが、わかりやすい方法でいくと、
データの最終行を取得するというやり方です。
Sub ソート()
'
' ソート Macro
'
'
Sheets("Sheet1").Select
Range("A1048576").Select
x = Selection.End(xlUp).Row
Range("A1").Select
Selection.CurrentRegion.Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C" & x), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:C" & x)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
End Sub
青色の部分を追加してあげれば、出来上がりです。
これは、以前の記事でも書きましたが、
自動化には欠かせない、考え方ですので憶えておくといいですよ。
こんな感じの講座をやっていきたいと思います。
受講者募集中!
「マクロの記録」で、ソート処理の記録を作りましたが、
データが゙増えると、うまく並び替えできません。どうしてですか?
というもの。
例えば、下のデータを参考に考えてみましょう。
Sheet1
Sheet1のデータを売上金額の多い順に並べ替える処理を記録します。
マクロの記録の手順でいくと、
「マクロの記録」開始
①Sheet1をクリック
②セルA1をクリック
③ショートカットキー(Shift + Ctrl + :)
※対象データが選択される。
④並べ替えをクリック(データタブ)
売上/降順でソート実行
⑤セルA1をクリック
「マクロの記録」終了
マクロを実行してみましょう。
うまくいきました。
では、2月6日のデータを1件追加してみましょう。
先ほどの、マクロを実行してみましょう。
追加された2月6日のデータがソートされてません。
なぜ?・・・というもの。
記録されたマクロをみてみましょう。
Sub ソート()
'
' ソート Macro
'
'
Sheets("Sheet1").Select
Range("A1").Select
Selection.CurrentRegion.Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C6"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:C6")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
End Sub
「マクロの記録」の手順の中で、
③ショートカットキー(Shift + Ctrl + :)
をしました。
データが何件増えても、選択できるようにという思いで、
行った操作のつもりです。
でも、その下のソート処理でことごとく、くずされてしまいます。
下線の部分で、しっかり範囲指定がされています。
これでは自動化の意味がありません。
オートフィルターやソートの「マクロの記録」は、このような仕組みみたいですね。
こんな時、VBAを少し勉強すれば、すんなり解決できるんですよ。
方法はいくつかありますが、わかりやすい方法でいくと、
データの最終行を取得するというやり方です。
Sub ソート()
'
' ソート Macro
'
'
Sheets("Sheet1").Select
Range("A1048576").Select
x = Selection.End(xlUp).Row
Range("A1").Select
Selection.CurrentRegion.Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C" & x), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A1:C" & x)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
End Sub
青色の部分を追加してあげれば、出来上がりです。
これは、以前の記事でも書きましたが、
自動化には欠かせない、考え方ですので憶えておくといいですよ。
こんな感じの講座をやっていきたいと思います。
受講者募集中!
Posted by ミール at
19:12
│Comments(0)
2013年11月04日
**できた時の達成感**
エクセルマクロ講座より
10月の講座なんとか終了しました。
最終日の7名にはびっくりしました。
「この日になんとか受講させて下さい」
という方が2名いらして、
あわててテキストを準備した次第です。
でも、講座は予定通り進める事ができました。
受講して下さった皆様、大変ありがとうございました。
例題の中でこんな問題をだしてみました。
Sheet1のデータから、那覇市だけを抜き出してSheet2に編集するというもの。
sheet1
結果
Sheet2
となるはずが
ほぼ全員が
と・・予想外の結果になり、みなさん悩んでしまいました。
でも、ここからです。
今まで受け身の姿勢だったみなさんが、一気に目覚め質問攻め。
「なぜですか!」
「変数も繰り返しもできるのに、なにがおかしいんですか?」
あれやこれやと格闘しているうちに、一人でき、二人・・・と
そして、全員が完成していきました。
Sub 抽出()
Sheets("Sheet2").Range("a1:A20") = ""
Sheets("Sheet1").Select
j = 1
For i = 1 To 21
If Sheets("Sheet1").Range("a" & i) = "那覇市" Then
Sheets("Sheet2").Range("a" & j) = Sheets("Sheet1").Range("a" & i)
j = j + 1
End If
Next
Sheets("Sheet2").Select
End Sub
その時「こんなもんなんだ!」とプログラミングの楽しさを実感できたようでした。
そんな、エクセルマクロ講座11月も開催予定です。
少しでも時間を有効に使いたい方おすすめですよ。
***** 講座内容 *****
講座概要:①業務を効率よく自動化する為のマクロ機能の学習
②マクロを使いやすくするためのボタンの作り方
③マクロのプログラミング言語・・VBA基本の学習
④プログラミングの基本的な繰り返し処理・条件分岐処理の学習
※実際にパソコンを使い、マクロを体験しながら進めていきます。
受講対象者:キーボード入力がスムーズにできる方(重要)
Excel(エクセル)に興味のある方
マクロ・VBAを学習したい方
(初心者向けの内容となっています)
日程: H25年11月16日(土) 13:30~17:00定員5名
H25年11月30日(土) 13:30~17:00定員5名
場所:具志川じんぶん館 市民研修室(沖縄県うるま市川崎468)
受講料:5,000円(当日お支払お願いします)
申込方法:メール myb10g@chive.ocn.ne.jp
FAX 098-964-2238
(お名前、連絡先、希望日をご連絡下さい)
10月の講座なんとか終了しました。
最終日の7名にはびっくりしました。
「この日になんとか受講させて下さい」
という方が2名いらして、
あわててテキストを準備した次第です。
でも、講座は予定通り進める事ができました。
受講して下さった皆様、大変ありがとうございました。
例題の中でこんな問題をだしてみました。
Sheet1のデータから、那覇市だけを抜き出してSheet2に編集するというもの。
sheet1
結果
Sheet2
となるはずが
ほぼ全員が
と・・予想外の結果になり、みなさん悩んでしまいました。
でも、ここからです。
今まで受け身の姿勢だったみなさんが、一気に目覚め質問攻め。
「なぜですか!」
「変数も繰り返しもできるのに、なにがおかしいんですか?」
あれやこれやと格闘しているうちに、一人でき、二人・・・と
そして、全員が完成していきました。
Sub 抽出()
Sheets("Sheet2").Range("a1:A20") = ""
Sheets("Sheet1").Select
j = 1
For i = 1 To 21
If Sheets("Sheet1").Range("a" & i) = "那覇市" Then
Sheets("Sheet2").Range("a" & j) = Sheets("Sheet1").Range("a" & i)
j = j + 1
End If
Next
Sheets("Sheet2").Select
End Sub
その時「こんなもんなんだ!」とプログラミングの楽しさを実感できたようでした。
そんな、エクセルマクロ講座11月も開催予定です。
少しでも時間を有効に使いたい方おすすめですよ。
***** 講座内容 *****
講座概要:①業務を効率よく自動化する為のマクロ機能の学習
②マクロを使いやすくするためのボタンの作り方
③マクロのプログラミング言語・・VBA基本の学習
④プログラミングの基本的な繰り返し処理・条件分岐処理の学習
※実際にパソコンを使い、マクロを体験しながら進めていきます。
受講対象者:キーボード入力がスムーズにできる方(重要)
Excel(エクセル)に興味のある方
マクロ・VBAを学習したい方
(初心者向けの内容となっています)
日程: H25年11月16日(土) 13:30~17:00定員5名
H25年11月30日(土) 13:30~17:00定員5名
場所:具志川じんぶん館 市民研修室(沖縄県うるま市川崎468)
受講料:5,000円(当日お支払お願いします)
申込方法:メール myb10g@chive.ocn.ne.jp
FAX 098-964-2238
(お名前、連絡先、希望日をご連絡下さい)
2013年10月16日
すぐ身に付く! エクセルマクロ講座
先日の講座、反省点も多々あり。
ちょっときびしい意見では
「もっと簡単だと思った」
「対象者をもっとしぼっては?」
「時間が足りなかった。っていうか・・先に進む受講者に
もっと時間をとってほしかった」
うれしい言葉も、
「マクロの使い方がわかっただけでも、勉強になりました。
仕事で生かしたいので又教えて下さい」
「こんな機能初めて知った。どう使うのかピンとこないが
確かに効率的だ」
等々。
貴重なご意見ありがとうございました。
どうしても、質問の多い方に時間がとられてしまい
時間が押してしまった。・・・反省
スムーズにできるよう、テキストの
内容や手順を再度練り直したいと思います。
次回は、10月19日(土)です。
残念ですが、一人キャンセルというか、
来週に回してくれという方がいらして、
一人空きがでました。
知っていて損はしない、仕事に役立つエクセルマクロ。
是非、受講してみませんか。
申込はこちらまで!
***** 講座内容 *****
講座概要:①業務を効率よく自動化する為のマクロ機能の学習
②マクロを使いやすくするためのボタンの作り方
③マクロのプログラミング言語・・VBA基本の学習
④プログラミングの基本的な繰り返し処理・条件分岐処理の学習
※実際にパソコンを使い、マクロを体験しながら進めていきます。
受講対象者:キーボード入力がスムーズにできる方(重要)
Excel(エクセル)に興味のある方
マクロ・VBAを学習したい方
(初心者向けの内容となっています)
日程: H25年10月12日(土) 13:30~17:00定員5名(満席)
H25年10月19日(土) 13:30~17:00定員5名(空き1名)
H25年10月26日(土) 13:30~17:00定員5名(満席)
場所:具志川じんぶん館 市民研修室(沖縄県うるま市川崎468)
受講料:5,000円(当日お支払お願いします)
申込方法:メール myb10g@chive.ocn.ne.jp
FAX 098-964-2238
(お名前、連絡先、希望日をご連絡下さい
ちょっときびしい意見では
「もっと簡単だと思った」
「対象者をもっとしぼっては?」
「時間が足りなかった。っていうか・・先に進む受講者に
もっと時間をとってほしかった」
うれしい言葉も、
「マクロの使い方がわかっただけでも、勉強になりました。
仕事で生かしたいので又教えて下さい」
「こんな機能初めて知った。どう使うのかピンとこないが
確かに効率的だ」
等々。
貴重なご意見ありがとうございました。
どうしても、質問の多い方に時間がとられてしまい
時間が押してしまった。・・・反省
スムーズにできるよう、テキストの
内容や手順を再度練り直したいと思います。
次回は、10月19日(土)です。
残念ですが、一人キャンセルというか、
来週に回してくれという方がいらして、
一人空きがでました。
知っていて損はしない、仕事に役立つエクセルマクロ。
是非、受講してみませんか。
申込はこちらまで!
***** 講座内容 *****
講座概要:①業務を効率よく自動化する為のマクロ機能の学習
②マクロを使いやすくするためのボタンの作り方
③マクロのプログラミング言語・・VBA基本の学習
④プログラミングの基本的な繰り返し処理・条件分岐処理の学習
※実際にパソコンを使い、マクロを体験しながら進めていきます。
受講対象者:キーボード入力がスムーズにできる方(重要)
Excel(エクセル)に興味のある方
マクロ・VBAを学習したい方
(初心者向けの内容となっています)
日程: H25年10月12日(土) 13:30~17:00定員5名(満席)
H25年10月19日(土) 13:30~17:00定員5名(空き1名)
H25年10月26日(土) 13:30~17:00定員5名(満席)
場所:具志川じんぶん館 市民研修室(沖縄県うるま市川崎468)
受講料:5,000円(当日お支払お願いします)
申込方法:メール myb10g@chive.ocn.ne.jp
FAX 098-964-2238
(お名前、連絡先、希望日をご連絡下さい
Posted by ミール at
19:02
│Comments(0)
2013年10月12日
***エクセルマクロ講座開催 ***
先週台風の影響で延期になりました、エクセルマクロ講座。
今日は、予定通り開催いたします。
おかげさま、全日程満席となりました。
受講者のみなさん、申し込みありがとうございます。
初心者でも、理解できる内容で仕事でも役立つと
思いますので、楽しみにしていてください。
※ 11月も会場が取れ次第、御案内します。
***** 講座内容 *****
講座概要:①業務を効率よく自動化する為のマクロ機能の学習
②マクロを使いやすくするためのボタンの作り方
③マクロのプログラミング言語・・VBA基本の学習
④プログラミングの基本的な繰り返し処理・条件分岐処理の学習
※実際にパソコンを使い、マクロを体験しながら進めていきます。
受講対象者:キーボード入力ができる方
Excel(エクセル)に興味のある方
マクロ・VBAを学習したい方
(初心者向けの内容となっています)
日程: H25年10月12日(土) 13:30~17:00定員5名(満席)
H25年10月19日(土) 13:30~17:00定員5名(満席)
H25年10月26日(土) 13:30~17:00定員5名(満席)
場所:具志川じんぶん館 市民研修室(沖縄県うるま市川崎468)
受講料:5,000円(当日お支払お願いします)
申込方法:メール myb10g@chive.ocn.ne.jp
FAX 098-964-2238
(お名前、連絡先、希望日をご連絡下さい
今日は、予定通り開催いたします。
おかげさま、全日程満席となりました。
受講者のみなさん、申し込みありがとうございます。
初心者でも、理解できる内容で仕事でも役立つと
思いますので、楽しみにしていてください。
※ 11月も会場が取れ次第、御案内します。
***** 講座内容 *****
講座概要:①業務を効率よく自動化する為のマクロ機能の学習
②マクロを使いやすくするためのボタンの作り方
③マクロのプログラミング言語・・VBA基本の学習
④プログラミングの基本的な繰り返し処理・条件分岐処理の学習
※実際にパソコンを使い、マクロを体験しながら進めていきます。
受講対象者:キーボード入力ができる方
Excel(エクセル)に興味のある方
マクロ・VBAを学習したい方
(初心者向けの内容となっています)
日程: H25年10月12日(土) 13:30~17:00定員5名(満席)
H25年10月19日(土) 13:30~17:00定員5名(満席)
H25年10月26日(土) 13:30~17:00定員5名(満席)
場所:具志川じんぶん館 市民研修室(沖縄県うるま市川崎468)
受講料:5,000円(当日お支払お願いします)
申込方法:メール myb10g@chive.ocn.ne.jp
FAX 098-964-2238
(お名前、連絡先、希望日をご連絡下さい
Posted by ミール at
09:32
│Comments(0)
2013年10月07日
***エクセルマクロ講座のご案内 ***
台風23号で講座が延期になりました。
空き時間ができたので中学生の息子にもエクセルマクロの関心を
持ってもらおうと、今回の講座の内容をやってみました。
エクセルを使った事がないというが、意外や意外すんなりこなし
マクロからエクセルに関心をもった様子。
もっと教えてくれというので、課題を検討中です。
そんな事をしながらふと思ったのが、エクセルを今から習いたいという方でも
キーボード入力が出来る方なら、エクセルマクロ講座を受講できるのでは?と
検討した結果、19日(土)に2名の空きがあります。
エクセルを今から習いたいという方、マクロからエクセルの勉強を始めてみませんか。
19日(土)に2名受け付けますので興味のある方お問い合わせ下さい。
※エクセル経験者でももちろんokですよ。
***** 講座内容 *****
講座概要:①業務を効率よく自動化する為のマクロ機能の学習
②マクロを使いやすくするためのボタンの作り方
③マクロのプログラミング言語・・VBA基本の学習
④プログラミングの基本的な繰り返し処理・条件分岐処理の学習
※実際にパソコンを使い、マクロを体験しながら進めていきます。
受講対象者:キーボード入力ができる方
Excel(エクセル)に興味のある方
マクロ・VBAを学習したい方
(初心者向けの内容となっています)
日程: H25年10月12日(土) 13:30~17:00定員5名(満席)
H25年10月19日(土) 13:30~17:00定員5名(2名空き)
H25年10月26日(土) 13:30~17:00定員5名(満席)
場所:具志川じんぶん館 市民研修室(沖縄県うるま市川崎468)
受講料:5,000円(当日お支払お願いします)
申込方法:メール myb10g@chive.ocn.ne.jp
FAX 098-964-2238
(お名前、連絡先、希望日をご連絡下さい
Posted by ミール at
22:21
│Comments(0)
2013年10月05日
本日の講座延期のお知らせ
こんにちは。
*** エクセル自動化楽ちん講座 ***延期のお知らせ。
本日の参加予定の方には、既に連絡済ですが
台風23号の影響で延期となりました。
11月に改めて受講頂くか、今月定員を増やして行うか調整中です。
改めて連絡いたします。
*** エクセル自動化楽ちん講座 ***延期のお知らせ。
本日の参加予定の方には、既に連絡済ですが
台風23号の影響で延期となりました。
11月に改めて受講頂くか、今月定員を増やして行うか調整中です。
改めて連絡いたします。
Posted by ミール at
12:51
│Comments(0)
2013年09月13日
** エクセル自動化楽ちん講座**のご案内
エクセルマクロ(VBA)講座のご案内です。
エクセルを何年も使っているのにマクロを使った事がない
という方がたくさんいらっしゃいます。
私の職場や知人、取引先の会社でも、
エクセルで請求書や日報等を作っていてエクセルの機能は普通に使いこなしています。
私もそうでしたが、関数も使えるし、誰がやってもこんなもんだろうと
これしか方法はないと思っていました。
ところが、
マクロの世界を知ってからは
「なんて無駄な時間を費やしてきたんだろう」
と思うようになりました。
そして、必死?でマクロの勉強をしました。
業務で使うマクロもたくさん作りました。
職場や、知人の会社等で
「こういう機能があってこうすれば、もっと早く楽に出来るよ」
って実際に作ってみせると目が点に!
必ずと言っていい程、
「もっと早く教えてくれたらいいのに」という言葉がかえってきます。
その言葉が、耳に残り、それなら、
たくさんの人にマクロの魅力を知ってもらい
もっと楽にもっと楽しく仕事ができる事を伝えたいと思い
特別講座を企画しました。
仕事でエクセルの操作に手間取っている方、
マクロの世界を体験してみませんか。
マクロの世界を知らない貴方。一歩踏みだしてみませんか。
3日の仕事が10分で!なんて、夢のような事が
起こるかもしれません。
お申込みお待ちしています。
***** 講座内容 *****
講座概要:①業務を効率よく自動化する為のマクロ機能の学習
②マクロを使いやすくするためのボタンの作り方
③マクロのプログラミング言語・・VBA基本の学習
④プログラミングの基本的な繰り返し処理・条件分岐処理の学習
※実際にパソコンを使い、マクロを体験しながら進めていきます。
受講対象者:Excel(エクセル)の操作ができる方
マクロ・VBAを学習したい方
(初心者向けの内容となっています)
日程: H25年10月5日(土) 13:30~17:00 定員5名
H25年10月12日(土) 13:30~17:00定員5名
H25年10月19日(土) 13:30~17:00定員5名
H25年10月26日(土) 13:30~17:00定員5名
場所:具志川じんぶん館 市民研修室(沖縄県うるま市川崎468)
受講料:5,000円(当日お支払お願いします)
申込方法:メール myb10g@chive.ocn.ne.jp
FAX 098-964-2238
(お名前、連絡先、希望日をご連絡下さい)
チラシもご覧ください
エクセルを何年も使っているのにマクロを使った事がない
という方がたくさんいらっしゃいます。
私の職場や知人、取引先の会社でも、
エクセルで請求書や日報等を作っていてエクセルの機能は普通に使いこなしています。
私もそうでしたが、関数も使えるし、誰がやってもこんなもんだろうと
これしか方法はないと思っていました。
ところが、
マクロの世界を知ってからは
「なんて無駄な時間を費やしてきたんだろう」
と思うようになりました。
そして、必死?でマクロの勉強をしました。
業務で使うマクロもたくさん作りました。
職場や、知人の会社等で
「こういう機能があってこうすれば、もっと早く楽に出来るよ」
って実際に作ってみせると目が点に!
必ずと言っていい程、
「もっと早く教えてくれたらいいのに」という言葉がかえってきます。
その言葉が、耳に残り、それなら、
たくさんの人にマクロの魅力を知ってもらい
もっと楽にもっと楽しく仕事ができる事を伝えたいと思い
特別講座を企画しました。
仕事でエクセルの操作に手間取っている方、
マクロの世界を体験してみませんか。
マクロの世界を知らない貴方。一歩踏みだしてみませんか。
3日の仕事が10分で!なんて、夢のような事が
起こるかもしれません。
お申込みお待ちしています。
***** 講座内容 *****
講座概要:①業務を効率よく自動化する為のマクロ機能の学習
②マクロを使いやすくするためのボタンの作り方
③マクロのプログラミング言語・・VBA基本の学習
④プログラミングの基本的な繰り返し処理・条件分岐処理の学習
※実際にパソコンを使い、マクロを体験しながら進めていきます。
受講対象者:Excel(エクセル)の操作ができる方
マクロ・VBAを学習したい方
(初心者向けの内容となっています)
日程: H25年10月5日(土) 13:30~17:00 定員5名
H25年10月12日(土) 13:30~17:00定員5名
H25年10月19日(土) 13:30~17:00定員5名
H25年10月26日(土) 13:30~17:00定員5名
場所:具志川じんぶん館 市民研修室(沖縄県うるま市川崎468)
受講料:5,000円(当日お支払お願いします)
申込方法:メール myb10g@chive.ocn.ne.jp
FAX 098-964-2238
(お名前、連絡先、希望日をご連絡下さい)
チラシもご覧ください
2013年05月17日
VBA:通所介護事業所(デイサービス)の事務改善(10)
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善について書いています。
昨日は、「実績報告書」を一気に印刷する処理について書きましたが、
今日は、対象者を選択して印刷する方法を考えてみたいと思います。
対象者の選択には、チェックボックスを使います。
以前書いた記事を参考にしてみましょう。
こんな感じでしょうか。
A列のセルにチェックボックスとのリンクを行い、
結果が「True」なら印刷対象、「False」ならスルーの
分岐処理を入れます。
昨日のプログラムに赤色の部分を追加します。
Sub 印刷()
Application.ScreenUpdating = False
Err = 0 '実績データない時の判定に使う
r = 8 '開始行
With Worksheets("対象者名簿")
Do Until .Range("d" & r).Value = ""
If .Range("a" & r) = True Then '印刷対象の判定
Call 印刷編集(r)
If Err = 0 Then
Worksheets("実績報告書").Select
ActiveWindow.SelectedSheets.PrintPreview
' ActiveWindow.SelectedSheets.PrintOut
End If
End If
r = r + 1
Loop
'MsgBox (line1)
End With
Sheets("対象者名簿").Select
Application.ScreenUpdating = True
End Sub
テストしてみましょう。
対象者を2名選択しました。・・印刷ボタンをクリックします。
次郎さんが印刷されました。
五郎さんは、実績データがないのでメッセージを表示します。
対象者2名。見事印刷されました。
これで98%完成でしょうか。
3日の仕事が5分できるという理想をもって挑戦してみましたが
びっくりするほど、ぴったり、はまったプログラムでした。
このように、時短が図れる業務はいくらでもあります。
見た目カッコよくなくてもいいんです。(本物はそれなりに仕上がってますが)
目的は、効率化と使いやすさ。
細かい要望が、まだあるようなので応えていきたいと思います。
では
昨日は、「実績報告書」を一気に印刷する処理について書きましたが、
今日は、対象者を選択して印刷する方法を考えてみたいと思います。
対象者の選択には、チェックボックスを使います。
以前書いた記事を参考にしてみましょう。
2013/01/22
こんな感じでしょうか。
A列のセルにチェックボックスとのリンクを行い、
結果が「True」なら印刷対象、「False」ならスルーの
分岐処理を入れます。
昨日のプログラムに赤色の部分を追加します。
Sub 印刷()
Application.ScreenUpdating = False
Err = 0 '実績データない時の判定に使う
r = 8 '開始行
With Worksheets("対象者名簿")
Do Until .Range("d" & r).Value = ""
If .Range("a" & r) = True Then '印刷対象の判定
Call 印刷編集(r)
If Err = 0 Then
Worksheets("実績報告書").Select
ActiveWindow.SelectedSheets.PrintPreview
' ActiveWindow.SelectedSheets.PrintOut
End If
End If
r = r + 1
Loop
'MsgBox (line1)
End With
Sheets("対象者名簿").Select
Application.ScreenUpdating = True
End Sub
テストしてみましょう。
対象者を2名選択しました。・・印刷ボタンをクリックします。
次郎さんが印刷されました。
五郎さんは、実績データがないのでメッセージを表示します。
対象者2名。見事印刷されました。
これで98%完成でしょうか。
3日の仕事が5分できるという理想をもって挑戦してみましたが
びっくりするほど、ぴったり、はまったプログラムでした。
このように、時短が図れる業務はいくらでもあります。
見た目カッコよくなくてもいいんです。(本物はそれなりに仕上がってますが)
目的は、効率化と使いやすさ。
細かい要望が、まだあるようなので応えていきたいと思います。
では
2013年05月16日
VBA:通所介護事業所(デイサービス)の事務改善(9)
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善について書いています。
少し間が空きましたが、前回からの続きで、今日は「印刷処理」を考えてみたいと思います。
この処理を組み込めば、本当に5分で終わってしまいます。
3日の仕事が5分で終わる!恐るべき時短です。
それでは、処理の説明をします。
対象データがある間、項目編集、印刷の繰り返し処理をします。
①対象データを8行目から参照する。(変数rを使う)
②氏名(d列)が空白になる迄繰り返す。・・・空白なら終了。
③項目の編集処理をする。・・・前回作ったサブプロシジャーへ(変数rを指定する)
④印刷をする。(今回はプレビューで対応)
④編集処理で対象データがない時、印刷処理をスルーする。
プログラムはこんな感じでしょうか。
Sub 印刷()
Application.ScreenUpdating = False
Err = 0 '実績データない時の判定に使う
r = 8 '開始行
With Worksheets("対象者名簿")
Do Until .Range("d" & r).Value = ""
Call 印刷編集(r)
If Err = 0 Then
Worksheets("実績報告書").Select
ActiveWindow.SelectedSheets.PrintPreview
' ActiveWindow.SelectedSheets.PrintOut
End If
r = r + 1
Loop
End With
Sheets("対象者名簿").Select
Application.ScreenUpdating = True
End Sub
項目編集のプロシジャーは前回を参考にして下さい。
この印刷処理はボタンを作り、マクロの登録で印刷を選択します。
それではテストしてみましょう。
ボタンをクリックして実行してみましょう。
・
・
・
連続で印刷(プレビュー)されました。
これで、90%完成ですね。
作っていく段階で、「印刷する対象者を選択したい」という要望がでてきました。
この要望にも応えていきたいと思います。
では
少し間が空きましたが、前回からの続きで、今日は「印刷処理」を考えてみたいと思います。
この処理を組み込めば、本当に5分で終わってしまいます。
3日の仕事が5分で終わる!恐るべき時短です。
それでは、処理の説明をします。
対象データがある間、項目編集、印刷の繰り返し処理をします。
①対象データを8行目から参照する。(変数rを使う)
②氏名(d列)が空白になる迄繰り返す。・・・空白なら終了。
③項目の編集処理をする。・・・前回作ったサブプロシジャーへ(変数rを指定する)
④印刷をする。(今回はプレビューで対応)
④編集処理で対象データがない時、印刷処理をスルーする。
プログラムはこんな感じでしょうか。
Sub 印刷()
Application.ScreenUpdating = False
Err = 0 '実績データない時の判定に使う
r = 8 '開始行
With Worksheets("対象者名簿")
Do Until .Range("d" & r).Value = ""
Call 印刷編集(r)
If Err = 0 Then
Worksheets("実績報告書").Select
ActiveWindow.SelectedSheets.PrintPreview
' ActiveWindow.SelectedSheets.PrintOut
End If
r = r + 1
Loop
End With
Sheets("対象者名簿").Select
Application.ScreenUpdating = True
End Sub
項目編集のプロシジャーは前回を参考にして下さい。
この印刷処理はボタンを作り、マクロの登録で印刷を選択します。
それではテストしてみましょう。
ボタンをクリックして実行してみましょう。
・
・
・
連続で印刷(プレビュー)されました。
これで、90%完成ですね。
作っていく段階で、「印刷する対象者を選択したい」という要望がでてきました。
この要望にも応えていきたいと思います。
では
2013年04月26日
VBA:通所介護事業所(デイサービス)の事務改善(8)
前回からの続きです・・・が、タイトルをかえました。
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善について書いています。
3日の仕事がわずか5分に!夢のような取り組みです。
今日は、プログラムを作る上でのワンポイントです。
プログラムを実際動かしてみると、画面のちらつきが気になる時があります。
今回もほんの一瞬ですが、対象者をダブルクリックして実績報告書の印刷プレビューする間に
画面のちらつきが起こります。
この「画面ちらつき」、意外と気になるので下の命令をプログラムに組み込みます。
画面の更新を停止(OFF)にする。
Application.ScreenUpdating = False
そして、処理の終了後には元のとおりONにしてあげましょう。
Application.ScreenUpdating = True
今、作成中のプログラムに入れると次のようになります。(赤字の部分です)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
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
Call 項目クリア
Call 編集(r)
For cnt = 1 To 31
If obj.Offset(0, cnt) = "" Then
Else
Worksheets("実績報告書").Range("l12").Offset(0, cnt) = 1 '実績報告書の利用日を編集
Worksheets("実績報告書").Range("l14").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l16").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l18").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l20").Offset(0, cnt) = 1
End If
Next cnt
Worksheets("実績報告書").Select
ActiveWindow.SelectedSheets.PrintPreview
Sheets("対象者名簿").Select
End If
Application.ScreenUpdating = True
End Sub
前回からの続きで、実績報告書を一気に印刷するプログラムは今作成中ですので次回書きたいと思います。
では
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善について書いています。
3日の仕事がわずか5分に!夢のような取り組みです。
今日は、プログラムを作る上でのワンポイントです。
プログラムを実際動かしてみると、画面のちらつきが気になる時があります。
今回もほんの一瞬ですが、対象者をダブルクリックして実績報告書の印刷プレビューする間に
画面のちらつきが起こります。
この「画面ちらつき」、意外と気になるので下の命令をプログラムに組み込みます。
画面の更新を停止(OFF)にする。
Application.ScreenUpdating = False
そして、処理の終了後には元のとおりONにしてあげましょう。
Application.ScreenUpdating = True
今、作成中のプログラムに入れると次のようになります。(赤字の部分です)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
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
Call 項目クリア
Call 編集(r)
For cnt = 1 To 31
If obj.Offset(0, cnt) = "" Then
Else
Worksheets("実績報告書").Range("l12").Offset(0, cnt) = 1 '実績報告書の利用日を編集
Worksheets("実績報告書").Range("l14").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l16").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l18").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l20").Offset(0, cnt) = 1
End If
Next cnt
Worksheets("実績報告書").Select
ActiveWindow.SelectedSheets.PrintPreview
Sheets("対象者名簿").Select
End If
Application.ScreenUpdating = True
End Sub
前回からの続きで、実績報告書を一気に印刷するプログラムは今作成中ですので次回書きたいと思います。
では
Posted by ミール at
14:02
│Comments(0)
2013年04月24日
VBA:いくらでもある事務改善パート2(7)
前回からの続きです。
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善について書いています。
3日の仕事がわずか5分に!夢のような取り組みです。
今日は、印刷処理について考えてみます。
一件の印刷なら、いたって簡単。
印刷プレビューの手順をマクロの記録で作成します。
①実績報告書のシートを選択
②マクロの記録開始
③印刷プレビュー
④印刷ブレビューを閉じる
⑤対象者名簿を選択
⑥マクロの記録終了
の手順で記録してみましょう。
①、② 実績報告書のシートからマクロの記録を開始します。
③ 印刷プレビューを表示させます
④ 印刷プレビューを閉じます。
⑤対象者名簿を選択し、⑥マクロを終了します。
下のようにマクロが記録されたはずです。
Sub Macro1()
'
' Macro1 Macro
'
ActiveWindow.SelectedSheets.PrintPreview
Sheets("対象者名簿").Select
End Sub
赤色の部分を、先日迄作ったプログラムにコピーします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
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
Call 項目クリア
Call 編集(r)
For cnt = 1 To 31
If obj.Offset(0, cnt) = "" Then
Else
Worksheets("実績報告書").Range("l12").Offset(0, cnt) = 1 '実績報告書の利用日を編集
Worksheets("実績報告書").Range("l14").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l16").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l18").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l20").Offset(0, cnt) = 1
End If
Next cnt
Worksheets("実績報告書").Select
ActiveWindow.SelectedSheets.PrintPreview
Sheets("対象者名簿").Select
End If
Application.ScreenUpdating = True
End Sub
それでは、テストをしてみましょう。
花子さんをダブルクリックします。
見事、プレビューで表示されました。
印刷したい時は印刷ボタンを選択し、終了したい時は「プレビュー閉じる」を選択します。
選択した後は自動的に対象者名簿へ戻るはずです。
かなりイメージどおり出来上がってきました。
次回は、一気に印刷する処理を考えてみたいと思います。
これができれば85%完成です。
では
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善について書いています。
3日の仕事がわずか5分に!夢のような取り組みです。
今日は、印刷処理について考えてみます。
一件の印刷なら、いたって簡単。
印刷プレビューの手順をマクロの記録で作成します。
①実績報告書のシートを選択
②マクロの記録開始
③印刷プレビュー
④印刷ブレビューを閉じる
⑤対象者名簿を選択
⑥マクロの記録終了
の手順で記録してみましょう。
①、② 実績報告書のシートからマクロの記録を開始します。
③ 印刷プレビューを表示させます
④ 印刷プレビューを閉じます。
⑤対象者名簿を選択し、⑥マクロを終了します。
下のようにマクロが記録されたはずです。
Sub Macro1()
'
' Macro1 Macro
'
ActiveWindow.SelectedSheets.PrintPreview
Sheets("対象者名簿").Select
End Sub
赤色の部分を、先日迄作ったプログラムにコピーします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Application.ScreenUpdating = False
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
Call 項目クリア
Call 編集(r)
For cnt = 1 To 31
If obj.Offset(0, cnt) = "" Then
Else
Worksheets("実績報告書").Range("l12").Offset(0, cnt) = 1 '実績報告書の利用日を編集
Worksheets("実績報告書").Range("l14").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l16").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l18").Offset(0, cnt) = 1
Worksheets("実績報告書").Range("l20").Offset(0, cnt) = 1
End If
Next cnt
Worksheets("実績報告書").Select
ActiveWindow.SelectedSheets.PrintPreview
Sheets("対象者名簿").Select
End If
Application.ScreenUpdating = True
End Sub
それでは、テストをしてみましょう。
花子さんをダブルクリックします。
見事、プレビューで表示されました。
印刷したい時は印刷ボタンを選択し、終了したい時は「プレビュー閉じる」を選択します。
選択した後は自動的に対象者名簿へ戻るはずです。
かなりイメージどおり出来上がってきました。
次回は、一気に印刷する処理を考えてみたいと思います。
これができれば85%完成です。
では
2013年04月23日
VBA:いくらでもある事務改善パート2(6)
前回からの続きです。
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善について書いています。
3日かかる仕事を10分、いや5分で片づけようというものです。
実績報告書の項目をすべて編集します。
70%完成でしょうか。
プログラムはこんな感じでしょうか。
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
Call 項目クリア
Call 編集(r)
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
'・・・・実績報告書の編集項目をクリアする処理
Sub 項目クリア()
'
With Worksheets("実績報告書")
.Range("e8") = ""
.Range("e6") = ""
.Range("e4") = ""
.Range("r4") = ""
.Range("b12") = ""
.Range("c13") = ""
.Range("r6") = ""
.Range("E12") = ""
.Range("E14") = ""
.Range("E16") = ""
.Range("E18") = ""
.Range("E20") = ""
.Range("B25") = ""
.Range("I25") = ""
.Range("N25") = ""
.Range("B27") = ""
.Range("I27") = ""
.Range("N27") = ""
.Range("B29") = ""
.Range("I29") = ""
.Range("N29") = ""
.Range("B31") = ""
.Range("I31") = ""
.Range("N31") = ""
.Range("B33") = ""
.Range("I33") = ""
.Range("N33") = ""
.Range("n12:ar20") = ""
End With
End Sub
'実績報告書の項目を編集する処理
' 変数 r は 行番号
Sub 編集(r) '
With Worksheets("実績報告書")
.Range("e8") = Sheets("対象者名簿").Range("d" & r)
.Range("e6") = Sheets("対象者名簿").Range("e" & r)
.Range("e4") = Sheets("対象者名簿").Range("f" & r)
.Range("r4") = Sheets("対象者名簿").Range("g" & r)
.Range("b12") = Sheets("対象者名簿").Range("h" & r)
.Range("c13") = Sheets("対象者名簿").Range("i" & r)
介護度 = Sheets("対象者名簿").Range("g" & r)
Select Case 介護度
Case "要支援1"
.Range("r6").Value = "49700"
.Range("E12").Value = "予防通所介護1"
.Range("E14").Value = "運動器機能向上加算"
.Range("E16").Value = "事業所評価加算"
.Range("E18").Value = "サービス提供体制加算Ⅱ1"
.Range("E20").Value = "介護処遇改善加算Ⅰ"
.Range("B25").Value = "予防通所介護1"
.Range("I25").Value = "651111"
.Range("N25").Value = "2099"
.Range("B27").Value = "運動器機能向上加算"
.Range("I27").Value = "655002"
.Range("N27").Value = "225"
.Range("B29").Value = "事業所評価加算"
.Range("I29").Value = "655005"
.Range("N29").Value = "120"
.Range("B31").Value = "サービス提供体制加算Ⅱ1"
.Range("I31").Value = "656103"
.Range("N31").Value = "24"
.Range("B33").Value = "介護処遇改善加算Ⅰ"
.Range("I33").Value = "656111"
.Range("N33").Value = "46.892"
Case "要支援2"
.Range("r6").Value = "104000"
.Range("e12").Value = "予防通所介護2"
.Range("e14").Value = "運動器機能向上加算"
.Range("E16").Value = "事業所評価加算"
.Range("e18").Value = "サービス提供体制加算Ⅱ2"
.Range("E20").Value = "介護処遇改善加算Ⅰ"
.Range("B25").Value = "予防通所介護2"
.Range("i25").Value = "651121"
.Range("n25").Value = "4205"
.Range("B27").Value = "運動器機能向上加算"
.Range("i27").Value = "655002"
.Range("n27").Value = "225"
.Range("B29").Value = "事業所評価加算"
.Range("I29").Value = "655005"
.Range("N29").Value = "120"
.Range("B31").Value = "サービス提供体制加算Ⅱ2"
.Range("i31").Value = "656104"
.Range("n31").Value = "48"
.Range("B33").Value = "介護処遇改善加算Ⅰ"
.Range("I33").Value = "656111"
.Range("N33").Value = "87.362"
End Select
End With
End Sub
ダブルクリックをすると、実績報告書を編集するという処理は完成しました。
次に、印刷処理の機能を作っていきます。
もちろん、一件毎の印刷はできるようにしますが、
一気に50件分を、ボタンひとつで印刷できれば、
時短につながる事間違いなし。
3日の仕事が5分で!・・・夢のような話です。
まだまだ細かい機能を追加していきます。
お楽しみに
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善について書いています。
3日かかる仕事を10分、いや5分で片づけようというものです。
実績報告書の項目をすべて編集します。
70%完成でしょうか。
プログラムはこんな感じでしょうか。
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
Call 項目クリア
Call 編集(r)
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
'・・・・実績報告書の編集項目をクリアする処理
Sub 項目クリア()
'
With Worksheets("実績報告書")
.Range("e8") = ""
.Range("e6") = ""
.Range("e4") = ""
.Range("r4") = ""
.Range("b12") = ""
.Range("c13") = ""
.Range("r6") = ""
.Range("E12") = ""
.Range("E14") = ""
.Range("E16") = ""
.Range("E18") = ""
.Range("E20") = ""
.Range("B25") = ""
.Range("I25") = ""
.Range("N25") = ""
.Range("B27") = ""
.Range("I27") = ""
.Range("N27") = ""
.Range("B29") = ""
.Range("I29") = ""
.Range("N29") = ""
.Range("B31") = ""
.Range("I31") = ""
.Range("N31") = ""
.Range("B33") = ""
.Range("I33") = ""
.Range("N33") = ""
.Range("n12:ar20") = ""
End With
End Sub
'実績報告書の項目を編集する処理
' 変数 r は 行番号
Sub 編集(r) '
With Worksheets("実績報告書")
.Range("e8") = Sheets("対象者名簿").Range("d" & r)
.Range("e6") = Sheets("対象者名簿").Range("e" & r)
.Range("e4") = Sheets("対象者名簿").Range("f" & r)
.Range("r4") = Sheets("対象者名簿").Range("g" & r)
.Range("b12") = Sheets("対象者名簿").Range("h" & r)
.Range("c13") = Sheets("対象者名簿").Range("i" & r)
介護度 = Sheets("対象者名簿").Range("g" & r)
Select Case 介護度
Case "要支援1"
.Range("r6").Value = "49700"
.Range("E12").Value = "予防通所介護1"
.Range("E14").Value = "運動器機能向上加算"
.Range("E16").Value = "事業所評価加算"
.Range("E18").Value = "サービス提供体制加算Ⅱ1"
.Range("E20").Value = "介護処遇改善加算Ⅰ"
.Range("B25").Value = "予防通所介護1"
.Range("I25").Value = "651111"
.Range("N25").Value = "2099"
.Range("B27").Value = "運動器機能向上加算"
.Range("I27").Value = "655002"
.Range("N27").Value = "225"
.Range("B29").Value = "事業所評価加算"
.Range("I29").Value = "655005"
.Range("N29").Value = "120"
.Range("B31").Value = "サービス提供体制加算Ⅱ1"
.Range("I31").Value = "656103"
.Range("N31").Value = "24"
.Range("B33").Value = "介護処遇改善加算Ⅰ"
.Range("I33").Value = "656111"
.Range("N33").Value = "46.892"
Case "要支援2"
.Range("r6").Value = "104000"
.Range("e12").Value = "予防通所介護2"
.Range("e14").Value = "運動器機能向上加算"
.Range("E16").Value = "事業所評価加算"
.Range("e18").Value = "サービス提供体制加算Ⅱ2"
.Range("E20").Value = "介護処遇改善加算Ⅰ"
.Range("B25").Value = "予防通所介護2"
.Range("i25").Value = "651121"
.Range("n25").Value = "4205"
.Range("B27").Value = "運動器機能向上加算"
.Range("i27").Value = "655002"
.Range("n27").Value = "225"
.Range("B29").Value = "事業所評価加算"
.Range("I29").Value = "655005"
.Range("N29").Value = "120"
.Range("B31").Value = "サービス提供体制加算Ⅱ2"
.Range("i31").Value = "656104"
.Range("n31").Value = "48"
.Range("B33").Value = "介護処遇改善加算Ⅰ"
.Range("I33").Value = "656111"
.Range("N33").Value = "87.362"
End Select
End With
End Sub
ダブルクリックをすると、実績報告書を編集するという処理は完成しました。
次に、印刷処理の機能を作っていきます。
もちろん、一件毎の印刷はできるようにしますが、
一気に50件分を、ボタンひとつで印刷できれば、
時短につながる事間違いなし。
3日の仕事が5分で!・・・夢のような話です。
まだまだ細かい機能を追加していきます。
お楽しみに
2013年04月19日
VBA:いくらでもある事務改善パート2(5)
前回からの続きで
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善についてです。
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
テストをしてみましょう。
花子さんをダブルクリックします。
結果(実績報告書)
全体を載せていませんが、うまく編集されています。
これで、今回の処理の重要な部分が出来ました。
後は、細かい部分を付け加えて実際に使えるように作っていきます。
では
介護事業所(デイサービス)で作られる、介護予防実績報告書の事務改善についてです。
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
テストをしてみましょう。
花子さんをダブルクリックします。
結果(実績報告書)
全体を載せていませんが、うまく編集されています。
これで、今回の処理の重要な部分が出来ました。
後は、細かい部分を付け加えて実際に使えるように作っていきます。
では
Posted by ミール at
09:12
│Comments(0)
2013年04月16日
VBA:いくらでもある事務効率化パート2(4)
昨日の続きです。
対象者をプログラム側へ受け渡す仕組みはできました。
今日は、対象者を検索する部分のプログラムを考えてみます。
検索の基本パターンがありますので、そのまま載せたいと思います。
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
MsgBox obj & "実績ヒット"
Sheets("対象者名簿").Select
End If
End Sub
検索プログラムは「見つからなかった時」の処理を組み込まなければ
エラーでプログラムの処理自体が止り使いずらくなってしまいます。
なので、 If obj Is Nothing Thenの
処理が必要になってきます。
それでは、テストです。
対象者名簿から「花子さん」をダブルクリックします。
検索されました。
次に実績データがない、「五郎さん」をダブルクリックしてみましょう。
「実績がありません」のメッセージが表示されたのでOKです。
これで、対象者の検索迄うまくできました。
次回は、実績データを報告書に編集する部分を作ってみたいと思います。
では
対象者をプログラム側へ受け渡す仕組みはできました。
今日は、対象者を検索する部分のプログラムを考えてみます。
検索の基本パターンがありますので、そのまま載せたいと思います。
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
MsgBox obj & "実績ヒット"
Sheets("対象者名簿").Select
End If
End Sub
検索プログラムは「見つからなかった時」の処理を組み込まなければ
エラーでプログラムの処理自体が止り使いずらくなってしまいます。
なので、 If obj Is Nothing Thenの
処理が必要になってきます。
それでは、テストです。
対象者名簿から「花子さん」をダブルクリックします。
検索されました。
次に実績データがない、「五郎さん」をダブルクリックしてみましょう。
「実績がありません」のメッセージが表示されたのでOKです。
これで、対象者の検索迄うまくできました。
次回は、実績データを報告書に編集する部分を作ってみたいと思います。
では
2013年04月15日
VBA:いくらでもある事務改善パート2(3)
前回からの続きです。
処理概要は、対象者名簿から対象者をダブルクリックすると、「氏名」を元に
実績データを検索し、存在すれば実績報告書へ編集、なければ”メッセージ”を
表示するというものです。
ダブルクリックするとプログラムが起動するという仕組みを作りましょう。
作るといっても、すでに便利な命令が準備されています。
赤丸の箇所を選択してみてください。
この様な命令が自動的に出来ました。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
End Sub
ダブルクリックして起動するかテストしてみましょう。
そのままだと起動したのか、わからないので、
”OKですよ”というメッセージを表示させてみましょう。
Msgboxを入れます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MsgBox ("OKですよ")
End Sub
それでは、対象者名簿のシートを表示させ、シート上のどこでもいいですので、
ダブルクリックをしてみましょう。
メッセージが表示されました。
これで、ダブルクリックすると起動する仕組み作りができました。
しかし、起動するだけでは処理が正しく動きません。
プログラム側で対象者を特定する必要があります。
ここも、うまく考えられています。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
命令の下線部分"Target"でワークシート上のどこでダブルクリックされたか情報を受け取る事が
できます。
細かい説明は省きますが、
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
r = Target.Row
対象者 = Sheets("対象者名簿").Range("d" & r)
MsgBox (対象者)
End Sub
と記述し、対象者名簿の対象としたい方の行を選びダブルクリックしてみてください。
この場合は太郎さん。
対象者名が表示されました。
対象となる行のどこをダブルクリックしても、氏名が検索キーとなります。
これで、実績データを検索する対象者名が取得できました。
少し長くなったので、検索処理は後日書きたいと思います。
では
処理概要は、対象者名簿から対象者をダブルクリックすると、「氏名」を元に
実績データを検索し、存在すれば実績報告書へ編集、なければ”メッセージ”を
表示するというものです。
ダブルクリックするとプログラムが起動するという仕組みを作りましょう。
作るといっても、すでに便利な命令が準備されています。
赤丸の箇所を選択してみてください。
この様な命令が自動的に出来ました。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
End Sub
ダブルクリックして起動するかテストしてみましょう。
そのままだと起動したのか、わからないので、
”OKですよ”というメッセージを表示させてみましょう。
Msgboxを入れます。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
MsgBox ("OKですよ")
End Sub
それでは、対象者名簿のシートを表示させ、シート上のどこでもいいですので、
ダブルクリックをしてみましょう。
メッセージが表示されました。
これで、ダブルクリックすると起動する仕組み作りができました。
しかし、起動するだけでは処理が正しく動きません。
プログラム側で対象者を特定する必要があります。
ここも、うまく考えられています。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
命令の下線部分"Target"でワークシート上のどこでダブルクリックされたか情報を受け取る事が
できます。
細かい説明は省きますが、
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
r = Target.Row
対象者 = Sheets("対象者名簿").Range("d" & r)
MsgBox (対象者)
End Sub
と記述し、対象者名簿の対象としたい方の行を選びダブルクリックしてみてください。
この場合は太郎さん。
対象者名が表示されました。
対象となる行のどこをダブルクリックしても、氏名が検索キーとなります。
これで、実績データを検索する対象者名が取得できました。
少し長くなったので、検索処理は後日書きたいと思います。
では
Posted by ミール at
17:41
│Comments(0)