• ベストアンサー

Visual Basicで単語帳をつくりたい

こんにちは!Visual Basicを使って単語帳をつくらなければならいのですが、作り方がさっぱりです。 現在このような感じになっていて実行ができないのですが どうすればいいのでしょうか? 単語は6つあります。 Sub French2() For I = 1 To 6 X = Int(Rnd * 4) + 1 Z = Cells(X, 1) + "は?" Y = InputBox(Z) If Y = Cells(X, 2) Then Z = "当たり!" MsgBox (Z) Next For I = 5 To 6 X = Int(Rnd * 5) + 6 Z = Cells(X, 1) + "は?" Y = InputBox(Z) If Y = Cells(X, 2) Then Z = "その調子!" Else Z = "残念!" MsgBox (Z) End If End Sub さらに工夫を施さなければならないのですが本当に分らないので困っています。回答お願いします!

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

  • ベストアンサー
  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

>Cells(X, 1) とか、有るのでExcelVBAだと思いますが.. Visual BasicとVBAは意味が違いますので、注意しましょう 一応、これ↓で動くと思います ---------------------------- Sub French2()  For I = 1 To 6   X = Int(Rnd * 4) + 1   Z = Cells(X, 1) + "は?"   Y = InputBox(Z)   If Y = Cells(X, 2) Then    Z = "当たり!"   endif '<- 抜け   MsgBox (Z)  Next  For I = 5 To 6   X = Int(Rnd * 5) + 6   Z = Cells(X, 1) + "は?"   Y = InputBox(Z)   If Y = Cells(X, 2) Then    Z = "その調子!"   Else    Z = "残念!"   End If   MsgBox (Z) '<- 位置が違う  next '<- 抜け End Sub

rime
質問者

お礼

回答ありがとうございます!

その他の回答 (1)

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

こんにちは。 >Visual Basicを使って単語帳をつくらなければならい 宿題か何かですか?私も作ったことがあるのですが、なるべく本人が作ったようにしなければならないのですか?(汗……) ここのカテゴリは、あくまでも、Office 関連ですから、VBAの範疇でお答えします。 X = Int(Rnd * 5) + 6 これは、6単語しかないのに、6~10までを探してしまいます。 それと、全体的にコードが複雑のようです。 最初のコードでは、少し直してみました。 '------------------------------------------- 'Excel VBA '------------------------------------------- Sub French2()   Dim i, j, X, Z, Y '←変数の宣言をしてください。      For i = 1 To 4     Randomize     X = Int(Rnd * 4) + 1     Z = Cells(X, 1).Value & "は?"          Y = InputBox(Z)          If Y = "" Then       Exit Sub     ElseIf Trim(Y) = Cells(X, 2).Value Then       Z = "当たり!"     Else       Z = "はずれ"     End If          MsgBox (Z)          For j = 5 To 6       X = Int(Rnd * 2) + 5       Z = Cells(X, 1).Value & "は?"              Y = InputBox(Z)              If Y = "" Then         Exit Sub       ElseIf Trim(Y) = Cells(X, 2).Value Then         Z = "その調子!"       Else         Z = "残念!"       End If       MsgBox (Z)     Next   Next End Sub '------------------------------------------- Sub FlashCard1()   Dim colWords As Collection   Dim colTrWords As Collection   Dim rng As Range   Dim c As Variant   Dim n As Variant   Dim i As Long   Dim j As Long   Dim k As Long      Set colWords = New Collection 'コレクションオブジェクトを使う   Set colTrWords = New Collection      With ActiveSheet     Set rng = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp))     For Each c In rng       colWords.Add c.Value       colTrWords.Add c.Offset(, 1).Value     Next c   End With     k = colWords.Count        '乱数ジェネレータの初期化     Randomize          Do       i = Int(Rnd * k) + 1       n = Application.InputBox(colWords.Item(i) & " の意味は?", Type:=2)              'キャンセルボタンで解除       If VarType(n) = vbBoolean Then Exit Sub              'フラッシュカードの比較では、訳は文字が3文字程度入っていれば、合っているとします。       If Trim(n) Like "*" & Mid(colTrWords.Item(i), 3) Then         MsgBox colWords.Item(i) & " : " & colTrWords.Item(i) & vbCrLf & _         "正解です!", vbInformation        '正解したらリストから消す         colWords.Remove i         colTrWords.Remove i         k = colWords.Count       Else         MsgBox colTrWords.Item(i) & vbCrLf & _         "は違っています。", vbExclamation       End If     Loop Until k = 0 End Sub

rime
質問者

お礼

回答ありがとうございます!