やりたいこと
Micorosoft Forms上でクイズを作成したいが、手動で1問ずつ手入力するのは大変面倒なのでなるべく自動化したい。
クイックインポートとは
Word またはPDFファイルをインポートしてフォーム・クイズを自動生成できる機能。
Wordまたは PDF フォームまたはクイズをMicrosoft Formsに変換する – Microsoft サポート
ただし、一括で作成となると、やはりエクセルから取り込みたいものである。エクセルはインポート対象外であるため、エクセルからpdfへ変換して取り込むことにする。
エクセルからpdfへの変換
適当なマクロを用意して表形式に並んだ問題を1つのセルに纏めるよう整形する。
A列が設問、B~F列が選択肢、F列が解答、G列が得点である。
イメージ
インポート結果
ソースコード
Option Explicit
Private Const QUESTION_NUM As Long = 10
Private Const BASE_POS As String = "A1"
' 問題をPDFファイルとして出力する
Public Sub ExportQustionsAsPDF()
' シート
Dim sh As Worksheet
Set sh = ThisWorkbook.Worksheets("Source")
Dim export_sh As Worksheet
Set export_sh = ThisWorkbook.Worksheets("Export")
Dim base_range As Range
Set base_range = sh.Range(BASE_POS)
Dim i As Long
For i = 1 To QUESTION_NUM
Dim question As String
Dim choice_a As String
Dim choice_b As String
Dim choice_c As String
Dim choice_d As String
Dim answer As String
Dim point As String
With base_range
question = .Offset(i - 1, 0).Value
choice_a = .Offset(i - 1, 1).Value
choice_b = .Offset(i - 1, 2).Value
choice_c = .Offset(i - 1, 3).Value
choice_d = .Offset(i - 1, 4).Value
answer = .Offset(i - 1, 5).Value
point = .Offset(i - 1, 6).Value
Dim text As String
text = ""
text = i & "." & question & vbCrLf _
& "A. " & choice_a & vbCrLf _
& "B. " & choice_b & vbCrLf _
& "C. " & choice_c & vbCrLf _
& "D. " & choice_d & vbCrLf _
& "ANSWER: " & answer & vbCrLf _
& "POINT: " & point
export_sh.Cells(1, 1).Offset(i - 1, 0).Value = text
End With
Next
' PDFファイルとして出力
Call export_sh.ExportAsFixedFormat(xlTypePDF, export_sh.Name)
End Sub
PDFへの変換は以下の1行で簡単に行うことができる。
' 出力形式:PDF
' ファイル名:シート名
Call export_sh.ExportAsFixedFormat(xlTypePDF, export_sh.Name)
非推奨機能の利用
ANSWER、POINTを指定すると、設問ごとの解答および得点を設定することができるが、これは非公式機能である。
Microsoftのリファレンスでは明文化されておらず、有志の方が偶然見つけたというものになるので、今後も利用できる保証はない。
その他、Formsのレイアウトや必須入力の設定などは非公式含めて出来ないらしい。


