寿司打、徹底攻略!ってことで動画のパート4までのプログラムです。
特徴
Left関数で一文字ずつ文字を照合
ComboBoxで問題シートと問題数を選択
DateDiff関数で常時表示のタイマー
これから寿司打5000円コース(お勧め)の練習用に特化したものに変更していきます。
UserFormのモジュール
Dim 問題シート As String
Dim 問題数 As Variant
Dim 最終行 As Long
Dim 出題文字列 As String
Dim 照合文字列 As String
Dim 何文字目 As Long
Dim 正解数 As Long
Dim タイマー起動 As Boolean
Dim タイマー初期値 As Date
Dim タイマーカウント As Long
Dim 小文字に変換 As String
Private Sub 初期表示()
Label1.Caption = "問題シートと出題数を選んで決定"
Label2.Caption = "スペースキーでスタート"
Label3.Caption = ""
Label4.Caption = ""
Label5.Caption = "正解数:"
Label6.Caption = "Time:" & "秒"
TextBox1.Text = ""
End Sub
Private Sub UserForm_Initialize()
TextBox1.IMEMode = fmIMEModeDisable
UserForm1.Caption = "問題シート:" & " 問題数:"
Call 初期表示
CommandButton1.Caption = "決定"
CommandButton2.Caption = "リセット"
CommandButton3.Caption = "スタート"
CommandButton4.Caption = "編集"
CommandButton5.Caption = "復旧"
With ComboBox1
.Value = "寿司打5000円"
.AddItem "アイドル"
.AddItem "Subtitle"
.AddItem "貴方解剖純愛歌"
.AddItem "SHINSEKAIより"
.AddItem "ヒトリシズカ"
.AddItem "寿司打3000円"
.AddItem "寿司打5000円"
.AddItem "寿司打10000円"
End With
With ComboBox2
.Value = "30"
.AddItem "5"
.AddItem "10"
.AddItem "20"
.AddItem "30"
.AddItem "昇順"
End With
End Sub
Private Sub CommandButton1_Click()
問題シート = ComboBox1
問題数 = ComboBox2
UserForm1.Caption = "問題シート:" & ComboBox1 & " 問題数:" & ComboBox2
最終行 = Sheets(問題シート).Range("B1").End(xlDown).Row
最終行 = 最終行 - 1
CommandButton3.SetFocus
End Sub
Private Sub CommandButton2_Click()
UserForm1.Height = 186
タイマーカウント = 0
正解数 = 0
何文字目 = 1
タイマー起動 = False
UserForm1.Caption = "問題シート:" & ComboBox1 & " 問題数:" & ComboBox2
Call 初期表示
CommandButton3.SetFocus
End Sub
Private Sub CommandButton3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeySpace Then
Call CommandButton1_Click
UserForm1.Height = 158
TextBox1.SetFocus
Label5.Caption = "正解数:" & 正解数
Call 文字列表示
Call タイマー
Else: Exit Sub
End If
End Sub
Private Sub CommandButton4_Click()
Application.Visible = True
UserForm1.Height = 240
End Sub
Private Sub CommandButton5_Click()
TextBox1.SetFocus
End Sub
Private Sub 文字列表示()
With Sheets(問題シート)
If ComboBox2 = "昇順" Then
.Range("E2").Value = 正解数 + 1
Else
.Range("E2").Value = WorksheetFunction.RandBetween(1, 最終行)
End If
Label1.Caption = .Range("F2").Value
Label2.Caption = .Range("G2").Value
Label3.Caption = .Range("H2").Value
出題文字列 = .Range("H2").Value
End With
何文字目 = 1
End Sub
Private Sub タイマー()
タイマー起動 = True
タイマー初期値 = Time()
Do
DoEvents
If タイマー起動 = False Then Exit Do
タイマーカウント = DateDiff("S", タイマー初期値, Time())
Label6.Caption = "Time:" & タイマーカウント & "秒"
If タイマーカウント = 1000 Then Exit Do
Loop
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
タイマー起動 = False
End Sub
Private Sub TextBox1_Change()
If TextBox1.Text = "" Then Exit Sub
小文字に変換 = LCase(TextBox1.Text)
Label4.Caption = 小文字に変換
照合文字列 = Left(出題文字列, 何文字目)
If 小文字に変換 = 照合文字列 Then
何文字目 = 何文字目 + 1
Else
TextBox1.Text = Left(照合文字列, 何文字目 - 1)
Label4.Caption = TextBox1.Text
End If
If 小文字に変換 = 出題文字列 Then
正解数 = 正解数 + 1
Label5.Caption = "正解数:" & 正解数
Call 文字列表示
TextBox1.Text = ""
Label4.Caption = ""
If 正解数 = 問題数 Or 正解数 = 最終行 Then
タイマー起動 = False
タイマーカウント = 0
正解数 = 0
Label1.Caption = "問題シートと出題数を選んで決定"
Label2.Caption = "スペースキーでスタート"
Label3.Caption = ""
CommandButton3.SetFocus
Exit Sub
End If
End If
End Sub
ThisWorkbookのモジュール
Private Sub Workbook_Open()
Application.Visible = False
UserForm1.Show
End Sub
Excelシート
A列:文字列番号
B列:文字列
C列:ひらがな
D列:ローマ字
E2:VBAで抽出番号が入る
F2:=VLOOKUP(E2,A:D,2)
G2:=VLOOKUP(E2,A:D,3)
H2:=VLOOKUP(E2,A:D,4)