目次
前
次
出欠管理
講義、実習は授業の出席日数が不足していると
単位認定の前に試験受験資格の有無を判定する
必要が出ることもあります。
以下は、自分が担当したある教育機関での出欠
情報を入れたテキストファイルの内容。
201301,2,2,2,2,2,2,2,2,2,2,2,2,2,2
201302,1,2,2,2,2,2,2,2,2,2,2,2,1,2
201303,2,0,2,2,0,2,2,2,2,2,2,2,0,2
201304,1,1,2,2,2,2,2,3,2,2,2,2,2,2
201305,2,2,2,2,2,2,2,2,2,2,2,2,2,2
201306,2,2,2,3,2,2,2,0,2,2,2,2,2,2
201307,2,2,2,2,2,2,2,2,2,2,2,2,2,2
201308,2,2,2,2,2,2,2,2,2,2,2,2,2,2
201309,2,1,2,2,2,2,2,2,2,2,2,2,2,2
201310,2,2,1,2,2,2,2,2,2,2,2,2,2,2
201311,2,2,2,2,2,2,2,2,2,2,2,2,2,2
201312,2,2,2,2,1,2,2,2,2,2,2,2,2,2
201313,2,2,2,2,2,2,2,2,2,2,2,2,2,2
201314,2,2,2,2,2,2,2,0,2,2,2,2,2,2
201315,2,2,2,2,2,2,2,3,2,2,2,2,2,2
201316,2,2,2,2,2,2,1,2,2,2,2,2,2,2
201317,2,2,2,2,2,2,2,2,2,2,2,2,2,2
201318,2,0,0,3,2,2,2,2,2,2,2,2,2,2
201319,2,1,2,1,2,1,2,1,2,1,2,1,2,2
201320,2,3,2,2,2,2,2,2,2,2,2,2,2,2
数値の意味は、以下としています。
- 0 欠席
- 1 遅刻
- 2 出席
- 3 忌引き(その他)
CSV形式のテキストファイルの内容を
読み込むと、以下となります。
マクロを利用して、出席状況を把握してみます。
列に入れる情報を次のように固定。
- P列 欠席
- Q列 遅刻
- R列 出席
- S列 忌引き(その他)
項目名を21行に格納。
1行に関係するのは、4種の情報なので
4変数を用意し、B列からO列までスキャン
して計算後、結果をP列からS列に格納。
雛形は、以下でよいはず。
Dim objS As Object
Dim i As Byte
Dim ii As Byte
Dim absence As Byte
Dim delayed As Byte
Dim attend As Byte
Dim others As Byte
Dim xtmp As Byte
' clear
absence = 0
delayed = 0
attend = 0
others = 0
' set object pointer
objS = ThisComponent.CurrentController.ActiveSheet
' scan
For i = 0 to 13
' set pointer
ii = i + 1
ptr = objS.getCellByPosition(ii,0)
' get number
xtmp = ptr.Value
' judge
Select Case xtmp
Case 0 : absence = absence + 1
Case 1 : delayed = delayed + 1
Case 2 : attend = attend + 1
Case Else : others = others + 1
End Select
Next i
' store
objS.getCellByPosition(15,0).Value = absence
objS.getCellByPosition(16,0).Value = delayed
objS.getCellByPosition(17,0).Value = attend
objS.getCellByPosition(18,0).Value = others
1行についての操作ができたなら、全行に対して適用。
Dim objS As Object
Dim i As Byte
Dim ii As Byte
Dim j As Byte
Dim absence As Byte
Dim delayed As Byte
Dim attend As Byte
Dim others As Byte
Dim xtmp As Byte
' set object pointer
objS = ThisComponent.CurrentController.ActiveSheet
For j = 0 To 19
' clear
absence = 0
delayed = 0
attend = 0
others = 0
' scan
For i = 0 to 13
' set pointer
ii = i + 1
ptr = objS.getCellByPosition(ii,j)
' get number
xtmp = ptr.Value
' judge
Select Case xtmp
Case 0 : absence = absence + 1
Case 1 : delayed = delayed + 1
Case 2 : attend = attend + 1
Case Else : others = others + 1
End Select
Next i
' store
objS.getCellByPosition(15,j).Value = absence
objS.getCellByPosition(16,j).Value = delayed
objS.getCellByPosition(17,j).Value = attend
objS.getCellByPosition(18,j).Value = others
Next j
Calc用マクロにしたので、行列形式での位置を指定。
マクロに名前をつけて、サブルーチンにします。
Sub Calc()
Dim objS As Object
Dim i As Byte
Dim ii As Byte
Dim j As Byte
Dim absence As Byte
Dim delayed As Byte
Dim attend As Byte
Dim others As Byte
Dim xtmp As Byte
' set object pointer
objS = ThisComponent.CurrentController.ActiveSheet
For j = 0 To 19
' clear
absence = 0
delayed = 0
attend = 0
others = 0
' scan
For i = 0 to 13
' set pointer
ii = i + 1
ptr = objS.getCellByPosition(ii,j)
' get number
xtmp = ptr.Value
' judge
Select Case xtmp
Case 0 : absence = absence + 1
Case 1 : delayed = delayed + 1
Case 2 : attend = attend + 1
Case Else : others = others + 1
End Select
Next i
' store
objS.getCellByPosition(15,j).Value = absence
objS.getCellByPosition(16,j).Value = delayed
objS.getCellByPosition(17,j).Value = attend
objS.getCellByPosition(18,j).Value = others
Next j
End Sub
このマクロで、出欠の情報を求めると、以下。
出欠状態をデータにしてから、受験資格や
単位認定を考えるのは、別の話です。
FOR文を利用して繰返す場合、TOの右の値が最終値になります。
行と列のカウンタを、+1してしまうことがあるので注意が必要。
CalcからExcelのマクロに変換するには、Sheets、Cellsを利用した
置換で対応できます。
Sub Calc()
Dim i As Byte
Dim j As Byte
Dim absence As Byte
Dim delayed As Byte
Dim attend As Byte
Dim others As Byte
Dim xtmp As Byte
For j = 1 To 20
' clear
absence = 0
delayed = 0
attend = 0
others = 0
' scan
For i = 2 to 15
' get number
xtmp = Sheets(1).Cells(j,i).Value
' judge
Select Case xtmp
Case 0 : absence = absence + 1
Case 1 : delayed = delayed + 1
Case 2 : attend = attend + 1
Case Else : others = others + 1
End Select
Next i
' store
Sheets(1).Cells(j,16).Value = absence
Sheets(1).Cells(j,17).Value = delayed
Sheets(1).Cells(j,18).Value = attend
Sheets(1).Cells(j,19).Value = others
Next j
End Sub
目次
前
次