Option Explicit '社会保険月額算定届プログレスバー Private mobjWS() As Worksheet 'ワークシート 'mobjWS(0):ThisWorkbook:Sheet6 'mobjWS(1):Sheet2:社員情報 'mobjWS(2):Sheet5:給与賞与情報 'mobjWS(3):Sheet1:基礎情報 Private mclsSyain As clsList '社員クラス Private mclsSyakai As clsSantei '社会保険クラス Private mclsKyuyo As clsSalary '給与賞与クラス Private mlngRow As Long '社員数 Private ma() As Variant 'データ 'OKボタン Private Sub cmdOK_Click() Unload Me Call mdlPrint.PrintSyakai End Sub 'フォーム表示されたら Private Sub UserForm_Activate() Call Syukei Me.lblMsg.Caption = "印刷の準備が整いました..." If Me.cmdOK.Visible = False Then Me.cmdOK.Visible = True End Sub 'フォームロード時 Private Sub UserForm_Initialize() Call NewData End Sub 'フォームクローズ時 Private Sub UserForm_Terminate() Dim i As Integer '配列の開放 If IsEmpty(ma) = True Then Erase ma 'クラスの開放 Set mclsSyain = Nothing Set mclsSyakai = Nothing Set mclsKyuyo = Nothing 'オブジェクトの開放 For i = 0 To 3 Set mobjWS(i) = Nothing Next End Sub '集計 Private Sub Syukei() Dim intNen As Integer '対象年 Dim lngRow As Long 'データ数 Dim lngID As Long '社員ID Dim i As Long '長整数型カウンタ Dim j As Long '長整数型カウンタ Const intMay As Integer = 5 '5月 Const intJune As Integer = 6 '6月 Const intJuly As Integer = 7 '7月 Const intKubun As Integer = 0 '給与「0」;賞与「1」 '対象年 intNen = Year(CDate(mobjWS(3).Cells(3, 1).Value)) 'データ数 lngRow = mobjWS(2).Cells(65536, 1).End(xlUp).Row For i = 1 To mlngRow Call SyainList(i) lngID = mclsSyain.id mclsSyakai.FID = lngID For j = 1 To lngRow If lngID = CLng(mobjWS(2).Cells(j, 2).Value) Then If intKubun = CInt(mobjWS(2).Cells(j, 3).Value) Then If intNen = Year(CDate(mobjWS(2).Cells(j, 4).Value)) Then If intMay = Month(CDate(mobjWS(2).Cells(j, 4).Value)) Then Call KyuyoData(lngID) mclsSyakai.MayData = ma(0) + ma(2) ElseIf intJune = Month(CDate(mobjWS(2).Cells(j, 4).Value)) Then Call KyuyoData(lngID) mclsSyakai.JuneData = ma(0) + ma(2) ElseIf intJuly = Month(CDate(mobjWS(2).Cells(j, 4).Value)) Then Call KyuyoData(lngID) mclsSyakai.JulyData = ma(0) + ma(2) End If End If End If End If mclsSyakai.LetProperty mobjWS(0), i + 3 mobjWS(0).Cells(i + 3, 1).Value = mclsSyain.Name Call BarPrint(mlngRow, i) DoEvents Next mclsSyakai.MayData = 0 mclsSyakai.JuneData = 0 mclsSyakai.JulyData = 0 Next End Sub '給与賞与データの取得 Private Sub KyuyoData(ByVal lngFID As Long) '引数[lngFID]:社員ID Dim lngRow As Long 'レコード Dim i As Long '長整数型カウンタ Dim j As Long 'データ数 '配列再定義 ReDim ma(24) As Variant '対象デコードの取得 j = mobjWS(2).Cells(65536, 1).End(xlUp).Row For i = 1 To j If lngFID = CLng(mobjWS(2).Cells(i, 2).Value) Then lngRow = i: Exit For Next 'aはダミー mclsKyuyo.GetProperty mobjWS(2), lngRow, ma(0), ma(1), ma(2), ma(3), ma(4), ma(5), ma(6), ma(7), ma(8), ma(9), ma(10), ma(11), _ ma(12), ma(13), ma(14), ma(15), ma(16), ma(17), ma(18), ma(19), ma(20), ma(21), ma(22), ma(23), ma(24) 'ダミーデータ初期化 For i = 0 To 24 ma(i) = 0 Next mclsKyuyo.DataSum ma(0), ma(1), ma(2), ma(3), ma(4), ma(5), ma(6), ma(7) End Sub '社員情報の取得 Private Sub SyainList(ByVal lngRow As Long) '引数[lngRow]:レコード mclsSyain.GetData mobjWS(1), lngRow, 1, 1, 1 End Sub '進行状況の表示 Private Sub BarPrint(ByVal x As Long, ByVal y As Long) '引数[x]:総数 '引数[y]:回数 Const z As Integer = 200 'ラベルの長さ If x = 0 Or y = 0 Then x = 1 y = 1 End If Me.lblBar2.Width = Int(CDbl(z * (y / x))) Me.lblMsg.Caption = y & "/" & x & Chr(32) & "処理中..." End Sub '既定値 Private Sub NewData() '配列再定義 ReDim mobjWS(3) As Worksheet 'ワークシート Set mobjWS(0) = ThisWorkbook.Worksheets("Sheet6") Set mobjWS(1) = Workbooks(gstrName).Worksheets("Sheet2") Set mobjWS(2) = Workbooks(gstrName).Worksheets("Sheet5") Set mobjWS(3) = Workbooks(gstrName).Worksheets("Sheet1") '社員数の取得 mlngRow = mobjWS(1).Cells(65536, 1).End(xlUp).Row 'クラスのインスタンス Set mclsSyain = New clsList Set mclsSyakai = New clsSantei Set mclsKyuyo = New clsSalary With Me.lblBar2 .Width = 0 .BackColor = RGB(0, 0, 255) End With Me.cmdOK.Visible = False End Sub