• 締切済み

EXCELで問題集を作りたい(チェックボックス)

EXCELで問題と解答を作りたいと考えています。 問題に対する選択肢を問題ごとに考え、 答えがひとつならラジオボタン 答えが複数ならチェックボックスを使おうと考えています。 シート1に、問題 シート2に、問題の解答(チェックボックスなどが正解のチェックになった画面) シート3には、シート1・シート2のデータを表形式で表示してあります。 問題のところで、どこにチェックを入れていたかは考えず、 問題の解答(シート2)と、まとめの表(シート3)を重視したいと思います。 下の図のような感じにしたいです。 左上が、シート1(問題) 右上が、シート2(解答) 一番下が、シート3(問題と解答 まとめ) です。 シート3には、問題、選択肢、答え、種類があります。 答えが一番面倒です。 ラジオボックスだった場合、 上から何番目がチェックされているかを数字で表します。 ○a ○b ●c ○d だった場合、上から3番目なので、[3] と表示します。 チェックボックス(複数回答)だった場合 どこがチェックされているのか、2進数で表記します。 □a ■b □c ■d □e チェックされているところを「1」と表記し、 「01010」と表示されるようにしたいです。 その右の列の[種類]ですが、 チェックボックスを使用するか、ラジオボタンを使用するかを選択できるように したいと考えています。 EXCELで作りたいのですが、 何か良い方法はありませんか? とても難しいことは分かっていますが、 どうしてもEXCELが良いのです。 詳しい方、知恵をお借りしたいです。 宜しくお願いします。

みんなの回答

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

> 使い方がよく分からず実行できませんでした… ThisWorkbookモジュールまたは標準モジュールに貼り付けて、 質問文の添付図の通り「問題」「回答」「問題と解答」の順にシートを並べ、 「問題と解答」シートのレイアウトを同図の通りにして、実行するだけですよ。 > マクロ(VBA)に書いて、保存して実行すれば良いのかと思ったのですが、上手く実行できません。 具体的に「何を」「どうして」みたが「どのように」上手くいかないのか、 (私の理解力の問題かもしれませんが)サッパリ伝わってきません。 と言っても、ここで「マクロ講座」をするつもりもないので、 マクロの使い方がわからないのであれば、別途学習くださいませ。

catpretty
質問者

補足

実行することができました! しかし、エラーウィンドウに、 「400」という文字が表示されます。 そして、”解答”のシートには何も表示されません。 エラーのせいか、”問題”のシートにも、 ”解答”のシートにも、チェックボックスの問題が 表示されません。 問題シートのラジオボタンは表示され、 その後のチェックボックス作成できずにエラーが出るのか、 解答のシートにラジオボタンが出ていないから エラーが出るのか分かりませんが、 回答頂けるとありがたいです。 求めていたのはこのマクロです!

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

>問題と解答を作りたいと考えています 既に作成済みなのではなく、「これから最初から作成する」という事でいいのですね? >ラジオボタン >チェックボックス エクセルではこれらについて、「フォーム」と「コントロールツールボックス」の2種類の中から選んで使用する事ができます。 以下では暫定的に、特にマクロを使用せずにフォームで作成する方法についてお話しします。 【ラジオボックス(オプションボタン)】 フォームツールバーから4個のオプションボタンをシート上に描画します。 実際には更に他にもオプションボタンのグループが存在する場合は、最初の(abcdの)4個のオプションボタンを「グループボックス」で囲います 4個の内の1個のオプションボタンを右クリック、コントロールの書式設定で「リンクするセル」欄に =Sheet3!$G$2 のように、目的のセルを直接指定します。(他のオプションボタン【同一グループの】については、設定する必要はありません) オプションボタンを切り替えると、G2セルに1から4の数字が自動で現れます。 【チェックボックス】 フォームツールバーから5個のチェックボックスをシート上に描画します 1つ目のチェックボックスを右クリック、コントロールの書式設定でリンクするセルとして例えばZ10セルを選定しておきます 同様に2個目から5個目までのチェックボックスそれぞれについても、Z11からZ14までリンクするセルを1つずつ設定します ちなみに解答シートを「汚し」たくなければ、シート3や更に他の作業用シートにリンクさせておいても構いません。 仮に解答シートのZ10からZ14までの5個のセルにリンクさせたとすると、チェックした該当セルにTRUEという値が現れます。 シート3のG3にはこれを数値に変換して =SUMPRODUCT(解答!Z10:Z14*1,{10000;1000;100;10;1}) と記入、更にセルの書式設定の表示形式のユーザー定義で 00000 と設定しておきます。

catpretty
質問者

補足

回答ありがとうございます。 すみません、説明不足でした。 問題と解答(シート3)を作成したら、 自動的に問題(シート1)と解答(シート2)が 作成されるようにしたいのです。 宜しくお願いします。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

実際問題、何をどうしたいのか微妙に曖昧ですね(笑)。 なので、 「“問題と解答”シートを起点として  “問題”シート(選択肢は白紙)、“解答”シート(正答にチェック済み)  の二つのシートを作る」 と曲解して、やっつけでざっくり作ってみました。 なにせやっつけ仕事なので無駄に長いです。 多分、動く・・・と思います。 Sub Create_QUESTION() Dim SR As Object Dim SH1 As Worksheet, SH2 As Worksheet, SH3 As Worksheet Dim TTop As Long, TLeft As Long Dim TWidth As Long, THeight As Long Dim GTop As Long, GLeft As Long Dim GWidth As Long, GHeight As Long Dim i As Long, j As Long, k As Long, l As Long Dim CText As String Set SH1 = Sheets(1): Set SH2 = Sheets(2): Set SH3 = Sheets(3) With SH1 .Activate For Each SR In .Shapes SR.Delete Next .Cells.Delete j = 2: k = 2 Do Until SH3.Cells(k, 1) = "" CText = "" .Cells(j, 2) = SH3.Cells(k, 1) j = j + 1 With .Cells(j, 2) GTop = .Top: GLeft = .Left With .Resize(1, 2) GWidth = .Width: GHeight = .Height End With End With With .GroupBoxes.Add(GLeft, GTop - 0.1, GWidth, GHeight) .Characters.Text = "" .Name = SH3.Cells(k, 1) End With i = 2: l = j - 1 Do Until SH3.Cells(k, i).Value = "" Or i = 7 With .Cells(j, 2) TTop = .Top: TLeft = .Left TWidth = .Width: THeight = .Height End With If SH3.Cells(k, 8) = "ラジオ" Then With .OptionButtons.Add(TLeft, TTop, TWidth, THeight) .Characters.Text = SH3.Cells(k, i) .LinkedCell = "$A$" & l End With ElseIf SH3.Cells(k, 8) = "チェック" Then With .CheckBoxes.Add(TLeft, TTop, TWidth, THeight) .Characters.Text = SH3.Cells(k, i) .LinkedCell = "$A$" & j If CText = "" Then CText = "=" Else CText = CText & "&" End If CText = CText & "R[" & i - 1 & "]C*1" End With .Cells(l, 1).FormulaR1C1 = CText Else MsgBox "エラー" Exit Sub End If i = i + 1: j = j + 1 Loop With .GroupBoxes(SH3.Cells(k, 1).Value) .Height = 15 * (i - 2) End With k = k + 1: j = j + 1 Loop .Columns("A:A").Font.ColorIndex = 2 .Range("A1").Select End With With SH2 .Activate For Each SR In .Shapes SR.Delete Next .Cells.Delete j = 2: k = 2 Do Until SH3.Cells(k, 1) = "" CText = "" .Cells(j, 2) = SH3.Cells(k, 1) j = j + 1 With .Cells(j, 2) GTop = .Top: GLeft = .Left With .Resize(1, 2) GWidth = .Width: GHeight = .Height End With End With With .GroupBoxes.Add(GLeft, GTop - 0.1, GWidth, GHeight) .Characters.Text = "" .Name = SH3.Cells(k, 1) End With i = 2: l = j - 1 Do Until SH3.Cells(k, i).Value = "" Or i = 7 With .Cells(j, 2) TTop = .Top: TLeft = .Left TWidth = .Width: THeight = .Height End With If SH3.Cells(k, 8) = "ラジオ" Then With .OptionButtons.Add(TLeft, TTop, TWidth, THeight) .Characters.Text = SH3.Cells(k, i) .LinkedCell = "$A$" & l If i - 1 = SH3.Cells(k, 7) Then .Value = xlOn End If End With ElseIf SH3.Cells(k, 8) = "チェック" Then With .CheckBoxes.Add(TLeft, TTop, TWidth, THeight) .Characters.Text = SH3.Cells(k, i) .LinkedCell = "$A$" & j If Mid(SH3.Cells(k, 7), i - 1, 1) = 1 Then .Value = xlOn End If If CText = "" Then CText = "=" Else CText = CText & "&" End If CText = CText & "R[" & i - 1 & "]C*1" End With .Cells(l, 1).FormulaR1C1 = CText Else MsgBox "エラー" Exit Sub End If i = i + 1: j = j + 1 Loop With .GroupBoxes(SH3.Cells(k, 1).Value) .Height = 15 * (i - 2) End With k = k + 1: j = j + 1 Loop .Columns("A:A").Font.ColorIndex = 2 .Range("A1").Select End With SH1.Activate End Sub

catpretty
質問者

お礼

実行することができました! ありがとうございます。 ラジオボックスは表示されました! しかし、エラーウィンドウに、 「400」という文字が表示されます。 そして、”解答”のシートには何も表示されません。 エラーのせいか、”問題”のシートにも、 ”解答”のシートにも、チェックボックスの問題が 表示されません。 tsubuyuki様の回答が私が求めていたものでした。 つたない説明で理解していただき、ありがとうございました。

catpretty
質問者

補足

回答ありがとうございます。 すみません、使い方がよく分からず 実行できませんでした… マクロ(VBA)に書いて、保存して実行すれば良いのかと思ったのですが、上手く実行できません。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

シート2は正解の解答を示した表ですね。 シート3はそれをまとめた表ということですね。 重要な点はシート1でもシート2でも同じことなのですがラジオボタンやチェックボックスの設置とそれらの選択の状態を示すシート上でのセルの表示ということになります。 例えばシート2で説明しますと初めにラジオボタンを設置するために「開発」タブの「挿入」をクリックして「フォームコントロール」グループに有る「オプションボタン」を選択してA4セル上で画像を描くようにします。 その画像を右クリックして「コントロールの書式設定」を選択し、「コントロール」タブの「リンクするセル」の窓にはA$4と入力してOKします。 このようにした画像を右クリックして「コピー」し、A5,A6,A7セル上に貼り付けます。 ラジオボタンのどれかをチェックするかでその順位がA4セルに表示されます。 A4セルの数値が目障りでしたらフォントの色を白色などに変更すればよいでしょう。 同様に「開発」タブの「挿入」をクリックして「フォームコントロール」グループに有る「チェックボックス」を選択してA10セル上で画像を描くようにします。 その画像を右クリックして「コントロールの書式設定」を選択し、「コントロール」タブの「リンクするセル」の窓にはA$10と入力してOKします。 チェックボックスの場合にはそれぞれのチェックボックスについて、リンクするセルをA$11,A$12,A$13,A$14などと変えることが必要です。 これらの一連の操作が終わった後で作業列としてシート2のG2セルには次の式を入力して下方にドラッグコピーします。 =IF(B3="","",IF(LEN(B3)>10,ROUNDDOWN(MAX(G$1:G2),-2)+100,IF(AND(LEN(B3)<10,G2>=100),MAX(G$1:G2)+1,""))) そこで問題と解答のシートですがA1セルからH1セルにはお示しのような項目名が入力されているとします。 A2セルには次の式を入力してH2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>MAX(解答!$G:$G)/100,"",IF(COLUMN(A1)=1,INDEX(解答!$B:$B,MATCH(ROW(A1)*100,解答!$G:$G,0)),IF(COLUMN(A1)<=6,IF(COUNTIF(解答!$G:$G,ROW(A1)*100+COLUMN(A1)-1)=0,"",INDEX(解答!$B:$B,MATCH(ROW(A1)*100+COLUMN(A1)-1,解答!$G:$G,0))),IF(COLUMN(A1)=7,IF(ISNUMBER(INDEX(解答!$A:$A,MATCH(ROW(A1)*100+1,解答!$G:$G,0))),INDEX(解答!$A:$A,MATCH(ROW(A1)*100+1,解答!$G:$G,0)),IF(INDEX(解答!$A:$A,MATCH(ROW(A1)*100+1,解答!$G:$G,0))=TRUE,1,0)&IF(INDEX(解答!$A:$A,MATCH(ROW(A1)*100+2,解答!$G:$G,0))=TRUE,1,0)&IF(INDEX(解答!$A:$A,MATCH(ROW(A1)*100+3,解答!$G:$G,0))=TRUE,1,0)&IF(INDEX(解答!$A:$A,MATCH(ROW(A1)*100+4,解答!$G:$G,0))=TRUE,1,0)&IF(INDEX(解答!$A:$A,MATCH(ROW(A1)*100+5,解答!$G:$G,0))=TRUE,1,0)),IF(COLUMN(A1)=8,IF(ISNUMBER(INDEX(解答!$A:$A,MATCH(ROW(A1)*100+1,解答!$G:$G,0))),"ラジオ","チェック"),"")))))

catpretty
質問者

補足

回答ありがとうございます。 すみません、説明不足でした。 問題と解答(シート3)を作成したら、 自動的に問題(シート1)と解答(シート2)が 作成されるようにしたいのです。 宜しくお願いします。

関連するQ&A

専門家に質問してみよう