かめ(管理人の一人)が学生の頃から積み上げてきたあるものの、集大成ができあがりつつあるため紹介したいと思います。
それは、単語帳です。
過去の【かめの甲羅】シリーズは見た目も努力もなかなか積み上げておりますが、今回のは時間をかけて考察した結果を積み上げてきましたので、
一般のかたにも実用的なものと自負しております!
※過去のかめの甲羅は、以下のリンクからご参照いただけます。
かめと単語帳
かめは、母親から「学校ではしっかり勉強する」ように言われて育てられましたので、超まじめにテスト勉強に励んでいました。
小学生の頃は遊んでいても特に問題なかったのですが、中学校に入ってからは中間・期末テストといったように特定の時期に集中的にテストを行うようになったため、最初はテストの点が悪くなりました。
テストまでの期間が長いので、授業中にノートをとった内容を前日にちょっと見るぐらいでは、忘れてしまっていてなかなか覚えられなかった記憶があります。
そこでかめがやり始めたのが、
テスト用にテスト範囲の内容を整理して、単語帳形式にして書き直すことでした。
かめの家は非常に節約家でしたので、父親が会社から持って帰ってくるA4コピー用紙の裏紙の白いほうを縦に二つに折り、左に問題を書き、折り目の右側に答えを書いて単語帳のように暗記に利用していました。
自ら問題を考えることで頭を使いますので、これが頭に強く残って、ほとんど繰り返しをせずとも暗記ができていました。
一方で、複数の科目を同時に勉強する必要がある状態ではなかなか時間がかかる方法であるため、部活も遊びも楽しみたい中学生には効率が悪いと感じていました。
もやもやしながら同様の方法で勉強を続けていたところ、中学校3年生のときに配布された漢字の教科書において感動の出会いがありました。
それは、書いて覚えるタイプではなく、
見て覚える赤シート式の漢字の教科書でした。
※写真は高校時代にお世話になったシステム英単語(出版:駿台文庫)です。
それまでは書くことで覚えられると思っていましたが、全く漢字を書かなくても覚えられることを体感して非常に驚きました。
高校生になって、さらに勉強の内容が高度化し難しくなったのと同時に、部活の時間も遅くなり思うように勉強時間が取れなくなりました。
そこで、バスでの移動時間での勉強が有効と考え、英単語帳を活用するようになりました。
かめは非常に欲張りで負けず嫌いなので、人目を避けるように、
バスの中で握力トレーニングをしながら単語帳をしていたのがとても懐かしいです(笑)
※写真はシステム英単語をやりながら、握力トレーニング(回して鍛えるやつ)をしているイメージになります。バスの中では回して鍛えるやつは、うるさくて使えませんので当時は握って鍛えるやつをリュックに忍ばせていました(笑)
加えて、かめの家は非常に節約症でしたので、父親が会社から持って帰ってくるA4コピー用紙の裏紙にたまに混ざっている、何も印刷されていないA4コピー用紙をカットして単語帳を作っていました(笑)
市販で売られている単語帳カードはお小遣いがなくて買えなかったためコピー用紙で作っていましたが、
厚みが薄くてたくさん重ねてもかさばりにくい点が良かったため、かめが大学生になってアルバイトを始めるまでは愛用していました。
というのは、市販の赤シート式の英単語帳は数多くのラインナップがありますが、
自分が覚えたいと思う単語のみを選択したり、覚えてしまった単語を除外したりする上で、
単語のページが決まっている本のタイプの単語帳は使いずらいと感じていたためです。
本の覚えた部分を塗りつぶしたり、折り曲げたりするのに抵抗がありましたし、時間をおいてもう一周するときには忘れていることもあって、うまく単語帳を活用できていなかった記憶があります。
さらに、本の単語帳は前後の単語の配列が決まっているため、
順番や位置によって空間的に単語を覚えてしまっている恐れがあります。
学校のテストで点数を取る上では、教科書のイラストや前後の学習の流れに従って短時間で覚えられるため有効な手段です。
一方で、全く異なる場面で出てきた場合には思い出しにくくなってしまうと思っています。
これまでの経験を基に、単語帳好きのかめが考える理想の単語帳のポイントを以下にまとめます。
-
自分がその時に勉強したい単語を選ぶことができる。
-
単語帳を自分で作ったり増やしたりすることが簡単にできる。
-
覚えた単語の除外や忘れた頃の復習が簡単にできる。
-
出題される順番やページが視覚的・空間的に連続ではない。
-
かさばらず持ち運びが便利である。
-
費用をかけずに実現できる。
もはや、紙媒体での単語帳では限界がありますので、
エクセルマクロを利用した登録式デジタル単語帳【かめの甲羅3号】
を今回作成しました!!
デジタル単語帳のダウンロード
かめが生きている間は当ライブラリーにエクセルファイルを公開し続けますので、
利用者様の責任の範囲でのダウンロードおよびご利用が可能です。
↓↓↓クリックで.Zip圧縮ファイルがダウンロード可能です。
デジタル単語帳【かめの甲羅3号】Rev.1_20200531.zip
現在の最新版:Rev.1_2020年5月31日
当単語帳はMicrosoft さんのOfficeのサイトで無料でダウンロード可能な単語帳を、
かめなりに機能を追加して編集したものとなります。
Microsoftさんダウンロードサイトはこちら:https://www.microsoft.com/ja-jp/office/pipc/newlife/students.aspx
<かめが追加した機能一覧>
・カード表裏分離
・例文・発音・引用・場面・周回番号欄追加
・意味-スペル出題形式変更機能
・キーワードフィルタ機能
・✔マーク追加-消去機能
・★マーク読み飛ばし機能
※かめはエクセルマクロ初心者ですので、マクロの文章が最適化されていない点はご容赦ください(笑)
※今後、バグの修正や機能の追加があれば、Rev.を改定してエクセルデータをアップロードする予定です。
※登録した単語のリストは対象のセルの一括コピーアンドペーストで移動可能ですので、改訂版への移行も簡単です。
使い方の概要
使い方の詳細はエクセルファイル中に記載しておりますので、ここでは簡単な説明に留めます。
1.エクセルファイルをダウンロードする。(当記事にて公開中↑↑↑)
2.ファイルを開いてマクロを有効にする。
→エクセルマクロは事前に設定したデータ処理を自動的に行うため、危険に対する注意を促す確認のステップが盛り込まれています。利用者が問題ないと判断した上で、許可をしてマクロを実行する必要があります。
→ファイルを開いたときに黄色で上部に表示される「編集を有効にする」および「コンテンツの有効化」をそれぞれクリックすることで、単語帳の機能を利用することができるようになります。
※セキュリティー管理については、利用者様にてご判断いただければ幸いです。
※MicrosoftさんのOfficeの専用サイトにてダウンロードできる単語帳においても、同様の操作が必要ですので、かめの甲羅3号のご利用が不安でございましたら、Officeの専用サイトにてダウンロードできる単語帳のマクロを編集いただくのが安全とかめは考えます。
3.「データシート」シート内のリストでお好みの単語を登録する。
→「単語・熟語」の列に上から詰めて単語を登録すれば、「単語帳」シートで入力した内容が表示されるようになります。
→インターネット上には多くの単語・熟語検索ツールがありますので、発音記号も含めて簡単にデータのコピーが可能です。
→単語と意味の欄に入力があれば、単語帳として利用可能ですので、
発音や例文などの用意された欄を無理に全て入力せずに活用いただいた方が勉強時間短縮に効果的です!
4.「単語帳」シートで出題される形式やキーワードを選択する。
→「出題形式」欄:単語の意味を出題するか、スペルを出題するか選べます。
→「ランダム」欄:登録した単語をランダムに出題するか選べます。
→「フィルタ」欄:キーワードを入力すると、そのキーワードを含む単語のみ出題されます。
5.単語帳による学習を開始する。
→開始前に「RESET」ボタンクリック。「FLIP」ボタンクリックで出題と正解の表示が繰り返されます。
6.✔マークと★マークを活用する。
→「CHECK」ボタンクリックで✔マークをマーキングできます。(消去は「CLEAR」か「CLEAR ALL CLEAR」ボタンをクリック。)
→【重要】✔マークを「フィルタ」欄に入力して「FLIP」ボタンクリックすると✔マークを入れた単語しか出題されなくなるので非常に便利です!
→「データシート」シート内で★マークを記入した単語は「単語帳」シートで出題されなくなります。
※エクセル内の行や列を勝手に増やしてしまうと、各ボタンに割り振られたマクロが正常に動作しなくなり、使えなくなりますのでご注意ください。
※無限ループに入ってしまった場合は、タスクマネージャーにてエクセルを強制終了することをお勧めします。
※単語登録後に強制終了する事態になった場合は、再登録することになり絶望するため、こまめな保存をお勧めします。
※動作がおかしくなってしまって復旧できないときは、ダウンロードしたエクセルに【データシート】に登録した単語をコピーアンドペーストすればそのまま使えます。
感想
Microsoft Office エクセルのマクロ機能を利用することで、
理想の単語帳のポイントはほとんどカバーすることができました。
エクセルマクロを少し理解すれば、機能の追加も簡単にできますので自分好みの単語帳にカスタマイズ可能です♪
エクセルマクロは、大学の研究室や仕事場でもよく活用されていますので、
学生の教育課程の早い段階でMicrosoft Officeを活用するのが良いとかめは考えています。
また、これまで本の単語帳で暗記しきれていなかった単語をピックアップしてリスト化できますので、今後は単語帳を本棚に並べる必要もなさそうですね♪
一方で、単語帳において最も重要な【携帯性】が失われていますので、
将来的にエクセルマクロがスマートフォンやタブレットで気軽に利用できるようになることをかめは期待しています。
※スマートフォンなどでエクセルは見れますが、マクロファイルは高性能な端末でなければ現状では開けない認識です。
今後もオリジナル単語帳を活用して、
業務効率化・語学力向上に努めて参ります。
当サイトではこの他にも無料でご利用可能な教材をアップロードしておりますので、よろしければご活用ください。
感想Rev.1改訂履歴(2020年5月31日)
1.データシートの登録行の切り取り・挿入・削除を行ってもNo.がバグらないように改良
「No.」の列のセルに「=INDIRECT(ADDRESS(ROW()-1,COLUMN())) +1」の関数を入力することで、一つ上のセルのNo.に1を加えてた表示をするようにしました。
これで、完全に覚えた単語の行を消したり、類似する単語を並べ替えたりしてもNo.に関するバグは起こりにくくなります。
ついでに、No.も9999まで増やしておきました(笑)
2.「フィルタ候補登録欄」の追加
FLASH CARDシートのフィルタ機能は、大文字・小文字も正確に入力しないと機能しません。
よく利用するキーワードは「フィルタ候補登録欄」に8個まで登録して、ドロップダウンリストから選択できるようにしました♪
例えば、イラストにあるように【 ✔ ・ 動 ・ 名 ・ TOEIC 】の4つをフィルタ候補登録欄に登録しておけば、TOEICに関連する動詞の単語で要チェックの単語を集中的に勉強した後に、名詞の勉強に切り替えるのが簡単になります。
※注意:このフィルタ機能は、入力項目を増やすほど絞り込みが厳しくなる【AND方式】ため、2つ以上のフィルタ条件を同時に満たす単語がない場合は無限ループのバグとなります。
これに伴い、入力の自由度を高めるために、データシートの「引用文字候補」欄は廃止しました。
3.覚えた単語を除外する「ELIMINATE」ボタンを追加
覚えた単語はデータシートに★マークを付けることで出題されなくなりますが、FLASH CARDシートの方でも除外ができるようにボタンを追加しました。
ボタンを押すことで現在表示されている単語に★マークが付けられ、全体の★マークの数のカウンターも✓マーク同様に用意しました。
また、全ての✓を外す「CLEAR ALL ✓」に加えて、「CLEAR ALL ★」ボタンも追加し、欄外に移動しています。
単語帳をやっていると眠くなってきて、うっかり思っていたのと違うボタンを押すことがよくあったので、しましまの注意表示にデザイン変更しています(笑)
エクセルマクロ公開(2021年1月17日)
当サイトのダウンロードファイルのご利用が心配な方のために、Rev.1の時点でのエクセルマクロも公開しておきます。
※もっと早く気付けばよかったですね(笑)
これで、Microsoftさんダウンロードサイトでエクセルをダウンロードして改造することで、誰でも安全にかめのデジタル単語帳が再現できるわけです♪
ただし、エクセルシートの列・行、ボタン・ドロップダウンリストなどはMicrosoftさんのものから増やしたりしていますので、手直しが必要ではあります(笑)
~~~以下エクセルマクロの文章をそのままコピーして貼り付けたものを背景黒色で掲載します~~~
※表示されていませんが、「RNDN」と「RNDNP」もあります。
1.ThisWorkbook内
Option Explicit Private Sub Workbook_BeforeClose(Cancel As Boolean) ''※終了時に自動実行 Worksheets("単語帳").Range("E6:L27").Value = "" End Sub Private Sub Workbook_Open() ''※起動時に自動実行 cnt = Worksheets("データシート").Range("C5").End(xlDown).Offset(0, -1) ReDim KazuC(1 To cnt + 1) Q = True QNo = 1 FromNext = True i = 0 k = 1 Worksheets("単語帳").Range("O9").Value = "" Worksheets("単語帳").Range("J3:N3").Value = "" Worksheets("単語帳").Range("N10").Value = "" End Sub
2.Module1内
Option Explicit Public QNo As Integer Public cnt As Integer Public cntt As Integer Public PPP As Integer Public KazuC() As Boolean Public Q As Boolean Public FromNext As Boolean Public i As Integer Public k As Integer Public m As Integer Dim Sentence As String Dim SentenceA As String Dim SentenceB As String Dim SentenceC As String Dim SentenceP As String Dim Sentence1 As String Dim Sentence2 As String Dim Sentence3 As String Dim Sentence4 As String Dim Sentence5 As String Sub Card_Clear() '画面表示と変数の初期化、「RESET」ボタンに割り当て '問題数を数える xlDownは一番下に移動、Offsetは移動先から移動 cnt = Worksheets("データシート").Range("C5").End(xlDown).Offset(0, -1) cntt = cnt + 1 '周回数を記録する If QNo > cnt Then k = k + 1 Else If Range("F3").Value = "なし" Then k = 1 Range("N10").Value = "" Else If m >= cnt Then k = k + 1 Else k = 1 Range("N10").Value = "" End If End If End If '配列の数をデータシートにする ReDim KazuC(1 To cntt) i = 1 'KazuCは問題表示履歴。全てFalseで未表示にする。 Do While i <= cntt KazuC(i) = False i = i + 1 Loop 'フィルタでスキップする問題を表示済みにする Call Filter i = 1 Do While KazuC(i) = True i = i + 1 Loop QNo = i Worksheets("単語帳").Range("E6:L27").Value = "" Worksheets("単語帳").Range("O9").Value = "" i = 0 Q = True End Sub Sub Filter() 'フィルタでスキップする問題を表示済みにする i = 1 m = 0 Do While i <= cnt SentenceA = Range("J3").Value SentenceB = Range("L3").Value SentenceC = Range("N3").Value SentenceP = Worksheets("データシート").Range("C5").Offset(i - 1, 0) & Worksheets("データシート").Range("D5").Offset(i - 1, 0) & Worksheets("データシート").Range("E5").Offset(i - 1, 0) & Worksheets("データシート").Range("F5").Offset(i - 1, 0) & Worksheets("データシート").Range("G5").Offset(i - 1, 0) & Worksheets("データシート").Range("H5").Offset(i - 1, 0) & Worksheets("データシート").Range("I5").Offset(i - 1, 0) & Worksheets("データシート").Range("J5").Offset(i - 1, 0) & Worksheets("データシート").Range("K5").Offset(i - 1, 0) If SentenceP Like "*" & SentenceA & "*" Then Else If Range("J3").Value = "" Then Else KazuC(i) = True End If End If If SentenceP Like "*" & SentenceB & "*" Then Else If Range("L3").Value = "" Then Else KazuC(i) = True End If End If If SentenceP Like "*" & SentenceC & "*" Then Else If Range("N3").Value = "" Then Else KazuC(i) = True End If End If If SentenceP Like "*★*" Then KazuC(i) = True End If 'ランダム用に表示済みの数をカウントする。 If KazuC(i) = True Then m = m + 1 End If i = i + 1 Loop End Sub Sub ACheck_Clear() 'チェックマークを全て消す、「CLEAR ALL CHECK」ボタンに割り当て Worksheets("データシート").Range("I5:J10003").Value = "" End Sub Sub AEliminate_Clear() '★マークを全て消す、「CLEAR ALL ★」ボタンに割り当て Worksheets("データシート").Range("K5:K10003").Value = "" End Sub Sub PartClear() '「CLEAR」ボタンでチェックを消す If Range("D3").Value = "意味" Then PPP = Range("O9").Value Worksheets("データシート").Range("I5").Offset(PPP - 1, 0).Value = "" Else PPP = Range("O9").Value Worksheets("データシート").Range("J5").Offset(PPP - 1, 0).Value = "" End If End Sub Sub PartEliminate() '「Eliminate」ボタンで★マークをつける PPP = Range("O9").Value Worksheets("データシート").Range("K5").Offset(PPP - 1, 0).Value = Worksheets("データシート").Range("K3").Value End Sub Sub PartCheck() '「CHECK」ボタンでチェックする If Range("D3").Value = "意味" Then PPP = Range("O9").Value Worksheets("データシート").Range("I5").Offset(PPP - 1, 0).Value = Worksheets("データシート").Range("I3").Value Else PPP = Range("O9").Value Worksheets("データシート").Range("J5").Offset(PPP - 1, 0).Value = Worksheets("データシート").Range("I3").Value End If End Sub Sub In_orderN() '出題形式「意味」、ランダム「なし」で「FLIP」ボタンを押したときに呼び出されるループ 'フィルタでスキップする問題を表示済みにする Call Filter '問題が表示済みあるいはフィルタで除去済みであればスキップする If Q = True Then Do While KazuC(QNo) = True QNo = QNo + 1 Loop End If '最後まで行ったらKazuCをリセットする。 If QNo > cnt Then Call Card_Clear End If '問題番号の表示 Range("O9").Value = Format(QNo, "000") 'Q=Trueの時には問題を、Falseの時には解答を表示する If Q = True Then '新しい問題を表示する Sentence = Worksheets("データシート").Range("C5").Offset(QNo - 1, 0).Value Sentence1 = Worksheets("データシート").Range("D5").Offset(QNo - 1, 0).Value Sentence5 = Worksheets("データシート").Range("H5").Offset(QNo - 1, 0).Value Range("E6").Value = Sentence Range("E9").Value = "[" & Sentence1 & "]" Range("E12").Value = Sentence5 '問題番号を表示済みにする KazuC(QNo) = True '前の解答を消す Range("E18:L27").Value = "" '次に解答を表示するためにQ変数をFalseにセットする Q = False Else 'Falseの場合は回答を表示させる。 Sentence2 = Worksheets("データシート").Range("E5").Offset(QNo - 1, 0).Value Sentence3 = Worksheets("データシート").Range("F5").Offset(QNo - 1, 0).Value Sentence4 = Worksheets("データシート").Range("G5").Offset(QNo - 1, 0).Value Range("E18").Value = Sentence2 Range("E22").Value = Sentence3 Range("E25").Value = Sentence4 '問題を次に進める Q = True QNo = QNo + 1 End If End Sub Sub In_orderB() '出題形式「スペル」、ランダム「なし」で「FLIP」ボタンを押したときに呼び出されるループ 'フィルタでスキップする問題を表示済みにする Call Filter '問題が表示済みあるいはフィルタで除去済みであればスキップする If Q = True Then Do While KazuC(QNo) = True QNo = QNo + 1 Loop End If '最後まで行ったらKazuCをリセットする。 If QNo > cnt Then Call Card_Clear End If '問題番号の表示 Range("O9").Value = Format(QNo, "000") 'Q=Trueの時には問題を、Falseの時には解答を表示する If Q = True Then '新しい問題を表示する Sentence2 = Worksheets("データシート").Range("E5").Offset(QNo - 1, 0).Value Sentence3 = Worksheets("データシート").Range("F5").Offset(QNo - 1, 0).Value Sentence4 = Worksheets("データシート").Range("G5").Offset(QNo - 1, 0).Value Range("E18").Value = Sentence2 Range("E22").Value = Sentence3 Range("E25").Value = Sentence4 '問題番号を表示済みにする KazuC(QNo) = True '前の解答を消す Range("E6:L15").Value = "" '次に解答を表示するためにQ変数をFalseにセットする Q = False Else 'Falseの場合は回答を表示させる。 Sentence = Worksheets("データシート").Range("C5").Offset(QNo - 1, 0).Value Sentence1 = Worksheets("データシート").Range("D5").Offset(QNo - 1, 0).Value Sentence5 = Worksheets("データシート").Range("H5").Offset(QNo - 1, 0).Value Range("E6").Value = Sentence Range("E9").Value = "[" & Sentence1 & "]" Range("E12").Value = Sentence5 '問題を次に進める Q = True QNo = QNo + 1 End If End Sub Sub RNDN() '出題形式「意味」、ランダム「あり」で「FLIP」ボタンを押したときに呼び出されるループ Randomize 'フィルタでスキップする問題を表示済みにする Call Filter '全て表示済みになったらKazuCをリセットする。 If m >= cnt Then Call Card_Clear End If '問題が未表示になるまでランダムスキップする If Q = True Then Do QNo = Int(cnt * Rnd + 1) Loop Until KazuC(QNo) = False End If '問題番号の表示 Range("O9").Value = Format(QNo, "000") 'Q=Trueの時には問題を、Falseの時には解答を表示する If Q = True Then '新しい問題を表示する Sentence = Worksheets("データシート").Range("C5").Offset(QNo - 1, 0).Value Sentence1 = Worksheets("データシート").Range("D5").Offset(QNo - 1, 0).Value Sentence5 = Worksheets("データシート").Range("H5").Offset(QNo - 1, 0).Value Range("E6").Value = Sentence Range("E9").Value = "[" & Sentence1 & "]" Range("E12").Value = Sentence5 '前の解答を消す Range("E18:L27").Value = "" '次に解答を表示するためにQ変数をFalseにセットする Q = False Else 'Falseの場合は回答を表示させる。 Sentence2 = Worksheets("データシート").Range("E5").Offset(QNo - 1, 0).Value Sentence3 = Worksheets("データシート").Range("F5").Offset(QNo - 1, 0).Value Sentence4 = Worksheets("データシート").Range("G5").Offset(QNo - 1, 0).Value Range("E18").Value = Sentence2 Range("E22").Value = Sentence3 Range("E25").Value = Sentence4 '問題番号を表示済みにする KazuC(QNo) = True Q = True End If End Sub Sub RNDB() '出題形式「スペル」、ランダム「あり」で「FLIP」ボタンを押したときに呼び出されるループ Randomize 'フィルタでスキップする問題を表示済みにする Call Filter '全て表示済みになったらKazuCをリセットする。 If m >= cnt Then Call Card_Clear End If '問題が未表示になるまでランダムスキップする If Q = True Then Do QNo = Int(cnt * Rnd + 1) Loop Until KazuC(QNo) = False End If '問題番号の表示 Range("O9").Value = Format(QNo, "000") 'Q=Trueの時には問題を、Falseの時には解答を表示する If Q = True Then '新しい問題を表示する Sentence2 = Worksheets("データシート").Range("E5").Offset(QNo - 1, 0).Value Sentence3 = Worksheets("データシート").Range("F5").Offset(QNo - 1, 0).Value Sentence4 = Worksheets("データシート").Range("G5").Offset(QNo - 1, 0).Value Range("E18").Value = Sentence2 Range("E22").Value = Sentence3 Range("E25").Value = Sentence4 '前の解答を消す Range("E6:L15").Value = "" '次に解答を表示するためにQ変数をFalseにセットする Q = False Else 'Falseの場合は回答を表示させる。 Sentence = Worksheets("データシート").Range("C5").Offset(QNo - 1, 0).Value Sentence1 = Worksheets("データシート").Range("D5").Offset(QNo - 1, 0).Value Sentence5 = Worksheets("データシート").Range("H5").Offset(QNo - 1, 0).Value Range("E6").Value = Sentence Range("E9").Value = "[" & Sentence1 & "]" Range("E12").Value = Sentence5 '問題番号を表示済みにする KazuC(QNo) = True Q = True End If End Sub Sub RNDNP() '出題傾向「意味」、ランダム「あり」で「FLIP」ボタンを押したときに呼び出されるループ Randomize '問題数を数える cnt = Worksheets("データシート").Range("C5").End(xlDown).Offset(0, -1) '問題と解答をセットする If Q = True Then QNo = 1 i = 0 '問題が表示済みかは「KazuC(QNo)」の真偽でチェックしている Do While QNo <= cnt If KazuC(QNo) = True Then i = i + 1 End If QNo = QNo + 1 Loop 'すべての問題を表示済みの場合には、表示済みチェックを初期化(KazuCのリセット機能) If i = cnt Then QNo = 1 Do While QNo <= cnt KazuC(QNo) = False QNo = QNo + 1 Loop End If '既出問題かどうかをチェックして新しい問題番号を表示済みにする Do QNo = Int(cnt * Rnd + 1) Loop Until KazuC(QNo) = False KazuC(QNo) = True '問題番号に従って変数に問題文または解答をセット Sentence = Worksheets("データシート").Range("C5").Offset(QNo - 1, 0).Value Sentence1 = Worksheets("データシート").Range("D5").Offset(QNo - 1, 0).Value Sentence5 = Worksheets("データシート").Range("H5").Offset(QNo - 1, 0).Value Range("E6").Value = Sentence Range("E9").Value = "[" & Sentence1 & "]" Range("E12").Value = Sentence5 Range("E18:L27").Value = "" Q = False Else Sentence2 = Worksheets("データシート").Range("E5").Offset(QNo - 1, 0).Value Sentence3 = Worksheets("データシート").Range("F5").Offset(QNo - 1, 0).Value Sentence4 = Worksheets("データシート").Range("G5").Offset(QNo - 1, 0).Value '新しい内容を表示する Range("E18").Value = Sentence2 Range("E22").Value = Sentence3 Range("E25").Value = Sentence4 Q = True End If '問題番号をセット Range("O9").Value = Format(QNo, "000") '問題と解答を表示 End Sub Sub RNDBB() 'ランダム「あり」で「FLIP」ボタンを押したときに呼び出されるループ Randomize '問題数を数える cnt = Worksheets("データシート").Range("C5").End(xlDown).Offset(0, -1) '問題と解答をセットする If Q = True Then QNo = 1 i = 0 '問題が表示済みかは「KazuC(QNo)」の真偽でチェックしている Do While QNo <= cnt If KazuC(QNo) = True Then i = i + 1 End If QNo = QNo + 1 Loop 'すべての問題を表示済みの場合には、表示済みチェックを初期化(KazuCのリセット機能) If i = cnt Then QNo = 1 Do While QNo <= cnt KazuC(QNo) = False QNo = QNo + 1 Loop End If '既出問題かどうかをチェックして新しい問題番号を表示済みにする Do QNo = Int(cnt * Rnd + 1) Loop Until KazuC(QNo) = False KazuC(QNo) = True '問題番号に従って変数に問題文または解答をセット Sentence = Worksheets("データシート").Range("C5").Offset(QNo - 1, 0).Value Sentence1 = Worksheets("データシート").Range("D5").Offset(QNo - 1, 0).Value Sentence5 = Worksheets("データシート").Range("H5").Offset(QNo - 1, 0).Value Range("E6").Value = Sentence Range("E9").Value = "[" & Sentence1 & "]" Range("E12").Value = Sentence5 Range("E18:L27").Value = "" Q = False Else Sentence2 = Worksheets("データシート").Range("E5").Offset(QNo - 1, 0).Value Sentence3 = Worksheets("データシート").Range("F5").Offset(QNo - 1, 0).Value Sentence4 = Worksheets("データシート").Range("G5").Offset(QNo - 1, 0).Value '新しい内容を表示する Range("E18").Value = Sentence2 Range("E22").Value = Sentence3 Range("E25").Value = Sentence4 Q = True End If '問題番号をセット Range("O9").Value = Format(QNo, "000") '問題と解答を表示 End Sub Sub HyblidN() '「FLIP」ボタンで実行する If Range("D3").Value = "意味" Then If Range("F3").Value = "なし" Then Call In_orderN Else Call RNDN End If Else If Range("F3").Value = "なし" Then Call In_orderB Else Call RNDB End If End If '周回数を表示する Range("N10").Value = k End Sub