MENU

wordHolic用データをエクセルVBAでINPUTBOX_機能追加

前回作成したエクセルでの確認テスト作成機能に新たな内容を追加してみました。

目次

出題範囲選択機能を追加

出題範囲を選択するにチェックすると入力ボックスが現れます。

追加したコードとしてチェックボックス2がチェックされている場合出題範囲を入力する為のインプットボックスを出して入力した範囲にプロラムを起動します。

If CheckBox2.Value = True Then
Dim ans1 As String
Dim ans2 As String
ans1 = InputBox(“出題範囲の選択・出題始めのNoを入力してください”)
If ans1 > b Then
MsgBox “出題Noに誤りがあります。”
End
ElseIf ans1 = “” Then
ans1 = 1
Else
End If
ans2 = InputBox(“出題範囲の選択・出題終わりのNoを入力してください”)
If ans1 > ans1 Then
MsgBox “出題Noに誤りがあります。”
End
ElseIf ans2 = “” Then
and2 = b
Else
End If
ans1 = ans1 + 1
b = ans2 + 1
Else
ans1 = 2
End If

使用したVBAはIF文とINPUTBOXです。

①IF文を使用し「もしチェックボックス2」がTrueならINPUTBOXを表示して出題範囲に入力を促しなさいとしもしINPUTBOXへの入力が無ければ終了しなさいとしています。

If~の基本的な構成

If構成分はVBAマクロを作成する上で最も使用頻度が高い重要なプログラムですのでしっかり覚えましょう。

if 条件式 Then
条件式を満たした場合の処理

「条件式」CheckBox2.Value = True ・・・・・チェックボックス2がTrue

「条件を満たした場合の処理」ans1 = InputBox(“出題範囲の選択・出題始めのNoを入力してください”)・・・・INPUTBOXで入力されたデータをans1としなさい

という処理

またはElseに後に記載して条件式を満たさない場合の処理を記載しすることで条件を満たさない場合にも処理する事が出来るようになります。処理終わりにはIfが終了したことを記すためEndIfでを処理を終了します。

If  条件式  Then
 条件式を満たした場合の処理
Else
  条件式を満たさない場合の処理
End If

Else構成分をElseIfにする事で新たな条件式を追加する事ができます。

ElseIf 条件式 Then

INPUTBOXの基本的な構成
InputBox(prompt[, title] [, default] [, xpos] [, ypos] )

  • prompt (入力必須): ユーザー対してメッセージを表示する内容を記載します。
    今回は「”出題範囲の選択・出題始めのNoを入力してください”」とユーザーに対して出題範囲を入力する様にコメントしています。特に設定は必要なく使用出来るためEXCELでVBAプログラムを使ってマクロを起動させる場合には重宝します。
  • title(入力なしでもOK):Tには 入力ボックスのタイトルを記載します。入力しなくても普通に機能します。
    上記のプログラムにInputBox(“出題範囲の選択・出題始めのNoを入力してください”, “範囲入力”)
    「,”入力範囲”」を追加する事でタイトル入力範囲を表示しています。
  • default (入力なしでもOK): ユーザーが入力する値の初期値を表す文字列です。省略した場合、空の文字列が初期値として表示されます。
  • xpos(入力なしでもOK): ダイアログボックスの表示位置Xを指定します。省略した場合、中央に表示されます。
  • Ypos(入力なしでもOK): ダイアログボックスの表示位置Y位置を指定します。省略した場合、上から1/3の位置にに表示されます。

INPUTBOXはEXCELマクロを使用する場合重宝する機能ですので覚えておきましょう。

答え合わせ機能の追加

オプションボタンで和訳と英記を選択して開始ボタンをクリックする事で自動で答え合わせを行います。
現在開いているシートと同じデータの答えを探してデータの一致と不一致を自動的にチェックして、該当セルをピンク色に着色し、不正解情報を記録します。最後には正答率も表記されます。
和訳は、文字データをフリガナ(ふりがな)を取得して比較して判断します。日本語の文字列の一致をふりがなで検証す為漢字回答でもひらがな回答でもカタカナ回答でも判断可能です。英記に関しては大文字・小文字識別なしで判断します。

違いを確認してみよう

Sub 和訳答え合わせ()

Dim a, b, c, Nam, NamQ, Na, N1, N2
Dim e1, e2, f, f1, f2

Dim activeSheet As Worksheet
Set activeSheet = ActiveWorkbook.activeSheet

Dim sheetName As String
sheetName = activeSheet.Name
Nam = sheetName
NamQ = Nam + "Q"
Na = Mid(Nam, 5)

a = Sheets(Nam).Cells(Rows.Count, 2).End(xlUp).Row + 1 ‘データ数の取得
b = 2
c = Sheets(Na).Cells(Rows.Count, 2).End(xlUp).Row ‘データ数の取得
f1 = 0
f2 = 0

For b = 2 To a

Dim string1 As String
Dim string2 As String
Dim string3 As String
Dim string4 As String
Dim result As Integer
Dim result1 As Integer

string1 = Trim(Sheets(Nam).Cells(b, 3).Value)
string2 = Trim(Sheets(NamQ).Cells(b, 3).Value)
string3 = Trim(Sheets(Nam).Cells(b, 6).Value)
string4 = Trim(Sheets(NamQ).Cells(b, 6).Value)
N1 = Trim(Sheets(Nam).Cells(b, 4).Value)
N2 = Trim(Sheets(Nam).Cells(b, 1).Value)


result = StrComp(Application.GetPhonetic(string1), Application.GetPhonetic(string2), vbBinaryCompare)
result1 = StrComp(Application.GetPhonetic(string3), Application.GetPhonetic(string4), vbBinaryCompare)

If result <> 0 Then
‘Sheets(Nam).Cells(b, 1).Interior.ColorIndex = 38 ‘ ピンク
Sheets(Nam).Cells(b, 3).Interior.ColorIndex = 38 ‘ ピンク
e1 = Sheets(Nam).Cells(b, 1)
f2 = f2 + 1

d = 2
Do While d < c
If Sheets(Na).Cells(d, 1) = e1 Then
Sheets(Na).Cells(d, 8) = “TRUE”

Else
End If
d = d + 1
Loop

ElseIf N2 = “” Then
GoTo y
Else
f1 = f1 + 1
End If
y:

If result1 <> 0 Then
‘Sheets(Nam).Cells(b, 4).Interior.ColorIndex = 38 ‘ ピンク
Sheets(Nam).Cells(b, 6).Interior.ColorIndex = 38 ‘ ピンク
e2 = Sheets(Nam).Cells(b, 4)
f2 = f2 + 1

d = 2
Do While d < c
If Sheets(Na).Cells(d, 1) = e2 Then
Sheets(Na).Cells(d, 8) = “TRUE”

Else
End If
d = d + 1
Loop

ElseIf N1 = “” Then
GoTo z
Else
f1 = f1 + 1
End If
z:

Next b

f = f1 + f2
‘Unload UserForm3
MsgBox f & “問中_” & f2 & “問不正解です”
‘MsgBox f2
‘Unload UserForm3

End Sub

Sub 英記答え合わせ()

Dim a, b, c, Nam, NamQ, Na, N1, N2
Dim e1, e2, f, f1, f2

Dim activeSheet As Worksheet
Set activeSheet = ActiveWorkbook.activeSheet

Dim sheetName As String
sheetName = activeSheet.Name
Nam = sheetName
NamQ = Nam + "Q"
Na = Mid(Nam, 5)

a = Sheets(Nam).Cells(Rows.Count, 2).End(xlUp).Row + 1 ‘データ数の取得
b = 2
c = Sheets(Na).Cells(Rows.Count, 2).End(xlUp).Row ‘データ数の取得
f1 = 0
f2 = 0

For b = 2 To a

Dim string1 As String
Dim string2 As String
Dim string3 As String
Dim string4 As String
Dim result As Integer
Dim result1 As Integer

string1 = Trim(Sheets(Nam).Cells(b, 3).Value)
string2 = Trim(Sheets(NamQ).Cells(b, 3).Value)
string3 = Trim(Sheets(Nam).Cells(b, 6).Value)
string4 = Trim(Sheets(NamQ).Cells(b, 6).Value)
N1 = Trim(Sheets(Nam).Cells(b, 4).Value)
N2 = Trim(Sheets(Nam).Cells(b, 1).Value)

result = StrComp(string1, string2, vbTextCompare)
result1 = StrComp(string3, string4, vbTextCompare)

If result <> 0 Then
‘Sheets(Nam).Cells(b, 1).Interior.ColorIndex = 38 ‘ ピンク
Sheets(Nam).Cells(b, 3).Interior.ColorIndex = 38 ‘ ピンク
e1 = Sheets(Nam).Cells(b, 1)
f2 = f2 + 1

d = 2
Do While d < c
If Sheets(Na).Cells(d, 1) = e1 Then
Sheets(Na).Cells(d, 8) = “TRUE”

Else
End If
d = d + 1
Loop
ElseIf N2 = “” Then
GoTo y
Else
f1 = f1 + 1
End If

y:
If result1 <> 0 Then
‘Sheets(Nam).Cells(b, 4).Interior.ColorIndex = 38 ‘ ピンク
Sheets(Nam).Cells(b, 6).Interior.ColorIndex = 38 ‘ ピンク
e2 = Sheets(Nam).Cells(b, 4)
f2 = f2 + 1

d = 2
Do While d < c
If Sheets(Na).Cells(d, 1) = e2 Then
Sheets(Na).Cells(d, 8) = “TRUE”

Else
End If
d = d + 1
Loop

ElseIf N1 = “” Then
GoTo z

Else
f1 = f1 + 1
End If

z:

Next b

f = f1 + f2

MsgBox f & “問中_” & f2 & “問不正解です”
‘MsgBox f2

End Sub

ワンポイント
和訳の答え合わせはApplication.GetPhonetic関数を使用しています。GetPhonetic関数は、指定された文字列のフリガナ(ふりがな)を返すExcelの組み込み関数です。ふりかな変換することで漢字とひらがな・カタカナの比較ができるようになります。ちょっとした違いですが日本語を比較する場合にはとても有効です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

jeneのアバター jene 技術部長

2人の娘を育てる父親のjeneです。
2人の娘と一緒に勉強しています。
週末は娘の好きなごはんを一生懸命に作るけなげなPaPaです。
金型設計責任者をしながら、VABマクロで作業効率化を業務として改善活動に行っています。
コロナ前には県の作業効率化のAI事業案件に採択されて独自AIを作ったこともあります。

コメント

コメントする

目次