クラスモジュールを使って装飾文字を量産
動画でExcelマクロ
クラスモジュールをつかったカンタンな実用例
クラスモジュールは使い方がわかればとても便利な仕組みです。 けれどもなかなかそれを使っている ユーザーはいません。
クラスモジュールを解説している参考書さえあまり見かけません。その理由はクラスモジュールがなくても、なんとかなってしまうからだと思います。それはエクセルの いいところでもあります。
そんなクラスモジュールをなぜ紹介するのかと言えば、Excel のコードが複雑になればなるほど、
クラスモジュールの必要性が高まるからなのです。
(サンプルファイルは、こちらです。 クラスモジュールをつかったカンタンな実用例、サンプル114回)
マクロ動画 クラスモジュールをつかったカンタンな実用例
ワードアートなどを使ったような装飾文字を大量にカンタンに作成するケースを紹介します。
クラスモジュール編1回,2回を見た方を対象にした動画です。
クラスモジュールにお気に入りの文字設定を作って活用する
-
タイトルに使う文字の装飾は楽しいものですが、日常的に行うのであれば、楽しいからと言って時間を書けてはいられません。そこで「テキストボックスを選択してマクロを実行すると、お気に入りのスタイルができる。」というマクロをクラスモジュールを活用して作成します。
-
初めに、前回のマクロでは、テキストボックスを選択してマクロを実行すると
-
文字のサイズがお気に入りのフォントの指定サイズになりました。
-
今回はそれを発展させて、フォントの選択とフォントサイズの決定をマクロに入れることにします。
-
複数の選択肢を用意して、選択はユーザーがImputBoxにて行うことにします。
Class Module を利用したマクロのながれ
-
これから紹介するマクロはテキストボックスに文字列を入力し選択した状態で実行します。
-
実行ボタンを押すと、最初にフォント選択ダイアログが表示されます。
-
次にフォントのサイズを聞いてくるので、フォントサイズを入力します。
-
最後に色の設定ダイアログが現れて、色を選択できるようになっています。
-
以上でユーザー好みのフォントとサイズと色のタイトルが出来上がります。
装飾タイトルをカンタンに作成するマクロコード
-
VBEを開き、前回作成したクラスモジュールのbigfontに以下のコードを記述します。
ここには「Const fname1 As String = "富士ポップ"」のように使いたいフォントの種類を定数を使って記述しています。 -
次に、そのConstを利用してクラスモジュールにFunctionを作成しています。Application.InputBoxでユーザーに使用するフォントを選んでもらいます。
-
Functionの後半では、ユーザーが入力した数値を受け取って、使用するフォントを決定しています。
-
次のFunctionでは、Application.InputBoxを再び利用して、ユーザーにフォントサイズを指定してもらいます。
おすすめサイズは普段自分が使うサイズを記述しておきます。 -
続いてクラスモジュール上に作成した2つのFunctionを利用して、標準モジュールに、装飾したフォントを作成するマクロを記述しました。
Sub biggerEx() がそのマクロです。
その際、標準モジュールのOption Explicit直下に
Dim bigger As New bigfont
とクラスモジュールの宣言をしています。 -
変数にクラスモジュールのファンクションで得たfontsizeとdeterminedを使うように設定しています。マクロの実行時に表示されるImputBoxで、サイズを入力するBoxがこれです。
-
最後に文字色を設定するために、別途作成した、GetCollor 関数を呼び出しています。マクロの実行時に表示される色の設定ダイアログがこれです。
解説で分かりにくい部分はぜひ動画で確認してください。
Option Explicit Const fname1 As String = "富士ポップ" Const fname2 As String = "小塚ゴシック Pro H" Const fname3 As String = "HGPゴシックE" Const fname4 As String = "江戸勘亭流P"
Function orderfont() Dim fontnumber As Long, determined As String fontnumber = Application.InputBox(Prompt:="フォント種類を選ぶ" _ & vbCrLf & "1 富士ポップ" & vbCrLf & "2 小塚ゴシック" _ & vbCrLf & "3 HGPゴシックE" & vbCrLf & "4 江戸勘亭流P", _ Title:="font select", Default:=1, Type:=1) If fontnumber = False Then Exit Function
ElseIf fontnumber = 1 Then determined = fname1 ElseIf fontnumber = 2 Then determined = fname2 ElseIf fontnumber = 3 Then determined = fname3 ElseIf fontnumber = 4 Then determined = fname4 End If orderfont = determined End Function
Function fsize() Dim fontsize As Long fontsize = Application.InputBox(Prompt:="fontのサイズを数値で入力してください" _ & vbCrLf & "おすすめサイズ60、70、80", _ Title:="おすすめサイズ60、70、80", Default:=60, Type:=1) If fontsize = False Then ' MsgBox "キャンセルします" Exit Function End If fsize = fontsize End Function
Sub GetColor() Dim 長さ As Long, 色取得 As Long 長さ = Len(Selection.ShapeRange(1).TextFrame2.TextRange.Text) Application.Dialogs(xlDialogEditColor).Show (1) 'ColorIndexの1番の色を変更する 色取得 = ActiveWorkbook.Colors(1) '変更した色を取得 With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 長さ).Font.Fill .Visible = msoTrue .ForeColor.RGB = 色取得 ' .Transparency = 0.4 .Solid End With End Sub