Excel VBAで模擬問題作成

このQ&Aのポイント
  • Excel VBAを使用して仕事で模擬問題を作成する方法について知りたいです。
  • 模擬問題作成時にExcel VBAを使って問題と回答を表示する方法について教えてください。
  • Vlookup関数を使用して問題と回答を表示する方法を知りたいです。
回答を見る
  • ベストアンサー

Excel VBAで模擬問題を作成

仕事で模擬問題をすることになったのですが 簡単なものを作成するつもりが・・・。 sheet1にデータ sheet2に回答フォーム データには、A列から順に 問題No.、模擬問題No.、カテゴリーNo.、カテゴリー、問題、選択1・・・、解説、回答一回目・・・。 と言う上記項目があり、リストで入力してあります。 回答フォームには、 問題No.を入力すると、問題と選択1~選択5までが 表示されるようにVlookupで作成しました。 そこへ、"次へ"ボタンを押すと 問題No.を入力せずにデータシートから 一行目から順に表示できるようにしたいのですが どのようにすればよいでしょうか? Private Sub CommandButton1_Click() Range("C7:C10").Select ActiveCell.FormulaR1C1 = "+1" Range("D7:c10").Select End Sub ボタンをクリックすると「C7:C10」(結合しています) の数字に「+1」を足していく? これを繰り返す? VBAはマクロの登録しかできません。 すみませんがよろしくお願い致します。

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

  • ベストアンサー
  • 11369
  • ベストアンサー率29% (20/67)
回答No.2

No.1です。 エラーですか? なんでだろう?こちらでは流れるんですが・・・。 とりあえず、補足についての回答ですが、 If myY=160 Then Msgbox("試験終了") End IF を追加すればよいと思います。

cocoku
質問者

お礼

ありがとうございました。 メッセージうまくいきました。

その他の回答 (1)

  • 11369
  • ベストアンサー率29% (20/67)
回答No.1

こんなんでどうでしょう? Private Sub CommandButton1_Click() Counter=1 Do ' A列のCounter番目のデータ Atai=Range("A2").Offset(Counter-1,0) ' 空白ならループを出る If Atai="" Then Exit Do End If Counter=Counter+1 Loop ' A列にデータを書き込む Range("A2").Offset(Counter-1,0)=Counter End Sub

cocoku
質問者

補足

Range("A2").Offset(Counter-1,0)=Counter 上記のとこでエラーがでました。 ありがとうございます。 Sub Macro2() myY = myY + 1 Range("C7:C10").Value = myY Range("E34:F35").Select End Sub とりあえず、上記のマクロでなくとか動きましたが myYの値が160になったら試験終了と言う メッセージがいれたいのですが・・・。 どうでしょう?

関連するQ&A

  • エクセルVBA 1つのシートで出来ますか?

    説明が下手で申し訳ございませんが、宜しくお願い致します。 sheet(1)に20個のボタンがあります。 ボタンをクリックすると、別のシートが開きます。 開いたシートにも複数のボタンがあり、そのうちの任意のボタンをクリックすると、そのボタンの値がsheet(1)のそれぞれのボタンに対応したセルに入力される、という動作を実現したいと思っています。 現状、下記のようなコードで目的の動作は実現できてはいるのですが、各ボタンそれぞれにシートを作っているような状況です。(データ自体は全く同じ内容のものが、計20シート) たぶん、もの凄く頭の悪い事をやっているんだろうと思います。 sheet(1)を除いた各シートの入力データ自体は全く同じなので、シート一枚で出来るんじゃないのかなと思い、ネットや本で調べながら色々試してみたのですが、どうも上手く行きません。データが同じでも、sheet(1)のクリックしたボタンによって入力するセルを変えなければならないのが問題です。 sheet(1)のボタンとセルの関連付けや、sheet(1)のどのボタンを押したのかの判別ができればいいのかなと思って調べてみても、初心者にはよく理解できず、もう何週間もチャレンジしているのですがお手上げです。 上級者の方の知恵をお借りできれば幸いです。 Sub sheet2を開く() Worksheets(2).Select End Sub Sub 入力1() Worksheets(1).Range("F8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("F8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("F8") = "データ3" Worksheets(1).Select End Sub Sub sheet3を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("H8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("H8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("H8") = "データ3" Worksheets(1).Select End Sub Sub sheet4を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("M8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("M8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("M8") = "データ3" Worksheets(1).Select End Sub    ・    ・    ・    ・    ・

  • excel vba 非表示のシートに入力するには?

    エクセルで簡単な学習ツールを作っています。 シートは「問題」シートと「解答」シートの2シートがあり、「解答」シートは非表示になっています。 「問題」シートで解答者の名前をプルダウンで選択し、正解だと思う解答のラジオボタンを選択し、 最後に解答ボタンを押すと、入力した内容が非表示の「解答」シートに反映するような仕組みに したいのですが、どうすればうまくいきますか? 現在 Private Sub workbook_open() Sheets("問題").Select Range("K1") = 0 Range("K2") = 0 Sheets("解答").Select Range("B2") = 0 Range("C2") = 0 Sheets("問題").Select Range("B2") = "" End Sub と入力していますが、「解答」シートが非表示になっているためデバックになります。 非表示の「解答」シートに入力内容が反映する方法を教えてください。

  • EXCELのVBAについて

    マクロのボタンで内容を削除する様に設定した所、 Dim re As Integer Sheets("投入シート").Select re = MsgBox("入力データをクリアします。" & vbCrLf & vbCrLf & "よろしいですか?", vbOKCancel, "クリア確認") If re <> vbCancel Then Sheets("投入シート").Select ActiveSheet.Unprotect Range("a1:c30").Select Selection.Copy Application.CutCopyMode = False Selection.Copy Sheets("work").Select Range("A1").Select ActiveSheet.Paste Sheets("投入シート").Select ActiveSheet.Unprotect Range("c4:c30").Select Selection.ClearContents Range("f31").Select Selection.Copy Range("c9").Select ActiveSheet.Paste Range("f33").Select Selection.Copy Range("c11").Select ActiveSheet.Paste Range("f32").Select Application.CutCopyMode = False Selection.Copy Range("c14").Select ActiveSheet.Paste Range("c4").Select Application.CutCopyMode = False 'ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End If Sheets("投入シート").Select Range("c4").Select End Sub この様に入力したのですがセルのC11の計算式だけセル番号が消えてしまいます。 どうしてでしょうか?ご指導をお願いします。

  • エクセルVBAが書ける方へ

    お世話になります。 下記VBAはB19からB28までのデータをA11:12の横列に貼り付けさせる内容です。 Sub 特価() ' ' 特価 Macro ' ' Range("A11:A12").Select ActiveCell.FormulaR1C1 = "=R[8]C[1]" Range("B11:B12").Select ActiveCell.FormulaR1C1 = "=R[9]C" Range("C11:C12").Select ActiveCell.FormulaR1C1 = "=R[10]C[-1]" Range("F11:F12").Select ActiveCell.FormulaR1C1 = "=R[11]C[-4]" Range("H11:I12").Select ActiveCell.FormulaR1C1 = "=R[12]C[-6]" Range("T11:U12").Select ActiveCell.FormulaR1C1 = "=R[13]C[-18]" Range("X11:Y12").Select ActiveCell.FormulaR1C1 = "=R[14]C[-22]" Range("AD11:AE12").Select ActiveCell.FormulaR1C1 = "=R[15]C[-28]" Range("AN11:AO12").Select ActiveCell.FormulaR1C1 = "=R[16]C[-38]" Range("AW11").Select ActiveCell.FormulaR1C1 = "=R[17]C[-47]" Range("B23").Select End Sub これに下記内容を追加したいのですが教えて下さい。 ・B19からB28のデータは入力後消す。 ・貼り付けたら次に入力する時は下の行(A13:14)に貼り付ける。 ・同様にデータを消してA15:16に貼り付ける。以下、下の行に貼り付けていくようにする。 ・貼り付けたらカーソルはB19を選択した状態にする。 言葉足らずでしたら補足します。 何卒宜しくお願い致します。

  • エクセルのフォームのVBAについて

    VBAがまったくわからないのに参考書を見て高度な事に挑戦しています フォームは作れてフォームをクリックやら入力やらして作ったOKボタンを押すと シート2のA1B1C1‥の列に入力文字だけが羅列されます。 しかし次にやろうとするとA2B2C2‥と下に行かず又A1B1C1‥の列の文字が変更になり続きません。何がいけないのでしょうか? Sub 入力() Dim LastRow As Long With Worksheets("sheet2") LastRow = Worksheets("sheet2").Range("A" & Rows.Count).End(xlUp).Row .Range("A" & LastRow).Value = Worksheets("sheet1").Range("A5").Value .Range("B" & LastRow).Value = Worksheets("sheet1").Range("A7").Value .Range("C" & LastRow).Value = Worksheets("sheet1").Range("A8").Value .Range("D" & LastRow).Value = Worksheets("sheet1").Range("A10").Value End With End Sub と参考書とおりいれたのですが‥。教えて下さい。

  • Excel Selectは使わない? VBA

    おはようございます。 ExcelのVBAを独学しております。 いまさらな質問だとは思いますが、 そこで、色々調べていたところ 「Select」はあまり使うな! ということが良く出てきました。 selectを使わず、上手くシート移動などができるのでしょうか? 私が組んでいるものは、色んなシートを切り替えなければならなく、 毎回Selectしています。 Activateを使ったこともありますが、 エラーが多発し、良く分からなかったためSelectを使用しています。 出来れば、シートをアクティブにすることなく 操作ができれば良いのですが・・・ 例)「データ」「コピー」のシートがあります。 「データ」シートのAからD列を「コピー」シートにコピー しようとするものです。 WorkSheets(データ).select Range("A1").select Range("A:D").select selection.copy Worksheets("コピー").select Range("A1").select ActiveSheet.Paste どうしてもSelectを多様してしまいます。 ●Selectを使わないデータの入力方法 ●Selectを使わず、シートをアクティブにしなくても良い参照方法 ●どうしてもSelectを使わないといけない場面 ●Selectを使うのを回避するためには・・・ などなど、ご存知でしたら回答お願い致します。

  • エクセル VBAの作成について

    初心者なりに、色々参考にさせてもらいながらエクセル・VBAで、 顧客データと業者コードに入力した数字や文字列を 顧客Noを入力すると請求書に表示される、というVBAを作ったのですが、顧客データの並び順が表に反映されてしまいます、 (例えば顧客NoがNo5だと請求書10行目から順に表示したいのに、13行目に表示されてしまいます。No4だと12行目、No3だと11行目という風に・・) ws1の、顧客データは、10行目から順に1行ずつ下がって入力したいけど、 ws2の、業者コードの情報は3行目のまま固定して表示したいのです。 こんな場合どうすればいいでしょうか・・? 説明足りなければ申し訳ありません。。 下に、自分で作ったVBA張っておきます。↓   Sub 請求書作成() Dim getstr As String Dim msg As String Dim title As String Dim irange As Integer Dim iirange As Integer  Set ws1 = Worksheets("顧客データ")  Set ws2 = Worksheets("業者コード")  Set ws6 = Worksheets("▲請求書▲") msg = "顧客NO.を入力してください" title = "NO.入力" getstr = InputBox(msg, title) getstr = UCase(getstr)   irange = Int(getstr) + 4   iirange = Int(getstr) + 8  ws6.Range("a4") = ws1.Range("g" & irange)  ws6.Range("d3") = ws1.Range("j" & irange) EndRow = Cells(ws6.Rows.Count, 8).End(xlUp).Row  ws6.Range("c" & iirange) = ws1.Range("l" & irange)  ws6.Range("f" & iirange) = ws1.Range("c" & irange)  ws6.Range("n" & iirange) = ws1.Range("bf" & irange)  ws6.Range("v" & iirange) = ws1.Range("dh" & irange)  ws6.Range("ab" & iirange) = ws1.Range("ac" & irange)  ws6.Range("aw" & iirange) = ws1.Range("dz" & irange)  ws6.Range("ah" & iirange) = ws2.Range("l" & irange + 2) End sub

  • エクセルVBAで再質問です。

    QNo4011183で質問したもので、また質問です。 前回の回答で、以下のような良回答をいただきました。 A1セルで名前を選択して、その名前と同じ定義済みの別シートの範囲 を、違うシートにコピーする、というものです。 使っているうちに気づいたのですが、コードを書いてあるシート のどこを入力しても反応(メッセージがでます)してしまいます。 これは、回答者様からのコードを自分の設定に合わせて変更した ものですが、このように使っています。この場合、「入力」シート のG10セルのリスト(入力規則)で選択されたものに反応してくれ たらいいのですが、他のどのセルでも反応し、“変更しました。” と書いてあるメッセージが出ます。これをなんとかできないでし ょうか?度々すみませんが宜しくお願いします。 Private Sub Worksheet_Change(ByVal Target As Range) Sheets("組版").Select ActiveSheet.Range("A13:V21").Clear Sheets("入力").Select If Target.Address = "$G$10" Then Sheets("登録").Range(Target.Value).Copy Sheets("組版").Range("A13").PasteSpecial Paste:=xlAll Application.CutCopyMode = False End If MsgBox "変更しました。" End Sub

  • VBAで印刷したい。

    シートが3枚あります。 ・回答フォーム ・採点 ・判定 この"回答フォーム"のシートにボタンを作成して クリックすると"採点"の印刷範囲を印刷したいのですが うまく行きません。 よろしくお願い致します。 Private Sub 採点を印刷_Click() Sheets("採点").Select Range("$A$1:$O$41").Select Selection.PrintOut copies:=1 Sheets("回答フォーム").Select End Sub

  • エクセルVBAのコーディング

    現在、次のようなことがやりたくてエクセルのコードを作ってみました。 ・データが書かれたエクセルの複数のsheetの特定のセルをコピーして、sheet1にコピーペーストしていきたい。 そこでこのようなコードを書いてみました。 Private Sub Worksheet_Activate() Sheet4.Select Range("A16").Copy Sheet1.Select Range("U63").Select Sheet1.Paste End Sub とりあえずSheet4のセルA16のデータをSheet1のU63にコピーペーストするようにしてみたのですが、うまくいきません。 この場合のコードの書き方をご教授いただけないでしょうか? どうぞ、よろしくお願い致します。

専門家に質問してみよう