Excelのマクロで漢字練習シートを作りました。練習したい文字をテキストファイルにしておけば、それらの文字を使った練習シートができます。定数を変更すれば、文字の大きさも変えられます。
字を練習したくなった
先日、何の気なしYouTubeを見ていると、中国の人がボールペンで信じられないくらい綺麗な文字を書いていました。
ボールペンでは、均一の線しか書けないイメージがありましたが、その動画では、筆で書いたような「打ち込み」「とめ」「はね」「はらい」がなされていました。
しばらく時間を忘れて見入ってしまいました。
綺麗な文字を書く人は、何人もいました。ただ、そのような人の中にも、マス目に十字を引いた練習用紙を使っている人がいました。さらに、白紙に自由に文字を書くのではなく、お手本を忠実に見て真似をして書いている人もいました。
字がうまくなるのに終わりはなさそうです。
そこで、急に自分もボールペン字を練習したくなりました。
Excelのマクロで漢字練習シートを自作することにした
毛筆の小筆であれば、写経が適切な字の練習になると思います。もしかすると、ボールペン字でもいいお手本として使えるかもしれません。でも、恐れ多いし、そもそも、同じ文字が多いんですよね。それに、練習用紙を買っても、途中で飽きてしまうともったいないし。
ということで、漢字練習シートをExcelのマクロで自作することにしました。
そうすれば、練習する文字を自由に選べるし、フォントを選べば、好きな字体で練習できます。サイズの調整も思いのままです。
漢字練習シートを作成するマクロ
早速、マクロを示します。
使い方の手順は次の通りです。Excelに「開発」タブが出てこない場合は、こちらの記事を参考に、「開発」タブを出してください。
- メモ帳などのテキストエディタで、練習したい文字からなるテキストファイル(例:練習用文字.txt)を作る
- Excelで、空白のブックを新規に作成する
- F12キーを押して、ファイル名の欄に「漢字練習シート」等の好きな名前を入力する
- ファイルの種類から「Excel マクロ有効ブック(*.xlsm)」を選び、保存する
- 「開発」タブ→「Visual Basic」をクリック
- プロジェクトエクスプローラ(無ければCtrl-R)で、手順3.で命名したファイル名を選び、右クリックして、「挿入」→「標準モジュール」
- 以下のコードを標準モジュールにコピー&ペーストする
- 「開発」タブ→「マクロ」→「MakeAPracticeSheet」をクリック→「実行」
Option Explicit
'-----------------------------------------------------------------------
' Summary: サイズ等を決めるための定数
'-----------------------------------------------------------------------
Private Const cstSquareSize As Integer = 70 ' マス目サイズ[pixcel]
Private Const cstNumberOfColumns As Long = 8 ' 行あたりの文字数
Private Const cstFont As String = "MS 明朝" ' フォント
Private Const cstFontSize As Integer = 24 ' フォントサイズ
Private Const cstUTF8 As Boolean = False ' False → Shift-JIS
'-----------------------------------------------------------------------
' Summary: 列番号を列名に変換する
' Input : 列番号
' Returns: 列名
'-----------------------------------------------------------------------
Public Function ColumnName(ByVal lng As Long) As String
'
ColumnName = ""
On Error Resume Next
ColumnName = Split(Cells(1, lng).Address, "$")(1)
End Function
'-----------------------------------------------------------------------
' Summary: お手本付き漢字練習シートを作成する
'-----------------------------------------------------------------------
Public Sub MakeAPracticeSheet()
Dim strMsg As String ' 表示用メッセージ
' ─── 漢字文字列の入ったテキストファイルのPathを選択する ───
' ファイル選択用のフィルタをセットする
Dim fd As FileDialog ' FileDialogオブジェクト
Set fd = Application.FileDialog(msoFileDialogFilePicker)
' FileDialogでテキストファイルのPathを選択する
Dim strFile As String ' テキストファイルのPath
With fd
' テキストファイル選択用のフィルタをセット
.Filters.Add "テキストファイル", "*.txt"
' 単一ファイル選択
.AllowMultiSelect = False
' ボタンが押された時の処理
If .Show = True Then
' ファイルのPathを変数にセットする
strFile = .SelectedItems(1)
End If
End With
' FileDialogオブジェクトの解放
Set fd = Nothing
' エラーチェック
If strFile = "" Then
strMsg = "ファイルが選択されませんでした"
Exit Sub
End If
' ─── フラグに基づいてUTF-8又はShift-JISでテキストを読み込む ───
Dim strCharacters As String ' ファイルから読み出した文字列
' ADODB.Streamオブジェクトを作成
With CreateObject("ADODB.Stream")
If cstUTF8 = True Then
' UTF-8で読み込む場合
.Charset = "UTF-8"
Else
' Shift-JISで読み込む場合
.Charset = "shift_jis"
End If
' ファイルを開く
.Open
' 読み込み元のファイルのPathを指定する
.LoadFromFile strFile
' 一括読み込み
strCharacters = .ReadText
' ファイルを閉じる
.Close
End With
' ─── 漢字練習シートを作成する ───
' 新たにシートを作成する
Sheets.Add Before:=ActiveSheet
' ページのセットアップ
With ActiveSheet.PageSetup
.Orientation = xlLandscape ' 横向きで印刷
.LeftMargin = 10 / 25.4 * 72 ' 左マージンを10mm
.RightMargin = 10 / 25.4 * 72 ' 右マージンを10mm
.TopMargin = 20 / 25.4 * 72 ' 上マージンを20mm
.BottomMargin = 10 / 25.4 * 72 ' 下マージンを10mm
.CenterHorizontally = True ' 水平方向はページ中央揃え
End With
' マス目を作るため、全セルを選択
Cells.Select
' 列幅を調整
Selection.ColumnWidth = (cstSquareSize / 2 - 7) / 10
' 行幅を調整
Selection.RowHeight = cstSquareSize * 0.6 / 2
' 列方向に罫線を引く
Dim j As Long ' ループ変数
' 2列毎に処理
For j = 1 To cstNumberOfColumns * 2
' 2列選択
Columns(ColumnName(j * 2 - 1) & ":" & ColumnName(j * 2)).Select
' 左側にやや太線を引く
Selection.Borders(xlEdgeLeft).Weight = xlThin
' 右側にやや太線を引く
Selection.Borders(xlEdgeRight).Weight = xlThin
' 中の罫線は細線
Selection.Borders(xlInsideVertical).Weight = xlHairline
Next j
' お手本を当てはめていく
Dim i As Long ' 行方向の制御変数
Dim k As Long ' 文字選択用の制御変数
i = 1 ' 1行目から開始する
k = 0 ' 文字選択用の制御変数をリセットする
' 無限ループ
Do
' 2行分のレンジを選択
Range(ColumnName(1) & (i * 2 - 1) & ":" & _
ColumnName(cstNumberOfColumns * 4) & (i * 2)).Select
' 上端にやや太線を引く
Selection.Borders(xlEdgeTop).Weight = xlThin
' 下端にやや太線を引く
Selection.Borders(xlEdgeBottom).Weight = xlThin
' 中の罫線は細線
Selection.Borders(xlInsideHorizontal).Weight = xlHairline
' 列方向に2列ずつ移動しながら1文字ずつ処理する
For j = 1 To cstNumberOfColumns * 2 - 1 Step 2
' 文字選択用の制御変数をインクリメント
k = k + 1
' 文字を全て処理しているようであれば無限ループを出る
If k > Len(strCharacters) Then Exit Do
' 田の字型の4マスをお手本用のマスとして選ぶ
Dim rng As Range
Set rng = Range(ColumnName(j * 2 - 1) & (i * 2 - 1))
' 4マスにぴったりはまるテキストボックスを作る
ActiveSheet.Shapes.AddTextbox( _
msoTextOrientationHorizontal, rng.Left, rng.Top, _
cstSquareSize * 0.6, cstSquareSize * 0.6).Select
' テキストボックスの塗りつぶしを無くす
Selection.ShapeRange.Fill.Visible = msoFalse
' テキストボックスの枠を消す
Selection.ShapeRange.Line.Visible = msoFalse
' テキストボックスの文字に対する処理
With Selection.ShapeRange.TextFrame2
' 1文字入力する
.TextRange.Characters.Text = Mid(strCharacters, k, 1)
' 上下中央揃え
.VerticalAnchor = msoAnchorMiddle
' 左右中央揃え
.TextRange.ParagraphFormat.Alignment = msoAlignCenter
' フォントサイズをセット
.TextRange.Font.Size = cstFontSize
End With
' フォントをセット
With Selection.ShapeRange.TextFrame2.TextRange.Font
.NameComplexScript = cstFont
.NameFarEast = cstFont
.Name = cstFont
End With
Next j
' 行方向の制御変数のインクリメント
i = i + 1
Loop
PostHandler:
If strMsg <> "" Then
' メッセージがあれば、エラーとして表示
Call MsgBox(strMsg, vbOKOnly + vbCritical, "MakeAPracticeSheet")
Else
' メッセージがなければ正常終了表示
Call MsgBox("正常終了しました", vbOKOnly + vbInformation, "MakeAPracticeSheet")
End If
End Sub
微調整
マクロ中にある、以下5項目を変更することにより、自分好みのシートに変更できます。
Private Const cstNumberOfColumns As Long = 8 ‘ 行あたりの文字数
Private Const cstFont As String = “MS 明朝” ‘ フォント
Private Const cstFontSize As Integer = 24 ‘ フォントサイズ
Private Const cstUTF8 As Boolean = False ‘ False → Shift-JIS
cstSquareSizeは、マス目のサイズをピクセル単位で設定します。70ピクセルだと、1文字分のマス目のサイズが15mm×15mmくらいになります。
cstNumberOfColumnsは、1行あたりの文字数を指定します。例示してある8だと、お手本が8文字、自分の練習分が8文字の計16文字で一行となります。
印刷プレビュー等を用いて、横幅が印刷の範囲を超えないようにしてください。
cstFontは、フォントを指定します。Excelのブックを改めて開いて任意の文字を打ち、フォントをいろいろに変え、気に入ったフォントが見つかったら、そのフォント名をコピー&ペーストしてください。
cstFontSizeは、フォントのサイズを指定します。マス目の中でバランスが良く、自分の練習しやすいサイズを入力してください。
cstUTF8はテキストファイルの文字コードを指定します。普通にメモ帳で作成すると、Shift-JIS(メモ帳ではANSI)で保存されます。しかし、「塡」「剝」「頰」は、常用漢字にありながら、Shift-JISでは表現できません。これらの文字を扱うには、テキストファイルをUTF-8で保存し、マクロのcstUTF8をTrueとすることで取り扱うことができるようになります。なお、常用漢字の「」は、この方法で扱うことができませんでした。どなたか、扱い方をご存じの方は教えてください。
実際に使ってみた
常用漢字から成るテキストファイルを作成してプリンタでA4のコピー用紙に印刷し、数文字書いてみました。
赤い字は、今はもう売られていない、PILOT V CORN C<耐水性 顔料>(ボールペン)で書きました。その下の字は、あかしや新毛筆(筆ペン)、最後は、三菱Uniの4B(鉛筆)で書きました。なぜか、緊張して手が震え、「扱」は、3度書きくらいしてしまいました(笑)
V CORNは僕の技術では、打ち込みがきれいに作れませんでした。
どんな種類のボールペンなら「打ち込み」「とめ」「はね」「はらい」がうまくできるのでしょうか?今度、文房具店に行く機会があったら、書き比べてみたいと思います。
漢字練習シートの使い勝手は悪くはありませんでした。ただ、文字をもう少し大きく印刷しても良かったかもしれません。
まとめ
Excelのマクロで漢字練習シートを作りました。
サイズやフォントなどを好みに合わせてお使いください。
コメント