• ベストアンサー

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 さらに工夫を施さなければならないのですが本当に分らないので困っています。回答お願いします!

  • rime
  • お礼率79% (203/256)

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

  • ベストアンサー
  • 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
質問者

お礼

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

関連するQ&A

  • VBAにおける、たし算の自動作問プログラムについて

    二列目に、二桁の整数の足し算を出題することができるたし算の作問プログラムを以下のように作ったのですが、続いて三列目に、足し算の解答をして、それの正誤を確かめるプログラムを作りたいのですがどのようにすればよいでしょうか? ↓作問のプログラム Sub test() Columns("B:F").Clear n = InputBox("問題数は?") ReDim ans(n) For i = 1 To n Randomize x = Int(Rnd * 100) Randomize y = Int(Rnd * 100) ans(i) = x + y Cells(i, 2) = "(" & i & ") " & x & " + " & y & " = " Next i End Sub 以下のような感じで採点のプログラムを作りたいのですが、上のプログラムの変数ans(i)を参照する場合、下のプログラムのans(i)はどのように定義すればよいのでしょうか? Sub saiten() For i = 1 To n If Cells(i, 3) = ans(i) Then Cells(i, 4) = "○" Else: Cells(i, 4) = "×" Next i End Sub

  • VBAでフォームにおけるコマンドが実行されません。

    なんどもすいません。二列目に、二桁の整数の足し算を出題することができるたし算の作問プログラムと、続いて三列目に、足し算の解答をして、それの正誤を確かめるプログラムを、それぞれフォームで”問題”、”採点”とした時、一回フォームのウィンドウを閉じてしまうと”採点”のコマンドを押しても、うまく実行されません。 im Ans() As Long Dim n As Variant Private Sub monndai_Click() Dim x As Long, y As Long Columns("B:F").Clear n = InputBox("問題数は?") If Not IsNumeric(n) Then Exit Sub If n <= 0 Then Exit Sub ReDim Ans(n) As Long For i = 1 To n Randomize x = Int(Rnd * 100) Randomize y = Int(Rnd * 100) Ans(i) = x + y Cells(i, 2) = "(" & i & ") " & x & " + " & y & " = " Next i End Sub Private Sub saiten_Click() t = 0 Dim i As Long For i = 1 To n If Cells(i, 3) = Ans(i) Then Cells(i, 4) = "○": t = t + 1 Else Cells(i, 4) = "×": End If Next i tokutenn = "貴方の正答率は" & Int(t / n) & "%です" End Sub (注)tokutennはフォームのテキストボックスのオブジェクト名です。

  • Excel VBAで検索(Win2000 Excel2000)

    現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。 ----------------------------------------- Sub 検索1() Worksheets("Data").Activate Dim x As Integer For x = 3 To 22 If Cells(2, x).Value >= 12 Then MsgBox x Exit Sub End If Next MsgBox "見つかりません" End Sub --------------------------------------------- Sub 検索2() Worksheets("Data").Activate Dim i As Integer For i = 4 To 42 If Cells(i, 2).Value = "A" Then MsgBox i Exit Sub End If Next MsgBox "見つかりません" End Sub

  • VBA と JIS Full BASIC

     下のJIS Full Basic スタイルとだいたい同じようなコードを VBA で書いたのですが   Z = Sqr(x^2 + y^2) のところでエラーが出ます。どこがおかしいのでしょうか。 Function gcd(a, b)   Do While b <> 0    r = a Mod b    a = b    b = r   Loop   gcd = a End Function Rem 既約なピタゴラス数を求める Sub Pythagoras()  LAST = 200   LAST = 200   For x = 1 To LAST    For y = x + 1 To LAST      Z = Sqr(x^2 + y^2)      'ここでコンパイルエラーが出る      If Int(Z) = Z Then       If gcd(x, y) = 1 And gcd(x, z) = 1 And gcd(y, z) = 1 Then         Debug.Print x & ", " & y & ", " & z       End If      End If    Next y   Next x End Sub ---------------------------- JIS Full Basic スタイルのコード REM ピタゴラス数 FUNCTION gcd(a,b)   DO WHILE b <> 0    LET r = MOD(a,b)    LET a = b    LET b = r   LOOP   LET gcd = a END FUNCTION LET LAST = 200 FOR x = 1 TO LAST   FOR y = x + 1 TO LAST    LET z = SQR(x^2+y^2)    IF INT(z) = z THEN      IF gcd(x,y) = 1 AND gcd(x,z) = 1 AND gcd(y,z) = 1 THEN       PRINT x,y,z      END IF    END IF   NEXT y NEXT x END

  • 繰り返しの足し算

    こんにちは、いつもお世話になっています。 今回、セルに符号がランダムで、絶対値が同じ数を足していきたいのですが、思うようにいきません。 (5→0→0→-5→-10→-15・・・) 何が悪いのでしょうか・・・? Sub ランダムの足し算() Cells.Clear a = 0 For dt = 1 To 20 Cells(dt, 1) = a + di '足していきたいのに、足せない? di = Int(rnd - 0.5) * 5 'これが足す数です。 If di = 0 Then di = di + 5 End If Next End Sub 回答よろしくお願いします。(> <)"

  • 【Excelマクロ】もっと頭の良い書き方って無いかな?

    5行空白列があったらそこで処理を終わりたいんですが、もっといい書き方はないでしょうか? 下記が私の考えた頭の悪いやり方です。 Sub macro() Dim i As Integer For i = 1 To 1000 If Cells(i, 1) = "" Then  If Cells(i + 1, 1) = "" Then   If Cells(i + 2, 1) = "" Then    If Cells(i + 3, 1) = "" Then     If Cells(i + 4, 1) = "" Then      If Cells(i + 5, 1) = "" Then       MsgBox (i - 1 & "行目で終わりです")       Exit For      End If     End If    End If   End If  End If End If Next End Sub

  • ▲ExcelのVBA▼困っています

    何度もVBAで質問させてもらい助けてもらっています。 懲りずにまた質問ですが… 下のプログラムは"●"が跳ね返るものなのですが… ●の後を■と▲が追うようなプログラムにするには なにを追加すればいいのでしょうか…?; どなたか教えて下さい;;お願いします;; Dim time1 As Integer, time As Integer Dim X As Integer, Y As Integer Dim maru As String, yoko As String, tate As String Sub 描画() Cells(X, Y).Value = maru End Sub Sub 削除() Cells(X, Y).Value = "" End Sub Sub 待機() For time1 = 0 To 1000 For time2 = 0 To 1000 Next Next End Sub Sub 座標移動() If yoko = "右" Then Y = Y + 1 Else Y = Y - 1 End If If Y = 30 Then yoko = "左" ElseIf Y = 1 Then yoko = "右" End If If tate = "上" Then X = X + 1 Else X = X - 1 End If If X = 20 Then tate = "下" ElseIf X = 1 Then tate = "上" End If End Sub Sub main() maru = "●" X = 1 Y = 1 yoko = "右" tate = "上" Do 描画 待機 削除 待機 座標移動 Loop End Sub

  • VBの初歩で躓き

    VBに初チャレンジしましたが、下記を実行しようとすると NEXTに対応するForがないというエラーが出ます。理由が分かりません。 Sub セル() For i = 1 To 10 Cells(i, 1) = "" Cells(i, 2) = "" If Int(i / 2 * 2) = i Then Cells(i, 1) = "abc" Else If Int(i / 2 * 2) <> i Then Cells(i, 2) = "xyz" End If Next End Sub

  • VBAの乱数について質問

    乱数 x (0<x<1)を0.1刻みで発生させたいんですが うまくいきません。 プログラム例 Sub 一様乱数() Dim bin#(10) n = 1000 For m = 1 To 10 bin#(m) = 0 Next m For J = 1 To n x = Rnd(1) ix = Int(10 * Rnd(1)) bin#(ix) = bin#(ix) + 1 Next J Cells(4, 1) = " I" Cells(4, 2) = "Bin#(I)度数分布" For I = 0 To 10 Cells(I + 5, 1).Value = I Cells(I + 5, 2).Value = bin#(I) Next I End Sub ここで、9行目ix = Int(10 * Rnd(1))で0.1刻みになり 15行目のFor I = 0 To 10を0 to 1に変えればできると思ったんですが できませんでした。 どこが問題なのかヒントでもいいので教えてください。

  • 乱数で・・・

       ラベル10枚に1~10までを乱数を入れたいのです ただしダブらない どうすればいいのでしょうか?? 自分で考えたのですがバグがあります ※コマンドをクリック ※クローンは用意済み Private Sub Command1_Click() Dim a(0 To 9) For i = 0 To 9 a(i) = Int(Rnd * 10)+1  For b = 0 To 9   If a(i) = a(b) Then     If i <> b Then     a(i) = Int(Rnd * 10) + 1     End If   End If   Next b Next i For c = 0 To 9 Label1(c).Caption = a(c) Next c End Sub バグの原因はなんとなくわかるのですがどうすればいいのか分かりません 素人ですいません。

専門家に質問してみよう