1.16.5日本語化リソースパック配布

302個のMODの翻訳が完了したので YouTube にて配布いたします 。翻訳の内容など不備はありますが、無いよりはましだと思って使ってください。翻訳したMODの詳細については、まとめるのが面倒くさいので止めておきます。このリソースパックを導入することがマイクラMOD攻略の近道...

2025年6月5日木曜日

エクセルVBAで、またタイピングゲームを作ってみた

寿司打、徹底攻略!ってことで動画のパート4までのプログラムです。
特徴
Left関数で一文字ずつ文字を照合
ComboBoxで問題シートと問題数を選択
DateDiff関数で常時表示のタイマー

これから寿司打5000円コース(お勧め)の練習用に特化したものに変更していきます。


ユーザーフォームとExcelシート

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)

2025年3月9日日曜日

エクセルのVBAでタイピングゲームを作ってみた

 VBAプログラム(赤は省略できる)

Dim 正解数 As Long
Dim 不正解数 As Long
Dim 開始タイム As Long
Dim 終了タイム As Long
Dim 結果タイム As Long
Dim 乱数上限 As Long
Dim 出題数 As Long
Dim シート選択 As String

Private Sub UserForm_Initialize()
    
    シート選択 = "アイドル"
    'シート選択 = "Subtitle"
    'シート選択 = "SHINSEKAIより"
    'シート選択 = "貴方解剖純愛歌"
    'シート選択 = "ヒトリシズカ"
    
    乱数上限 = 100
    出題数 = 30
 
    正解数 = 0
    不正解数 = 0
    
    MsgBox "タイピングスタート"
    
    開始タイム = Timer
    
    Call 文字列抽出

End Sub

Private Sub 文字列抽出()

    Sheets(シート選択).Range("E2").Value = WorksheetFunction.RandBetween(1, 乱数上限)

    Label1.Caption = Sheets(シート選択).Range("F2").Value
    Label2.Caption = Sheets(シート選択).Range("G2").Value
    Label3.Caption = Sheets(シート選択).Range("H2").Value

End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    
    If KeyCode = vbKeyReturn Then
        
        If TextBox1.Text = Label1.Caption _
        Or TextBox1.Text = Label2.Caption _
        Or TextBox1.Text = Label3.Caption Then
            
            正解数 = 正解数 + 1
            
            MsgBox "クリア" & 正解数, vbInformation
            
            TextBox1.Text = ""
            
            If 正解数 = 出題数 Then
            
                終了タイム = Timer
                結果タイム = 終了タイム - 開始タイム
            
                MsgBox "エンド" & 結果タイム & "秒"
              
                Call UserForm_Initialize
                
            End If
        
            Call 文字列抽出
        
        Else
        
            不正解数 = 不正解数 + 1
        
            MsgBox "ミス" & 不正解数, vbCritical
            
            TextBox1.Text = ""
        
        End If
    
    End If
        
End Sub

ワークシートのエクセル関数



関連コンテンツ