Excel VBA 手書きで入力する InkEditコントロール

スポンサーリンク
スポンサーリンク

手書きで入力する InkEdit【インクエディット】コントロール

InkEdit【インクエディット】コントロールは、手書きで入力した内容を文字列データに変換してセルなどに代入することができます。

タッチ操作に対応したデバイスの場合は、ペンや指先による手書き入力が可能になります。

また、タッチ操作に対応していないデバイスでもマウス操作による手書き入力が可能です。英数字だけでなく、漢字を含む日本語も認識できます。

InkEdit【インクエディット】コントロールをツールボックスに追加する方法

規定の設定ではInkEdit【インクエディット】コントロールは、ツールボックスには表示されません。VBEの「コントロールの追加」ダイアログボックスで、InkEdit【インクエディット】コントロールを追加します。








RecognitionTimeout【レコギネッションタイムアウト】プロパティ

手書き入力が終了したあと、InkEdit【インクエディット】コントロールが、入力内容の認識を開始するまでの時間を設定するには、インクエディットコントロールを表すInkEdit【インクエディット】コントロールオブジェクトのRecognitionTimeout【レコギネッションタイムアウト】プロパティを使用します。

Recognition【レコギネッション】は「認識」という意味があります。

RecognitionTimeout【レコギネッションタイムアウト】プロパティの書式

オブジェクト.RecognitionTimeout = 設定値


  • オブジェクト(必須)
    インクエディットを表すInkEdit【インクエディット】オブジェクト名を指定します。
  • 設定値(必須)
    認識開始までの時間をミリ秒単位で指定します。認識開始時間を早くし過ぎると、入力途中で認識され思うような認識結果が得られない場合があります。既定値は「2000ミリ秒(2秒)」です。

UseMouseForinput【ユーズマウスフォアインプット】プロパティ

InkEdit【インクエディット】コントロールの入力方法で手書き入力以外にマウスによる入力を可能にするかどうするかを設定するには、インクエディットを表すInkEdit【インクエディット】コントロールオブジェクトのUseMouseForinput【ユーズマウスフォアインプット】プロパティを使用します。

UseMouseForinput【ユーズマウスフォアインプット】プロパティの書式

オブジェクト.UseMouseForinput = 設定値


  • オブジェクト(必須)
    インクエディットコントロールを表す
    InkEdit【インクエディット】コントロールのオブジェクト名を指定します。
  • 設定値(必須)
    設定値 内容
    True マウス入力可能
    False マウス入力不可能(既定値)

※既定値ではマウス入力は不可能で、タッチ操作可能なデバイスのみ対応します。

入力内容の認識開始時間とマウス入力を可能にするコード例

Private Sub UserForm_Initialize()
With InkEdit1
.RecognitionTimeout = 1500
.UseMouseForInput = True
End With
End Sub

コードの解説

1行目【Private Sub UserForm_Initialize()】
マクロ実行ダイアログボックスに表示されないPrivate Sub【プライベートサブ】プロシージャの
ユーザーフォームがメモリーに読み込まれ画面に表示される直前に発生する、
Initialize【イニシャライズ】イベントプロシージャに記述しユーザーフォームの初期状態を設定します。

ユーザーフォームを開くには、UserForm【ユーザーフォーム】オブジェクトのShow【ショー】メソッドを使用します。

Sub ユーザーフォーム表示
  UserForm1.Show
End Sub

2行目【With InkEdit1】
InkEdit【インクエディット】オブジェクトをオブジェクト名で、With【ウィズ】ステートメントで指定します。


3行目【.RecognitionTimeout = 1500】
With【ウィズ】ステートメントで指定したInkEdit【インクエディット】オブジェクトの入力内容の認識を開始するまでの時間を設定するRecognitionTimeout【レコギネッションタイムアウト】プロパティに1.5秒を表す1500ミリ秒を指定します。


4行目【.UseMouseForInput = True】
With【ウィズ】ステートメントで指定したInkEdit【インクエディット】オブジェクトのマウス操作による入力をどうするかを設定するUseMouseForInput【ユーズマウスフォアインプット】プロパティにマウス操作を可能にするTrueを設定します。


実行結果


Text【テキスト】プロパティ

InkEdit【インクエディット】コントロールに手書き入力して変換された文字列を取得するには、InkEdit【インクエディット】コントロールオブジェクトのText【テキスト】プロパティを使用します。
文字列の取得と設定ができます。

Text【テキスト】プロパティの書式

【取得】
オブジェクト.Text
【戻り値】文字列型(String)
【設定】
オブジェクト.Text = 設定値


  • オブジェクト(必須)
    インクエディットを表すInkEdit【インクエディット】コントロールのオブジェクト名を指定します。
  • 設定値(必須)
    InkEdit【インクエディット】コントロールに表示する、文字列を文字列型(String)の値で指定します。「””」(長さ0の文字列)を設定すると手書き入力で認識された文字列をクリアすることができます。

手書きの認識をやり直す例

InkEditコントロールに手書き入力した内容が期待どおりに変換されなかったときに、InkEditコントロールに変換した結果が残っているためその結果をクリアするボタンを作成しておくと便利です。

結果をクリアするには、InkEditコントロールのText【テキスト】プロパティに「””」(長さ0の文字列)を設定します。

例えば、コマンドボタンを追加してCommandButton1【コマンドボタンワン】をクリックしたときに、InkEdit1【インクエディットワン】に表示されている変換結果をクリアするには、CommandButton1【コマンドボタンワン】のClick【クリック】イベントプロシージャに以下のように記述します。

コード例

Private Sub CommandButton1_Click()
InkEdit1.Text = ""
End Sub

実行イメージ


手書き入力の認識された文字列を取得してセルに代入する例

手書き入力の認識された文字列を取得するには、InkEdit【インクエディット】オブジェクトのText【テキスト】プロパティを使用します。

例えば、コマンドボタンを追加して、CommandButton2【コマンドボタントゥ】をクリックしたときに認識された文字列を取得して指定のセルに取得した文字列を代入するには、CommandButton2【コマンドボタントゥ】のClick【クリック】イベントプロシージャに以下のように記述します。

Private Sub CommandButton2_Click()
Dim 文字列 As String
Dim 最終行 As Long
最終行 = Cells(Rows.Count, 1).End(xlUp).Row +1
文字列 = InkEdit1.Text
Cells(最終行, 1).Value = 文字列
InkEdit1.Text = ""
End Sub

コードの解説

2行目【Dim 文字列 As String】
InkEditコントロールで手書き入力を認識して変換した文字列を格納する変数「文字列」を文字列型(String)で宣言します。


3行目【Dim 最終行 As Long】
セルの値が入力されている最終行の次の行の行番号を格納する変数「最終行」を長整数型(Long)で宣言します。


4行目【最終行 = Cells(Rows.Count, 1).End(xlUp).Row +1】
Cells【セルズ】プロパティの行番号を表す引数に行の集まりを表すRows【ロウズ】コレクション のCount【カウント】プロパティ で最終セル番号を設定します。

列番号を表す引数に1を設定します。つまり、A列の最終行のセルを表します。

そのセルに対して、End【エンド】プロパティで方向を表す引数にxlUpを指定して下から上方向に向かってRow【ロウ】プロパティで行番号を取得して1を加算することでデータが入力されている領域の終端セルの1行下の行番号を取得して引数「最終行」に代入します。


5行目【文字列 = InkEdit1.Text】
InkEdit【インクエディット】コントロールオブジェクトのText【テキスト】プロパティを使用して、手書き入力を認識して変換した文字列を取得し、変数「文字列」に代入します。


6行目【Cells(最終行, 1).Value = 文字列】
変数「文字列」に格納されている文字列をCells【セルズ】プロパティを使用して参照した、1列目のデータが入力されている領域の終端セルの次のセルに代入します。


7行目【InkEdit1.Text = “”】
InkEdit【インクエディット】コントロールオブジェクトのText【テキスト】プロパティに「長さ0の文字列」を設定し、インクエディットが認識して表示されている文字列をクリアします。


実行結果


以上で、手書きで入力する InkEditコントロールについての解説を終了します。ありがとうございました。

スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク