取材の依頼Excelマクロで給与一覧表から給与明細へ転記Excelマクロ・VBA入門TwitterFacebook0はてブ1Pocket14LINE2019.01.10給与計算をExcelでやる場合、明細を転記する部分でExcelマクロを使えます。Excelで複数人の給与明細をつくるマクロExcelで給与明細をつくる流れExcelで給与計算するのは、それなりに難易度が難しいものです。難易度4と考えています。Excelでおすすめしているのは、難易度3までです。(本に書いているのもその基準です)給与計算ソフトを入れたほうが早い場合もあります。それでも、Excelでやりたいという場合(給与計算ソフトは意外と高いですし)、Excelマクロを使う方法があります。Excelマクロでつくるなら、給与一覧表をつくってそれを明細に転記する方法がおすすめです。それぞれの給与明細に入力していく方法もありますが、ミスの可能性もあり、手間もかかります。本来は給与データ形式にして、それを集計、明細にするほうがいいのですが、現場のつかいやすさも考えて、今はこの形式でやっていることが多いです。計算式を入れて計算できるようにしましょう。今回のサンプルファイルでは合計や差引しか入れていません。変更回数も少なく、計算でやるとそれなりに大変なので(標準報酬をデータとして準備する必要)、入力のほうが楽でしょう。(私は計算しています)時間外手当は、時間数を入れると計算してできるようにしておくと楽です。一覧表のExcelファイルにテンプレート(ひな形)として、給与明細を準備しましょう。どんな形式でもかまいません。このテンプレートを変更すると、マクロも変更しなければいけなくなるので、一度決めたら変更しなくていいようにしておきましょう。この場合、一覧表の金額をそのまま転記できるようにしておくと、マクロを書くのも楽ですし、メンテナンスも楽です。いった明細テンプレートだと、そのまま転記できず、マクロの手間も増えます。使う方の意見や使い勝手とプログラミングのしやすさをどのくらいすり合わせるかは大事です。これをやらないと、どちらかが不幸になります。New!強みづくり過去記事一覧(直近365)■スポンサードリンクExcelで1人分の給与明細をつくるマクロつくるのは、給与一覧表から明細へ転記するマクロです。1人分でつくっていきます。給与一覧表をセット給与一覧表から明細へ転記する際、その給与一覧表は月ごとです。シート名としては、1月、2月、3月...となります。(年ごとにシートを分ける場合)シート名はその都度(毎月)変わるので、「そのシート」と指定し、セットしておくと毎月が便利です。「そのシート」というのは、ActiveSheet。マクロを実行するシート=そのシート=その月のシートとなります。※緑色の文字は、コメントで自由に書け、プログラムの実行に影響ありません。W_sという箱をつくり、そこに「そのシート」を入れていくという手順です。この箱には、1月、2月、3月・・・とマクロを実行するときに選択していたシートが入ります。シートを選択してマクロを実行すれば、これ以降は、W_sが「そのシート」になります。次に、テンプレートのシート「meisai」をコピーします。書くと新しいブックにコピーしてくれます。給与明細書は、このあと、プリントアウトなりPDFにするなりして(どちらもマクロに組み込むことはできます)、Excelファイルとしては保存しないのがおすすめです。無駄にファイルが増えるので。給与一覧表が残っていれば、十分です。転記データを転記していきます。〇=△で、「〇に△を転記する」という意味ですので、それぞれのシートの対応を見ながら、書いていきましょう。1つ書いてコピーすると楽です。そのシートのセルA3にW_s(この場合は、シート「1月」のセルA1を転記するという意味です。同じように書いていきましょう。転記部分はこうなります。最後に、シート名を氏名にしておきましょう。ここまでできたら、実行してみて、正しく転記されているかを確認し、できていれば、他のデータの部分をつくっていきます。□Nextと書きます。Colが〇から△まで、□を繰り返すというもの。Colは列の意味の箱で、任意です。サンプルでは、5人、列で言えば、3列目から7列目までデータがあります。〇から△までの〇は3△は7です。□の部分は、これまで書いたものを入れていきます。一覧表をセットする部分は、繰り返さないので、こう書きましょう。□の部分は切り取って(Ctrl+X)、インデント(選択してTab)をつけておくと見やすくなります。Colが3、4、5、6、7と変化していく状態をプログラムに判定していきます。部分のa1はそのままです。セルC2は、D2、E2、F2・・・と変わっていくはずです。実は、横方向にデータが増えていくのは好ましくなりませんが、使い勝手を考えてこの事例では、この形式にしています。横、列方向にデータが増えていくなら、RangeではなくCellsを使う方法もありますが、普段のわかりやすさからRangeをおすすめしているところです(列に増えるならCellsという切り替えもできますが)。Rangeの場合ならOffsetを組み合わせます。Offsetは、Range(”c2”).Offset(0,1).Valueで、行に0、列に1増やした場所を指定できるものです。Range(”c2”).Offset(0,0).Valueだと、セルC2Range(”c2”).Offset(0,1).Valueだと、セルD2Range(”c2”).Offset(0,2).Valueだと、セルE2となります。このように書き換えましょう。コピペでやると楽です。この場合、繰り返す範囲は、3から7だと都合が悪くなります。0から4に書き換えましょう。これで実行してみると、うまくいきません。毎回、新しいブックへコピーしているからです。最初のデータ(Colが0)のときは、新しいブックへコピー、そうでないときは、そのブック内でシートをコピーというように条件で処理を分けます。;これですべてのデータで明細ができるはずです。社員が増えたり減ったりしたらどうでしょう。毎回、プログラムを変えなければいけません。ならないように、このように書き換えます。データがある列をカウントするプログラムです。Excelの一番右の列は、XFD列ですのでセルXFD2からCtrl+左を押したときに選択される列、つまりデータが入っている最後の列を指定できます。(厳密には、バージョンによってXFDが最大列ではなく、今後増える可能性もあるので別の書き方をします)ただ、サンプルのままだと、この最大列は、7と出てしまいます。繰り返したいのは、0から4までなので、7から3を引く必要があるので、このようにしているのです。0から5まで繰り返します。このようにデータの数だけ明細ができればOKです。・1人ずつPDFにする・賞与の場合は、明細のタイトルを変えるといったマクロも組み込んで使っています。サンプルはこちらです。給与明細転記.xlsmシートのボタンをクリックするとマクロが実行されます。記事を読みながら書いてみることをおすすめします。日中にふとみかけたコートがよさげで買おうかと考えて、夜にも家族で行ってみましたが、やっぱりNG。気に入ったのがなくて探しているところです。昨日のご飯は、アクアパッツァ。あさり大好きな娘が喜ぶかと思い。あさりは大喜びで全部ひとりで食べるくらいでした。スープをかけたご飯もお気に入りで。鯛はそっちのけでしたが。税金をコンビニ払い(コンビニ納付)。QRコード払いでもキャッシュレスじゃない。よういち)「ひとりしごと」=雇われない雇わない生き方を、時間・お金の両面でサポート。『税理士のためのRPA入門』『やってはいけないExcel』など14冊。日課は1日1新、ブログ。