• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:読み仮名をエンターで確定しないで入力する方法)

エクセルで読み仮名テストを作成する方法と正解表示の実装方法

このQ&Aのポイント
  • エクセルで漢字の読み方テストを作成する方法とは?読み仮名を入力する際、エンターキーを押さずに評価する方法も解説します。
  • エクセルで独自の読み仮名テストを作成する方法について詳しく解説します。また、エクセルでの入力時にエンターキーを押さずに読み仮名を取得する方法も紹介します。
  • エクセル上で読み仮名テストを作成する方法とは?エンターキーを押さずに読み仮名を入力する方法や正解表示の実装方法について詳しく解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

同じようなものは作ったことがありますが、掲示板で公開するスペースが足りないような気がします。ヒントになる部分だけ触れておきます。 大事な部分は、たぶん、ご質問者さんが想像しない所だと思います。それは、問題をランダムに重複なく出すところです。それが出来なければ、完成しません。この部分は以下では書かれていません。一般的にはアルゴリズムが必要ですが、別にシートを用意してもよいと思います。 >読み仮名を入力するとき、エンターを打たなくても採点してくれるところが機能的です。 一定の時間内に、入力した所をチェックすればよいのですが、TextBoxがよいのではないかと思います。そんなに大した問題ではありません。以下は時間は15秒と大目に取っています。改行を入れれば、途中で解答チェックをしますが、間違っていれば、TextBox内がクリアされます。 以下、簡単なサンプルコードです。VBAが多少経験ある人なら、誰でも書けるような内容です。 ・問題点は、TextBox等では、IMEのコントロールで動きが制約される可能性があります。 ・タイムアウトのカウントは、もう少し難しいことを考えなくてはなりません。 シート1 コントロールツール  CommandButton1 ...1個  TextBox1    ...1個  場所は適当に置きます。 使用するセル A1, C1 セルの高さと幅 ピクセル数 80 × 100 マクロは、シートモジュール(Sheet1) '// Dim myTime As Date Dim cnt As Integer Dim i As Integer Dim arKan As Variant Dim arFuri As Variant '問題 Const Kanjis = "未曾有,嚥下,声高,東風,作務衣" '解答 Const Furiganas = "みぞう,えんげ,こわだか,こち,さむえ" Private Sub CommandButton1_Click()  cnt = 0: i = 0  TextBox1.Text = ""  arKan = Split(Kanjis, ",")  arFuri = Split(Furiganas, ",")  With Range("A1", "C1")   .ClearContents   .ClearFormats  End With  Range("A1").Font.Size = 20  Range("c1").Font.Size = 40  TextBox1.IMEMode = fmIMEModeHiragana  myTime = Now + TimeSerial(0, 0, 15)  Call SetQuestion  If i > UBound(arKan) + 1 Then   Range("A1").ClearContents   TextBox1.Text = ""  End If End Sub Private Sub SetQuestion()  TextBox1.Text = ""  Range("A1").Value = arKan(i)  myTime = Now + TimeSerial(0, 0, 5)  TextBox1.Activate  Application.OnTime myTime, Me.Name & ".CheckAnswer" End Sub '続く

obaoba9
質問者

お礼

詳しく回答をいただきありがとうございます。 しばらく、考えさせていただきましたが、私には難しすぎました。 今しばらく勉強してから挑戦いたします。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

'前回からの続き Private Sub CheckAnswer()  If Trim(TextBox1.Text) = "" Then   Range("C1").Font.ColorIndex = 0   Range("C1").Value = "×"   Application.Wait Now + TimeSerial(0, 0, 2)  ElseIf StrComp(Trim(TextBox1.Text), arFuri(i)) <> 0 Then   Range("C1").Font.ColorIndex = 0   Range("C1").Value = "×"   Application.Wait Now + TimeSerial(0, 0, 2)  ElseIf StrComp(Trim(TextBox1.Text), arFuri(i)) = 0 Then   Beep   Range("C1").Font.ColorIndex = 3   Range("C1").Value = "○"   cnt = cnt + 1  Else   Range("C1").Font.ColorIndex = 0   Range("C1").Value = "×"  End If  With Range("A1")   .Characters(1, 3).PhoneticCharacters = arFuri(i)   .Phonetics.Font.Size = 8   .Phonetics.Alignment = xlPhoneticAlignDistributed   .Phonetics.Visible = True   End With  i = i + 1  If i > UBound(arKan) Then    TextBox1.Text = ""    Beep    Range("C1").Font.ColorIndex = 0    Range("C1").Font.Size = 20    Range("C1").Value = "正解数: " & cnt & "/" & (UBound(arKan) + 1)  Else   Application.Wait Now + TimeSerial(0, 0, 3)   Range("A1", "C1").ClearContents   If UBound(arKan) > (i - 1) Then    TextBox1.Activate    Call SetQuestion   End If  End If End Sub Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)  '改行で待ち時間なしになる  If KeyCode = 13 Then   On Error Resume Next   If StrComp(Trim(TextBox1.Text), arFuri(i), 1) <> 0 Then    TextBox1.Text = ""   Else    Application.OnTime myTime, Me.Name & ".CheckAnswer", , False    Call CheckAnswer   End If  End If  On Error GoTo 0 End Sub

関連するQ&A

専門家に質問してみよう