Option Explicit '給与/賞与クラス 'プロパティは、メンバー以外アクセスできない 'プロパティの実体 Private mlngPID As Long '主キー Private mlngFID As Long '外部キー Private mintKubun As Integer '支給区分;「0」給与;「1」賞与 Private mdatDate As Date '支給年月日 Private mlngKingaku() As Long '金額 '(0)基本給 '(1)職務手当 '(2)技能手当 '(3)家族手当 '(4)住宅手当 '(5)残業手当 '(6)手当1 '(7)手当2 '(8)手当3 '(9)手当4 '(10)手当5 '(11)通勤手当 '(12)健康保険 '(13)厚生年金 '(14)介護費用 '(15)雇用保険 '(16)源泉所得税 '(17)控除1 '(18)控除2 '(19)控除3 '(20)控除4 '各種金額合計 Public Sub DataSum(ParamArray vntArray() As Variant) '引数[objWS]:ワークシート '引数[lngRow]:レコード '引数[vntArray]:公開 Dim i As Integer '整数型カウンタ '課税金額 For i = 0 To 10 vntArray(0) = vntArray(0) + mlngKingaku(i) Next '源泉所得税 vntArray(1) = vntArray(1) + mlngKingaku(16) '非課税金額 vntArray(2) = vntArray(2) + mlngKingaku(11) '健康保険 vntArray(3) = vntArray(3) + mlngKingaku(12) '厚生年金 vntArray(4) = vntArray(4) + mlngKingaku(13) '介護費用 vntArray(5) = vntArray(5) + mlngKingaku(14) '雇用保険 vntArray(6) = vntArray(6) + mlngKingaku(15) '控除額合計 For i = 12 To 20 vntArray(7) = vntArray(7) + mlngKingaku(i) Next End Sub '支払明細書へデータをかき出し Public Sub MoveData3(ByVal objws As Worksheet) '引数[objWS]:ワークシート '引数[lngRow]:レコード Dim i As Integer '整数型カウンタ objws.Cells(3, 2).Value = mlngFID For i = 0 To 20 If i < 12 Then objws.Cells(6, i + 1).Value = Format$(mlngKingaku(i), "#,##0") ElseIf i > 11 Then objws.Cells(9, i - 11).Value = Format$(mlngKingaku(i), "#,##0") End If Next End Sub '月別集計一覧表を集計 Public Sub MoveData2(ByVal objws As Worksheet, ByVal lngRow As Long, ByVal lngNum As Long) '引数[objWS]:ワークシート '引数[lngRow]:レコード '引数[lngNum]:レコード Dim i As Integer '整数型カウンタ Dim j As Integer '整数型カウンタ '支給日 objws.Cells(2, 2).Value = Format$(mdatDate, "yyyy/mm") For i = 1 To 22 If i = 1 Then With objws.Cells(lngRow, i) .Value = mlngFID If lngNum Mod 2 = 0 Then '2行ごとに網掛け With .Interior .ColorIndex = 37 .Pattern = xlSolid End With End If End With ElseIf i > 1 And i < 14 Then With objws.Cells(lngRow, i) .Value = Format$(mlngKingaku(i - 2), "#,##0") If lngNum Mod 2 = 0 Then '2行ごとに網掛け With .Interior .ColorIndex = 37 .Pattern = xlSolid End With End If End With ElseIf i > 13 Then With objws.Cells(lngRow + 1, i - 12) .Value = Format$(mlngKingaku(i - 2), "#,##0") If lngNum Mod 2 = 0 Then '2行ごとに網掛け With .Interior .ColorIndex = 37 .Pattern = xlSolid End With For j = 10 To 13 '余白に網掛け With objws.Cells(lngRow + 1, j).Interior .ColorIndex = 37 .Pattern = xlSolid End With Next End If End With End If Next End Sub '賃金台帳を集計 Public Sub MoveData(ByVal objws As Worksheet, ByVal Target_Year As Integer) '引数[objWS]:ワークシート Dim i As Long '長整数型カウンタ Dim j As Integer '支給月 Dim k As Integer '支給年 '支給年 k = Year(mdatDate) '支給月の取得 j = Month(mdatDate) If k = Target_Year Then '給与 If mintKubun = 0 Then For i = 3 To 25 If i = 3 Then objws.Cells(i, j + 1).Value = Format$(mdatDate, "mm/dd") ElseIf i > 3 And i < 16 Then objws.Cells(i, j + 1).Value = Format$(mlngKingaku(i - 4), "#,##0") ElseIf i > 16 Then objws.Cells(i, j + 1).Value = Format$(mlngKingaku(i - 5), "#,##0") End If Next '賞与 ElseIf mintKubun = 1 Then j = objws.Cells(29, 256).End(xlToLeft).Column For i = 28 To 37 If i = 28 Then objws.Cells(i, j + 1).Value = Format$(mdatDate, "mm/dd") ElseIf i = 29 Then objws.Cells(i, j + 1).Value = Format$(mlngKingaku(i - 29), "#,##0") ElseIf i > 29 Then objws.Cells(i + 1, j + 1).Value = Format$(mlngKingaku(i - 18), "#,##0") End If Next End If End If End Sub 'プロパティの値の取得 Public Sub LetProperty(ByVal objws As Worksheet, ByVal lngRow As Long, ParamArray vntArray() As Variant) '引数[objWS]:ワークシート '引数[lngRow]:レコード '引数[vntArray]:データ Dim i As Integer '整数型カウンタ mlngPID = CLng(vntArray(0)) mlngFID = CLng(vntArray(1)) mintKubun = CInt(vntArray(2)) mdatDate = CDate(vntArray(3)) For i = 0 To 20 mlngKingaku(i) = CLng(vntArray(i + 4)) Next 'ワークシートへ書き出し Call LetData(objws, lngRow) End Sub 'プロパティの値の公開 Public Sub GetProperty(ByVal objws As Worksheet, ByVal lngRow As Long, ParamArray vntArray() As Variant) '引数[objWS]:ワークシート '引数[lngRow]:レコード '引数[vntArray]:データ Dim i As Integer '整数型カウンタ 'ワークシートの値 Call GetData(objws, lngRow) vntArray(0) = mlngPID vntArray(1) = mlngFID vntArray(2) = mintKubun vntArray(3) = mdatDate For i = 0 To 20 vntArray(i + 4) = mlngKingaku(i) Next End Sub 'ワークシートの値の取得 Private Sub GetData(ByVal objws As Worksheet, ByVal lngRow As Long) '引数[objWS]:ワークシート '引数[ingRow]:レコード Dim i As Integer '整数型カウンタ Const bytCol As Byte = 1 'フィールド mlngPID = CLng(objws.Cells(lngRow, bytCol).Value) mlngFID = CLng(objws.Cells(lngRow, bytCol + 1).Value) mintKubun = CInt(objws.Cells(lngRow, bytCol + 2).Value) mdatDate = CDate(objws.Cells(lngRow, bytCol + 3).Value) For i = 0 To 20 mlngKingaku(i) = CLng(objws.Cells(lngRow, bytCol + i + 4).Value) Next End Sub 'ワークシートへ書き出し Private Sub LetData(ByVal objws As Worksheet, ByVal lngRow As Long) '引数[objWS]:ワークシート '引数[ingRow]:レコード Dim i As Integer '整数型カウンタ Const bytCol As Byte = 1 'フィールド objws.Cells(lngRow, bytCol).Value = mlngPID objws.Cells(lngRow, bytCol + 1).Value = mlngFID objws.Cells(lngRow, bytCol + 2).Value = mintKubun objws.Cells(lngRow, bytCol + 3).Value = mdatDate For i = 0 To 20 objws.Cells(lngRow, bytCol + i + 4).Value = mlngKingaku(i) Next End Sub 'クラスのインスタンス時 Private Sub Class_Initialize() '配列再定義 ReDim Preserve mlngKingaku(20) As Long End Sub 'クラスの開放 Private Sub Class_Terminate() '配列の開放 If IsEmpty(mlngKingaku) = True Then Erase mlngKingaku End Sub