VBAで給料明細を作成している最中ですが。。。
※シート※
入力シートに
名前 年齢 基本給 通勤手当 調整分 住民税
あい 20 19,000 1,320 230 13,098
かき 32 20,000,000 23,000 5,000 980
さし 32 60,000 7,800 800 6,090
たち 50 980,000 5,600 1,234 320
なに 66 1,600,000 9,000 390 9,809
入力シートにコマンドボタンがありクリックすると計算できるプログラムを組んでいます。
所得税のシートに
課税所得
超 以下 計算式
0 1,950,000 5% -
1,950,000 3,300,000 10% -97,500
3,300,000 6,950,000 20% -427,500
6,950,000 9,000,000 23% -636,000
9,000,000 18,000,000 33% -1,536,000
18,000,000 - 40% -2,796,000
というのがあり健康保険料というシートに
報酬月額 標準報酬月額 20歳以上40歳未満 40歳以上65歳未満
93000 以上 98,000 標準報酬月額*0.082/2 標準報酬月額*0.0933/2
というのがあり厚生年金のシートに
報酬月額 標準報酬月額 計算式
93000 以上 98000 標準報酬月額*0.14996/2
というのがあります。
それらのシートを使用してソースをさっぱりできないかなと思っています。
現在のソースは
------------------------------------------
j = 0
For i = 3 To n '所得税計算
atai = Worksheets("入力").Range("D" + CStr(i))
ReDim Preserve shotoku(j)
Select Case atai
Case 0 To 1950000
shotoku(j) = atai * 0.05
Case 1950000 To 3300000
shotoku(j) = atai * 0.1 - 97500
Case 3300000 To 6950000
shotoku(j) = atai * 0.2 - 427500
Case 6950000 To 9000000
shotoku(j) = atai * 0.23 - 636000
Case 9000000 To 18000000
shotoku(j) = atai * 0.33 - 1536000
Case Is >= 18000000
shotoku(j) = atai * 0.4 - 2796000
End Select
'健康保険料計算
age = Worksheets("入力").Range("C" + CStr(i))
ReDim Preserve kenko(j)
If Worksheets("入力").Range("D" + CStr(i)) < 98000 Then
kenko(j) = 0
Else
Select Case age
Case 20 To 39
kenko(j) = 98000 * 0.082 / 2
Case 40 To 64
kenko(j) = 98000 * 0.0933 / 2
End Select
End If
'厚生年金計算
ReDim Preserve nenkin(j)
If Worksheets("入力").Range("D" + CStr(i)) < 93000 Then
nenkin(j) = 0
Else
nenkin(j) = 98000 * 0.14996 / 2
End If
--------------------------------------------------
これをさっぱりとした簡潔なソースに仕上げたいです。
-------------------------------------------------
name = Format(Date, "ggge年m月分") & ".xls" '処理をした日の月で保存
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:= _
"C:\Documents and Settings\PC Users\デスクトップ\研修課題\" & name, FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Application.DisplayAlerts = True
---------------------------------------------------
入力シートに名前(B列)が書いてある数だけシートをコピーし貼り付けていくということをFor文で繰り返しているのですが保存が終了したあと再び処理をする場合のソースが知りたいです。
例)最初に5件分の給料明細書を作成し保存
→その後3件分になり再び処理をする場合前のもの(2件分)のシートが残ったままになっています。その2件分のものを消す処理のプログラムを組みたいのでよろしくお願いします。
説明不足だったり意味不明なところがあれば聞いてください。
解りづらい説明かもしれませんが2件の処理の仕方をよろしくお願いします。