- ベストアンサー
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 さらに工夫を施さなければならないのですが本当に分らないので困っています。回答お願いします!
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>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
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >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
お礼
回答ありがとうございます!
お礼
回答ありがとうございます!