エクセルで業務ソフトを作るためのVBA無料初級講座です
給料計算ソフトを例に、その制作方法を紹介していきます
独学でどんな業務ソフトでも作れようになれる!かも
マイクロソフトライセンスセンター
初めてご来場の方は、ステップの「00 はじめに」をご覧ください

2007年10月25日

19-1 仕組み

18-2ステップで考えたように、明細書を印刷する仕組みは図のようにすることにします。
18_2.gif
@累積シートから指定年月日のデータを抽出シートにコピーする
A抽出シートから4人分を明細書シートのAA1セルにコピーする
B明細書シートを印刷する
C抽出シートに戻って次の4人分を選択して、ABを繰り返す

今回のマクロではCの同じ作業を繰り返すという部分が新しいテクニックです。長いマクロになるかも知れませんが、@から順番に、コツコツと作っていけば必ずできるはずです。
posted by 1440kb at 09:20| Comment(0) | TrackBack(0) | 19 個人別明細書マクロ | このブログの読者になる | 更新情報をチェックする

2007年10月26日

19-2 累積シートから抽出

@の「累積積シートから指定年月日のデータを抽出シートにコピーする」という命令は給料計算書のマクロと同じようなものです。
(参考)15〜16ステップ
マクロはコピーして再利用できますので、Sub 給料計算書()を見てみましょう。
19_2a.gif
赤線の範囲が利用できそうです。[給料計算書]では抽出したデータを作業シートに貼り付けまたが、その部分を抽出シートに換えるだけです。
■sub 給料計算書()のEnd Subの数行下に「sub 明細書()」と入力して、[Enter]キーを押してください。
(注意)End Subが自動で入力されるはずですが、自動入力されない場合は数行下に「End Sub」と入力してください。
■上図を参考にしてsub 給料計算書()の赤線部分のコードを囲んでコピーして、それをsub 明細書()に貼り付けてください。
19_2b.gif
■図を参考にして、「作業」を「抽出」に変更してください。
以上で、sub 給料計算書()を利用して簡単にsub 明細書()のスタート部分ができました。
■sub 明細書()を実験してみますので、抽出シートのデータをすべて消去してください。
MENUシートの[個人別明細書]ボタンにsub 明細書()を登録して、動きを確認してください。
(参考)ボタンにマクロを登録する方法は09-5ステップで紹介しています。
posted by 1440kb at 09:11| Comment(0) | TrackBack(0) | 19 個人別明細書マクロ | このブログの読者になる | 更新情報をチェックする

2007年10月29日

19-3 抽出シートから明細書へ

前のステップで@の「累積積シートから指定年月日のデータを抽出シートにコピーする」ができました。次のAとBは抽出シートから4人分を明細書にコピーして、印刷プレビューすればいいわけですから、これまで一連で勉強してきた方にとってはそれほど難しくはないと思います。
手順は、
1.抽出シートを選択する
2.A2セルからBM5セルまでを選択してコピーする
3.明細書シートを選択する
4.AA1セルに値のみ貼り付ける
5.印刷プレビューする
18_2.gif

AとBの部分を記録マクロで作りますので、準備します。
■抽出シートを開いて、A2セルが見えている状態にしてください。
■明細書シートのAA列以降のデータを消去してください。
■明細書シートのAA1セルが見えている状態にしてください。
(参考)作業するセルを見えている状態にしておかないと、スクロールするというコードも記録されてしまいます。記録マクロでは、余計なコードを記録させないための工夫が必要です。

記録マクロを始めます。
■ツール、マクロ、新しいマクロの記録を選択してください。
■マクロ名に「明細書シートにコピーして印刷プレビューする」と入力して[OK]を押してください。
(注意)以下マクロの記録中ですので、余計な操作を行わないでください。
■抽出シートを選択する
■A2セルからBM5セルを選択して、コピーする
■明細書シートを選択する
■AA1セルを選択して、値のみ貼り付ける
■印刷プレビューする
■抽出シートを選択する
■ツール、マクロ、記録終了を選択する
19_3a.gif

マクロができましたので実験してみます。
■明細書シートのAA列からCM列のデータを消去してください。
■Sub 明細書シートにコピーして印刷プレビューする()を実行してみてください。
posted by 1440kb at 09:16| Comment(0) | TrackBack(0) | 19 個人別明細書マクロ | このブログの読者になる | 更新情報をチェックする

2007年10月30日

19-4 繰り返し

Sub 明細書シートにコピーして印刷プレビューする ()は1人目から4人目までを印刷するマクロです。5人目以降も同じように印刷できないと使い物にはなりません。例えば、社員が23人の場合は、自動で6枚印刷されないといけません。また、100人でも自動処理できないといけません。
ある処理を繰り返し何度もおこなうには、For...NextまたはDo...Loopを使います。For...Nextは指定した回数繰り返すことができますので、あらかじめ回数がわかっているときに使います。例えば社員が23人の場合は、23÷4=5.75なので「6回繰り返ししないさい」という命令をすればいいわけです。
For j = 1 To 6
  繰り返す処理
Next j
(参考)jはカウンタ変数といって、aでもbでもかまいませんが、ForとNextの後には同じものを入力しなければいけません。10回繰り返すにはFor j = 1 To 10と書きます。

Do...Loopは条件に合う間何回でも繰り返しますので、回数がわからないような場合に使います。1枚印刷が終わったら次の4人分を印刷して、データがなくなるまでそれを繰り返すという考え方です。Do...Loopには2種類の書き方があります。条件に合う「間」繰り返す場合はDo While、条件に合う「まで」繰り返す場合はDo Untilを使います。少しややこしく感じますが、この二つは条件の書き方次第でどちらでも使えます。「データがある間繰り返す」と「データがなくなるまで繰り返す」とは同じことですね。
Do WhileとDo Untilは考えやすい方で使い分けますが、繰り返す方法を日本語で書いてみればよくわかります。今回の場合は、「抽出シートのデータがなくなるまで繰り返す」という文章が思い浮かびますので、Do Untilの方が考えやすいようです。
Do Until 条件
  繰り返す処理
Loop
posted by 1440kb at 09:09| Comment(0) | TrackBack(0) | 19 個人別明細書マクロ | このブログの読者になる | 更新情報をチェックする

2007年10月31日

19-5  ForかDoか

For...NextかDo...Loop、どちらを使うかはケースバイケースですが、今回の場合に当てはめてもう少し考えてみます。抽出シートのデータを4人分ずつ印刷したいと思っています。まず始めに抽出シートの最初の4人分を選択して、明細書シートにコピーして印刷します。印刷が終わったら抽出シートに戻って次の4人分をコピーして印刷します。以下は繰り返しです。
前のステップで紹介したように、For...Nextは回数を指定するため、For...Next の前に下記のように書いて回数を決定する必要があります。
my = Application.RoundUp((Application.CountA([抽出!A:A]-1)/4), 0)
For j = 1 To my
  繰り返す処理
Next j
(参考)myは変数といってxでもyでもかまいません。変数に格納された値はその後どこでも使用することができます。

一方のDo...Loopは回数の計算が必要ないのでシンプルに書けそうです。
Do While 条件(選択範囲内にデータがある)
  繰り返す処理
Loop
または、
Do Until 条件(選択範囲内にデータがない)
  繰り返す処理
Loop
ForかDoかを考えて、今回はDoにすることにしました。更にDo WhileかDo Untilを考えて、今回はDo Untilを使うことにしました。
posted by 1440kb at 09:06| Comment(0) | TrackBack(0) | 19 個人別明細書マクロ | このブログの読者になる | 更新情報をチェックする

2007年11月01日

19-6 Do Until

Do Until 条件(選択範囲内にデータがない)
  繰り返す処理
Loop
を具体的に考えていきます。

繰り返すのは5人目以降なので、最初の4人分を選択する命令はDo...Loopには含めません。Sub 明細書シートにコピーして印刷プレビューする()を図のように改良できそうです。
改良前
19_3a.gif
改良後
19_6a.gif
コンピュータは上から下に向かってコードを実行していきます。このマクロを実行すると、
01行目 抽出シートを選択する
02行目 最初の4人分を選択する
03行目 アクティブセルが空白になるまで繰り返す
04行目 選択中のデータをコピーする
05行目 明細書シートを開く
06行目 AA1セルを選択する
07行目 選択中のセルに値のみ貼り付ける
08行目 クリップボードをクリアする
09行目 印刷プレビューする
10行目 抽出シートを開く
11行目 選択範囲を下に4行ずらす
12行目 3行目に戻って、条件を判断する
という仕組みで繰り返すことになります。よって、11行目の「選択範囲を下に4行ずらす」という命令を付け加える必要があるわけです。

■図を参考にして、Sub 明細書シートにコピーして印刷プレビューする()にDo Untilを使って印刷を繰り返す機能を加えてください。
■Sub 明細書シートにコピーして印刷プレビューする()を実行して動きを確認してください。
posted by 1440kb at 09:17| Comment(0) | TrackBack(0) | 19 個人別明細書マクロ | このブログの読者になる | 更新情報をチェックする

2007年11月02日

19-7 マクロの合体

Sub 明細書()の「累積積シートから指定年月日のデータを抽出シートにコピーする」という部分は既に19-2ステップで作りました。それに19-6ステップで作った「明細書シートにコピーして印刷プレビューを繰り返す」という部分を付け加えます。
マクロの合体には、埋め込むマクロ名を書き足す方法と、埋め込むコードを書き足す方法があります。通常は作業が簡単なマクロ名を書き足す方法をとりますが、今回は一連の流れが見やすいように「コードを書き足す」方法をとることにします。
19_7.gif
■図を参考にして、Sub 明細書()の最下行にSub 明細書シートにコピーして印刷プレビューする()のコードをコピーしてください。
MENUシートの[個人別明細書]ボタンを押して、動きを確認してください。
posted by 1440kb at 09:22| Comment(0) | TrackBack(0) | 19 個人別明細書マクロ | このブログの読者になる | 更新情報をチェックする

2007年11月05日

19-8 後処理の追加

前のステップまでの作業で、繰り返して印刷できるようになったと思います。でもまだ安心はできません。例えばH19.8.25の個人別明細書を実行した後で、データが1件しかないH19.4.25の個人別明細書を実行すると、余計なものまで印刷されているはずです。これはH19.8.25の処理が終わった後に、抽出シートのデータを消去していないからです。
■図を参考にして、Sub 明細書()の最下行に「抽出シートの全データを消去し、MENUシートに戻って年月日セルを選択する」という命令を加えてください。
19_8.gif
■[個人別明細書]を実行して動きを確認してください。
posted by 1440kb at 09:14| Comment(0) | TrackBack(0) | 19 個人別明細書マクロ | このブログの読者になる | 更新情報をチェックする