Option Explicit
Public sMsgString As String
'抽選のメイン関数
Public Sub selectPersonMain()
Dim lSelectNo As Long
Call checkPersonList
If checkPersonList = True Then
Call getSelectNo(lSelectNo)
Call setSelectPerson(lSelectNo)
sMsgString = "抽選結果が出ました!!"
End If
' MsgBox sMsgString
End Sub
'引数 lSelectNo Long 参照渡し 当選した人の行数
'リストの数の中で、生成した乱数に一致する行数を取得
Private Sub getSelectNo(ByRef lSelectNo As Long)
Dim lMax As Long
Dim lMin As Long
'一覧の最終行を乱数の最大値にセット
lMax = Cells(Rows.Count, 4).End(xlUp).Row
'乱数の最小値
lMin = 90
'乱数初期化
Randomize
'最小値から最大値の範囲で乱数を生成
lSelectNo = Int((lMax - lMin + 1) * Rnd + lMin)
End Sub
'引数 lSelectNo Long 値渡し 当選した人の行数
'当選した人の情報を当選者欄にセット
Private Sub setSelectPerson(ByVal lSelectNo As Long)
'見た目に動いているようにリストを上から最後まで程よい時間で表示させる
Dim i As Long
Dim l As Long
Dim lMax As Long
lMax = Cells(Rows.Count, 4).End(xlUp).Row
For l = 5 To 5
For i = 90 To lMax
Application.Wait [Now()] + 0.0000001 / 86400
Worksheets("Sheet1").Range("D5").Value = Worksheets("Sheet1").Cells(i, 3).Value
Worksheets("Sheet1").Range("E5").Value = Worksheets("Sheet1").Cells(i, 4).Value
Worksheets("Sheet1").Range("E6").Value = Worksheets("Sheet1").Cells(i, 5).Value
Next i
Next l
Worksheets("Sheet1").Range("D5").Value = Worksheets("Sheet1").Cells(2, 3).Value
Worksheets("Sheet1").Range("E5").Value = Worksheets("Sheet1").Cells(2, 3).Value
Worksheets("Sheet1").Range("E6").Value = Worksheets("Sheet1").Cells(2, 3).Value
'Noをセット
Cells(50, 11).Value = Cells(lSelectNo, 3).Value
'お名前をセット
Cells(50, 12).Value = Cells(lSelectNo, 4).Value & " 様"
'読み仮名をセット
Cells(51, 12).Value = Cells(lSelectNo, 5).Value
'選ばれた社員番号を一桁ずつに分ける
With Range("L53:P53")
.Formula = "=MID(TEXT($K$50,""00000""),COLUMN(A1),1)"
.Value = .Value
End With
'一桁ごとに表示
sMsgString = "5桁目は!"
MsgBox sMsgString
Worksheets("Sheet1").Range("D3").Value = Worksheets("Sheet1").Cells(53, 12).Value
sMsgString = "4桁目は!"
MsgBox sMsgString
Worksheets("Sheet1").Range("E3").Value = Worksheets("Sheet1").Cells(53, 13).Value
sMsgString = "3桁目は!"
MsgBox sMsgString
Worksheets("Sheet1").Range("F3").Value = Worksheets("Sheet1").Cells(53, 14).Value
sMsgString = "2桁目は!"
MsgBox sMsgString
Worksheets("Sheet1").Range("G3").Value = Worksheets("Sheet1").Cells(53, 15).Value
sMsgString = "1桁目は!"
MsgBox sMsgString
Worksheets("Sheet1").Range("H3").Value = Worksheets("Sheet1").Cells(53, 16).Value
Worksheets("Sheet1").Range("D2").Value = Worksheets("Sheet1").Cells(54, 11).Value
'Noをセット
Cells(5, 4).Value = Cells(lSelectNo, 3).Value
'お名前をセット
Cells(5, 5).Value = Cells(lSelectNo, 4).Value & " 様"
'読み仮名をセット
Cells(6, 5).Value = Cells(lSelectNo, 5).Value
'値を入れたセルをクリア
sMsgString = " "
MsgBox sMsgString
Worksheets("Sheet1").Range("D5").Value = Worksheets("Sheet1").Cells(2, 3).Value
Worksheets("Sheet1").Range("E5").Value = Worksheets("Sheet1").Cells(2, 3).Value
Worksheets("Sheet1").Range("E6").Value = Worksheets("Sheet1").Cells(2, 3).Value
Worksheets("Sheet1").Range("D2").Value = Worksheets("Sheet1").Cells(2, 3).Value
Worksheets("Sheet1").Range("D3").Value = Worksheets("Sheet1").Cells(2, 3).Value
Worksheets("Sheet1").Range("E3").Value = Worksheets("Sheet1").Cells(2, 3).Value
Worksheets("Sheet1").Range("F3").Value = Worksheets("Sheet1").Cells(2, 3).Value
Worksheets("Sheet1").Range("G3").Value = Worksheets("Sheet1").Cells(2, 3).Value
Worksheets("Sheet1").Range("H3").Value = Worksheets("Sheet1").Cells(2, 3).Value
'当選者欄に追加
Dim aMax As Long
aMax = Cells(Rows.Count, 9).End(xlUp).Row
Worksheets("Sheet1").Cells(aMax + 1, 9).Value = Worksheets("Sheet1").Range("K50").Value
Worksheets("Sheet1").Cells(aMax + 1, 10).Value = Worksheets("Sheet1").Range("L50").Value
'当選者をリストから削除
Rows(lSelectNo).Delete
End Sub
'一覧未入力、途中抜けの場合のエラーチェック
Private Function checkPersonList() As Boolean
checkPersonList = True
Dim lLastRowName As Long
Dim lTopRowName As Long
lLastRowName = Cells(Rows.Count, 4).End(xlUp).Row
lTopRowName = Cells(90, 4).End(xlDown).Row
'10行目以降に1件も入力されていない場合エラー
If lLastRowName < 90 Then
sMsgString = "抽選対象のリストが入力されていません"
checkPersonList = False
'10行目から最終行の間に、名前が書かれていない行があればエラー
ElseIf lLastRowName <> lTopRowName Then
sMsgString = "抽選対象のリストには、間を開けずに入力してください" & vbCrLf & lTopRowName + 1 & "行目が空欄です"
checkPersonList = False
End If
End Function