はじめに
ユーザーフォームなどで使用するテキストボックスは、セルのような書式設定はできません。
テキストボックスに入力された値は、その名の通り数値であってもテキスト(文字列)として扱われます。
そのため少々扱いは不便に感じます。
そこで、テキストボックスの内容を一旦、どこかのセルに代入し、返ってきた値を再びテキストボックスに代入するようにすれば、テキストボックスにセルのような振る舞いをさせる事が可能です。

欠点としては変換用にセルを保持しなければなりませんが、専用のシートを作って非表示にしてしまうなど工夫すれば特に大きな問題ではないと思います。
テキストの位置(右寄せなど)、文字色に関しては引き継がれません。
作り方
ユーザーフォームにテキストボックスを配置します。
今回は、分かりやすくするためテキストボックスを2つ用意しています。
セルの書式設定(通貨表示)
書式設定用のシートを用意し、適当なセルをテキストボックスの書式設定用に使います。
今回は Sheet1 の A1 セルを使います。
書式設定用のセルに書式設定を付けます。

今回は通貨表示になるよう設定しました。
プログラム
プログラムは、テキストボックスのイベントプロシージャを使うので、ユーザーフォームのモジュールに記述します。

コードウインドウの上部のプルダウンリストを、TextBox1 と AfterUpdate にして、イベントプロシージャを表示させます。
プログラムは以下の通りです。


勝手に作られる、TextBox1_Changeは不要なので削除して構いません。
Private Sub TextBox1_AfterUpdate()
With Worksheets("Sheet1")
.Range("A1").Value = TextBox1.Value
TextBox1.Value = .Range("A1").Text
End With
End Sub
AfterUpdateはテキストボックスの編集が終わった後に実行されます。
テキストボックスの値を一旦、セルに代入します。
セルには、予め書式設定がされていますので、貨幣表示になります。
今度は、そのセルの値をTextでテキストボックスに代入します。


上記のように、入力を終えるとセルで表示される値がテキストボックスに反映されます。
テキストボックスの表示を右詰めにしたい場合は、テキストボックスのプロパティ値で変更しておきましょう。 TextBox1 の TextAlign を fmTextAlignRight にします。

まとめ
今回はセルの書式設定の特性を利用してユーザーフォームのテキストボックスの値を操作してみました。
以下のように日付でも同じような事ができるます。



セルの特性を利用しているだけなので、数値のみに限定するなどの処理には不向きですが、コードをたくさん書かなくてもOKなので便利かと思います。参考にしてみてください。
コメント