Excel給与データ→JDL年末調整取込データ変換マクロ

JDL年末調整を使う場合、Excelデータから取り込むと効率的です。
ただ、JDLの取込形式が特殊なので、マクロを使っています。

EX IT 1
※スクリーンショット+パワポで作成

Excelデータをいかに作るかが勝負

年末調整ソフトと給与計算ソフトが同じメーカーのものなら、データを連動させることができます。
ただ、同じメーカーのものを使っているとは限らず、Excelで給与計算をしていることも多いでしょう。

そんな場合は、Excel給与データを年末調整ソフトへ取り込めば効率的です。
同じメーカーのものを使ったほうが効率的なのですが、給与計算ソフトは高いものもあり、かといって使いやすいわけでもありません。
Excelでやったほうが楽な部分も多いです。

そのExcel給与データをいかにつくるかが勝負になります。
私の場合は、Excelで給与計算のしくみをつくりお客様に提供し、自分でも使っていますが、通常は、
・給与計算ソフトからExcelにする
・Excelに入力する
といった方法になるはずです。

一般的なこういったデータを前提にすすめていきます。
(氏名は、ランダムにつくりました)
WS000001

年末調整の最低限必要な給与データは、氏名、支給年月日、金額、社会保険の金額、所得税の金額(差し引いた金額)です。

JDL年末調整のデータ形式

データを取り込む場合は、取り込み先のソフトの形式をまず確認します。
ExcelのA列に何を入れて、B列に何を入れて・・・という形式です。

JDL(私の場合は組曲Major)の取り込み形式は、こうなっています。
(実際には生年月日、住所等のデータが入っています)
WS000002

給与データはどこに入っているかというと、このように横に並べるイケてない形式です。
(住宅ローン控除が手計算なのも嫌いです)
もちろん、ここに入力すれば取り込めるのですが、手間もかかります。
WS000003

一般的な形式のデータを取り込めるように変換しましょう。

Excel給料データ→JDL年末調整取り込みデータ変換マクロ

次の手順で取り込みます。

1 社員データの入力

まずは、JDLで社員データ(社員番号、氏名等)を入力します。
取り込み時に追加することもできますが、先に入力しておいたほうが楽です。
この段階では番号と氏名があれば問題ありません。

前年の繰越データがJDLにあれば、新入社員を追加すればすみます。

2 Excel給与データの準備

Excel給与データを準備します。
ここで大事なのは、
・Excel給与データとJDL年末調整ソフトと同じ社員番号であること
・Excel給与データが、社員番号、支給年月日、給料・賞与の順に並んでいること
・Excel給与データは、A列氏名、B列支給年月日、C列給与の金額、D列社会保険、E列所得税の並びであること(F列以降は自由です)
・年の途中で退職した社員のデータもあること
です。

並び順は、
Aさん 1月給料
Bさん 1月給料
Cさん 1月給料
・
・
・
Aさん 2月給料
Bさん 2月給料
Cさん 2月給料

そして、賞与がある場合は、
Aさん 12月給料
Bさん 12月給料
Cさん 12月給料
のあとに
Aさん 7月賞与
Bさん 7月賞与
Cさん 7月賞与
・
・
・
と並びます。

これは、JDLのデータがそういう並びだからです。
さらには、支給年月日、社会保険、所得税の順なので、これと合わせてExcelデータを準備します。
WS000003

退職者がいた場合にデータを削除すると行がずれますので、退職者分もデータを削らないようにしましょう。
たとえば、

Aさん 1月給料
Bさん 1月給料
Cさん 1月給料
・
・
・
Aさん 2月給料
Cさん 2月給料
というようにしないという意味です。

新入社員の場合は、1の社員データ入力をやっておけばマクロで自動的に取り込みます。

Excelがどんな並びでも、マッチングさせて年末調整データに貼り付ける方法もありますが、フォーマットに合わせてExcelデータを準備したほうがシンプルでわかりやすいです。
(非課税分、扶養控除人数は省略しています)

JDL取り込みデータの準備

JDL取り込みデータは、JDL年末調整の[8.ファイル管理]→[21.汎用データ出力]で準備できます。
EX IT 2

出力するのは[総合データ]です。
EX IT No 01

データには次のような特徴があります。
・手動でcsvに保存するなら、「CSV(カンマ区切り)」で保存する必要があります。

・データの最後の<総合データ終了>が必須です
EX IT 7

・取り込みは社員番号(社員C)で判断しています。氏名が一致するかは見ていません。
JDL年末調整ソフトにない社員番号を取り込むと追加します。

・データは上書きしますので、たとえば、JDLで生年月日、扶養親族の情報を入れていても、給料のみのデータ(生年月日、扶養親族等なし)を取り込むと上書きして消えてしまいます。
JDLで入力→データ出力→Excel給料データを貼り付ける→取り込むという流れでやりましょう。
もちろん、Excelで生年月日、住所等を編集できます。

マクロのしくみ

Excelデータで、1月分を選択してコピーし、JDL取り込みデータに貼り付ける。
これを12回+α(賞与分)繰り返せば、それでも済みますが、手間もかかりますし、毎年のことなので効率化しましょう。
(税理士で複数社だとそれだけ手間もかかります)
WS000004

プログラムはこんな感じです。

Sub 年末調整()

    
    '■選択範囲 First_Dataの初期値は2
    Dim First_Data
    Dim Last_Data
    
    First_Data = 2
    
    '■給与データ
    Dim w_Data
    Set w_Data = Worksheets("data")
    
    '■年末調整データ
    Dim w
    Set w = Worksheets("年末調整")
    
    '■年末調整データ貼り付け先 初期値は0
    Dim n
    n = 0
    
    '■いったんデータをクリア
    w.Range("fd6", "iu1000").Clear
    
    
    Dim i
    '2行目からデータ数だけ繰り返す
    For i = 2 To w_Data.Range("a" & w_Data.Rows.Count).End(xlUp).Row
        
        '支給年月日が同じものを選択して、コピー貼り付け
        If w_Data.Range("b" & i).Value < > w_Data.Range("b" & i + 1) Then
            Last_Data = i
            w_Data.Range("b" & First_Data, "e" & Last_Data).Copy w.Range("fd6").Offset(0, n)
            First_Data = Last_Data + 1
            n = n + 6
        End If

    Next
    
    
    '■年末調整データを新しいブックへコピー
    w.Copy
    
    
    '■import.csvという名称で、ファイルを保存
    Application.DisplayAlerts = False
    
      ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "¥import.csv", FileFormat:=xlCSV, local:=True
    
      ActiveWorkbook.Close
    
    Application.DisplayAlerts = True
    

End Sub

First_DataからLast_Dataまでを選択して貼り付けるしくみです。
First_Dataの初期値は2。
どこまで選択するかは、

If w_Data.Range("b" & i).Value < > w_Data.Range("b" & i + 1) Then

で、判定しています。
1つ下のセルと支払年月日が違えば・・という判定です。
この場合だと、セルB28(2017/1/25)とセルB29(2017/2/25)は違うので、「28」が選択する範囲の行ということになります。
EX IT 4

セルB2(First_Data)から、セルF28(Last_Data=28)をコピーして、

            w_Data.Range("b" & First_Data, "f" & Last_Data).Copy w.Range("fd6").Offset(0, n)

年末調整データのセルFD6に貼り付けます。
最初の1月分はFD6に貼り付けることになるからです。
このFD6は、そのあと、横にずらしていくので、Offsetを使っています。
Offset(0、6)なら、FD6から行は0、列を6ずらした位置に貼り付けられるというしくみです。

            w_Data.Range("b" & First_Data, "f" & Last_Data).Copy w.Range("fd6").Offset(0, n)

offset(0.n)と書いてあり、初期値はn=0と指定しているので、

最初に貼り付けるのは、Range(“fd6”).Offset(0, 0)、つまりセルFD6になります。
EX IT 6

1月を貼り付けたら、次は2月。
今度のFirst_Dataは、前回の28に1を足した29です。
これを
First_Data = Last_Data + 1
で表現しています。
EX IT 5

貼り付け先は6増えるので、
n = n + 6
と表現し、FJ6に貼り付けるというわけです。
EX IT 6

データはこのマクロファイルの保存場所と同じところに「import.csv」という名前でできます。
これをJDLで取り込みましょう。

EX IT 3

 

流れとしては、次のとおりです。

・JDLで社員データ整備
・JDLで住所、扶養、控除データの入力、チェック
・JDLからExcelにデータを出力
・11月の給料までのExcelデータを入れて、マクロでデータをつくり、取り込んでチェック
・12月の給料が決まったらExcelデータを準備(私はここにもマクロを使っています)
・JDLからExcelにデータを出力
・12月の給料(または賞与)までのExcelデータを入れて、マクロでデータをつくり、取り込んでチェック
・年末調整額を給与計算へ反映(JDLから[汎用データ出力]→[年税額・精算データ]で出力できます)


【編集後記】

昨日は、個別コンサルティング(提供する側)→ランレッスン(受ける側)→セミナー(受ける側)という1日。
間のランレッスンが日比谷公園だったので、個別コンサルティング後はランの格好で移動しました。

【昨日の1日1新】
※詳細は→「1日1新」

とあるセミナー参加
ラン マンツーマンレッスン 新しい方

【昨日の娘日記】

最近はお風呂上がるときに泣き叫びます。
もっと遊んでいたいのか。
シャンプーのときも泣き叫びますが。