• 締切済み

1問、間違っていたら、1ケタへ 合っていたら2ケタ

エクセルVBAを使い、計算プログラムを作りたいのですが、上手くいきません。 5問の問題があり、1問が間違っていたら、乱数を使い1ケタへ。合っていたら2ケタへ。 乱数を使い、If文で1ケタは表示することは出来ますが、合っていたら2ケタに表示するというIf文かswitch文での処理が分かりません。 ヒントでも構いません。 だれか分かる方がいましたら、教えて頂けますでしょうか? 宜しくお願いします。

みんなの回答

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.2

最大の問題点 Sub リセット() Dim i As Integer 'カウンタ変数 Dim A As Integer Dim B As Integer Dim C As Integer Dim D As Integer For i = ORG_CLM To DST_CLM Cells(i, ANSW1_RWS).ClearContents '値をクリア Cells(i, ANSW2_RWS).ClearContents Cells(i, ANSW1_RWS).Font.Color = vbBlack '文字色を黒に 正誤判定する前にクリアしちゃったら、全ての計算式が不正解扱いになりますので1桁しか表示されないですよね、クリアするのは、その後のIF文の後ですね 次に A = Int(Rnd * 8) + 1 この乱数だと1~8までの数値しか作成されないですよね 1桁の整数なら A= Int(Rnd * 9) + 1 になります で最後に C = Int(Rnd * 10) + 1 ' D = Int(Rnd * 10) + 1 Cells(i, NUM1_RWS).Value = A * C ' Cells(i, NUM2_RWS).Value = D ここの意味がわからん? 単純に2桁の整数を作成するのであれば A = Int(Rnd * 90) + 10 Cells(i, NUM1_RWS).Value = A だけで良い筈(前回の私の式も間違ってたけど)

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

>1問が間違っていたら、乱数を使い1ケタへ。合っていたら2ケタへ 1桁、2桁とは何を指していますか? >計算プログラムを作りたい 計算プログラムとは? 何を計算するのですか? >5問の問題があり 計算問題を作成し1問目の計算があっていたら計算問題の桁数を増やすって事? 質問内容からやりたい事の全体像がつかめません 1桁、2桁の乱数作成であれば http://www.excel-vba.net/excel-function-016.html Int(9 * Rnd + 1) 1桁 Int(99 * Rnd + 1) 2桁(計算結果によっては1桁の場合も有りますInt(89 * Rnd + 10)なら2桁確定かな?) ですが、こう言ったことじゃない?

mai5891
質問者

補足

意味不明で言葉が足らず申し訳ありません。 以下、ソースです。 今の状態は、1ケタ+1ケタの表示はできますが、この1ケタ+1ケタが正解だった時、2ケタ+1ケタを表示させたいのですが、出来ない状態です。 どこがおかしいのでしょうか? Option Explicit '足し算 Const ORG_CLM As Integer = 4 '問題の開始行 Const DST_CLM As Integer = 8 '問題の終了行 Const NUM1_RWS As Integer = 2 '問題の数値1のB列 Const NUM2_RWS As Integer = 4 '問題の数値2のD列 Const ANSW1_RWS As Integer = 6 '回答欄のE列 Const ANSW2_RWS As Integer = 7 '回答欄のF列 Sub チェック() Dim i As Integer 'カウンタ変数 i = 1 For i = ORG_CLM To DST_CLM 'B列の値とD列の値の和がF列に入力された答えと正しいか判定 If Cells(i, NUM1_RWS).Value + Cells(i, NUM2_RWS).Value = Cells(i, ANSW1_RWS).Value Then Cells(i, 6).Font.Color = vbBlue '正解なら文字色を青に Else Cells(i, 6).Font.Color = vbRed '不正解なら文字色を赤に End If If Cells(i, NUM1_RWS).Value + Cells(i, NUM2_RWS).Value = Cells(i, ANSW1_RWS).Value Then Cells(i, 7) = "○" '正解なら○で表示 Else Cells(i, 7) = "×" '不正解なら×を表示 End If Next i End Sub Sub リセット() Dim i As Integer 'カウンタ変数 Dim A As Integer Dim B As Integer Dim C As Integer Dim D As Integer For i = ORG_CLM To DST_CLM Cells(i, ANSW1_RWS).ClearContents '値をクリア Cells(i, ANSW2_RWS).ClearContents Cells(i, ANSW1_RWS).Font.Color = vbBlack '文字色を黒に 'B列の値とD列の値の和がF列に入力された答えと正しくないか判定 '答えが合っていなかったら、1桁+1桁。 If Cells(i, NUM1_RWS).Value + Cells(i, NUM2_RWS).Value <> Cells(i, ANSW1_RWS).Value Then A = Int(Rnd * 8) + 1 Cells(i, NUM1_RWS).Value = A ' B = Int(Rnd * 8) + 1 ' Cells(i, NUM2_RWS).Value = B End If '答えが合っていたら、2桁+1桁。 If Cells(i, NUM1_RWS).Value + Cells(i, NUM2_RWS).Value = Cells(i, ANSW1_RWS).Value Then C = Int(Rnd * 10) + 1 ' D = Int(Rnd * 10) + 1 Cells(i, NUM1_RWS).Value = A * C ' Cells(i, NUM2_RWS).Value = D End If Next i End Sub

関連するQ&A

  • if文の処理について

    お世話になります。 switch文の中に、 「もし3桁目があれば、計算(カウント)し、 なかったら計算しない」 というif文を作りたいと思っています。 しかし、処理の仕方が全くわかりません。 初歩的な質問なのですが、お力添え頂けないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 数字5桁と10桁のパターンを作りたいのですが。。

    4月4日に数字4桁のパターンの作り方を質問し、 回答を頂き、4桁は解決しました。 (QNo.2893813 数字4ケタのパターンをつくりたいのですが・・ ) 今度は5桁と10桁のパターンを作りたいです。 (「乱数を作りたい」といった言い方が正しいのかもしれません) ■5桁の数:1~9までの数字の中から作る <例>14762、98426、39175、87214、、 ■10桁の数:1~10の数字から作る <例>1 3 4 8 9 2 5 7 6 10 どちらも、かぶらないように100~200パターンほど作りたいです。 エクセルの関数で出来る様ですが、エクセルはど素人なので、 前回の質問QNo.2893813 の回答no.5のようなプログラム自体をコピー&ペーストしてできるものが嬉しいです。 以下、前回頂いた回答の一部です ※回答いただいた方のお名前と、プログラムはここでは伏せます --------------------------------------------------------------- 作り方 Excelを起動→ツール→マクロ→visiual basic editor Visual Basic で 挿入→標準モジュール 出てきた画面に下のプログラムをコピー、ペースト 使い方 Excelでツール→マクロ→マクロ 『test』を選択して実行作り方 Excelを起動→ツール→マクロ→visiual basic editor Visual Basic で 挿入→標準モジュール 出てきた画面に下のプログラムをコピー、ペースト 質問が2回に分かれる形になってしまい、申し訳ありません。 知っている方いらっしゃいましたら、教えてください。

  • VBAマクロの記述を教えてください m(__)m 娘から聞かれたのですが主婦の私にはわかりません

    VBAマクロの宿題です。どうもエクセルのことのようですが、それ以上は私にはわからず困っています。    A   B   C   D   E  1  ○  ×  ○  ×  ○ 2  5  5 3 12 12 4  8  8 5 15 15 6 31 31 7  4  4 8  3  3 9 87 87 10  18  18 11 183 87 以上がエクセルのシートだと見てください。 準備:A1セルからE1セルに○あるいは×を入力する。    A2セルからE10のセルに適当な2桁の数値を入力する。 問題:1行目が○なら11行目に2行目から10行目までの    合計を計算・表示する。    1行目が×なら11行目に2行目から10行目までの    最大値を表示する。 ヒント:文字のIF文      プログラム上で文字を扱う場合、ダブル・クォーテー      ションで文字をはさむ。      IF Cells( 、 )="○" Then     プログラムの流れ |     For |       IF |         For |         Next |       Else |         For |         Next |       END IF |     Next 以上です。もう何が何やらちんぷんかんぷんです。どなたか助けてください。

  • Excelで「10桁の自然数×10桁の自然数」を計算する方法

    Excelで「10桁の自然数×10桁の自然数」を関数を組み合わせるか、VBAで組むかして、計算する方法をお分かりになる方おられませんでしょうか?(計算結果は文字列として得られることになると思いますが、それでかまいません。) こうすればできる、というアイデアだけでもかまいませんので、よろしくお願いいたします。

  • Excel VBAでの少数桁合わせ

    Excelで計算した計測データをDOSのフィルタープログラムで処理するためにデータをtxtファイルへ書き込む処理を作っているのですが、少数桁を合わせる必要があるらしく、上手いこと出来ないためお知恵を拝借したいです。 その昔のBASICならば print#1 usingなどという便利なコマンドがありましたが、見あたりません。 こんな感じで並べたいのですが… #####0.00000000 #####0.00000000 #####0.00000000 横に5個ずつ並べて5000個ほどあります。ただ並べるならば問題は無いのですが。 よろしくお願いします。

  • エクセル 小数点一桁目を判定

    お尋ねします。 エクセルで次の処理を行いたいのですがどなたか教えて下さい。 1)判定結果が小数点一桁目まで集計計算されます。   例えば、5.6とか3.5とかいった具合です。 2)この集計結果の小数点1桁目をみて、「5捨6入」で判定を行い、切り上げ・切り捨て処理をしたい。 小数点1桁目が「6以上」の場合は切り上げ、「5以下」の場合は切り捨てになります。 例えば、5.6の場合は0.6を切り上げて最終判定は6になり、3.5の場合は、0.5を切り捨てて3となります。 1.7だったら2、6.4であれば6になります。 マクロかVBAを使うことになるのでしょうか? どちらも素人ですのでわかりやすくご指導頂ければありがたいです。 お願い致します。

  • エクセルで9桁の計算をするには?

    エクセルのセルどうしの掛け算で 111111111*111111111 の計算をすると 12345678987654300 となってしまいます。 どうしたら計算結果の全ての桁を 正しく表示させることができるでしょうか?

  • 4桁の数字以外を入力したらエラーを表示したいです

    if文とwhile(for)文の範囲の課題で4桁の数字を入力してどうこうというプログラムを作っています。 課題には書かれていませんが、4桁の数字以外を入力したときにエラーを表示させるにはどんな方法がありますか? 10000以下をはじけばいいんじゃないかと思ったのですが、これだと「0001」などもはじかれてしまうようでして、アルファベットや記号が含まれるものも同時にはじきたいのですが、何か良い方法がわかる方いましいたら、ぜひ解説をお願いします。 なお課題では、理解していれば習っていない関数も使っていいと書かれていました。こんな関数を使ってみては?というものがあれば教えていただけるとうれしいです。

  • Excelで数値を桁ごとに置き換える方法について

    Excelのある列に、例えば顧客番号として10桁の数値(文字列:NULLやALL0を含む)が大量に並んでいるとします。 これらに対しNULLやオールゼロではない場合に、それぞれの桁を下記のような規則に従って置きかえる方法を考えているのですが、何か良い方法はないでしょうか。 ****規則********* 1~2桁目 変更前が1の場合5に、2の場合4に、3の場合1に…(以下9、0まで条件あり)置き換え 3~4桁目 変更前が1の場合6に、2の場合3に、3の場合2に…(以下9、0まで条件あり) 5~6桁目 変更前が1の場合7に、2の場合3に、3の場合6に…(以下9、0まで条件あり) 7~8桁目 変更前が1の場合4に、2の場合1に、3の場合8に…(以下9、0まで条件あり) 9~10桁目 変更前が1の場合5に、2の場合1に、3の場合8に…(以下9、0まで条件あり) ****************** 例えば、 1321231221 という数値(文字列)がある場合、 5136364115 という結果が別のセルにできるような形です。 関数であれば、まずNULLやALL0でない場合に、とIF文で規定し、それぞれの桁を10個のセルに分解して、さらにIF文で10個分岐を組んだ物をそれぞれのセルに適用させ、最終的に再度結合させれば何とかできなくはなさそうですが、数万セルに及ぶのでVBAで次のセル次のセル…とやった方が効率的だと考えます。 ただ、そんなVBAができれば良いのですがなかなか思いつきません…。 どなたかご教示いただけませんでしょうか。

  • 小数桁表示ができません

    最近javaプログラムを始めたものです。いま円周率πの計算をしているのですが、どうしたら小数桁を15桁以上の値を表示することができますか?よろしくお願いします。

専門家に質問してみよう