• ベストアンサー

Excel VBA のユーザ・フォーム

TEXTBOX とCombBoxの入力エリアへの書式(Ex.¥123,456等)のデータ入力前に設定しておく方法が分かりません。 例えばプロパティの使用で可能なのでしょうか? 可能でしたら、そのプロパティの名称と設定方法をお教えいただきたいのですが!

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

「テキスト」ボックスというように、入力表示や結果は文字列(テキスト)で処理されます。 だから「テキストボックス」の書式設定は、設計されていません。 「書式」は、エクセルでは、「数」に関するもので、文字列に対してものは1,2しかなく(@など)、余り役立つものではない。エクセルでは、「日付」も数字なのをご存じか。 (書式は1.数 2.日付 3.文字列について考えることができる。日付はその1つ。) (エクセルの書式はNumberFormatといいます) だから無理難題を言わず、VBAでは諦めるべきと思う。 ーーー ただ疑似的な、突破の方法は、下記ではどうかな。 (1)ユーザーフォームを挿入 (2)そこにテキストボックス1つと、コマンドボタンを1つ設ける。 テキストボックスは1行とし(MultiLineはFalse)、横幅は入力桁数+α分を適当に。 Dim w Private Sub CommandButton1_Click() MsgBox TextBox1.Value TextBox1.Text = "" w = "" End Sub Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) w = w & Val(Chr(KeyCode)) TextBox1.Value = Format(w, "currency") End Sub これで1数字文字を入力するごとに、テキストボックスに、今までに入力した集合数字について、先頭に¥と3桁ごとカンマが入ったものが出る。 コマンドボタンを押すと、最終のそのテキストボックスの窓の文字が表示される。(変数に入れれば、その後使える) TextBox1.Valueでなくて、変数wを使えば「¥」、や「,」なしの数字集合文字列が使える。 あと、入力文字が数字かどうかのチェックを入れるのも必要かと思う(VAL()したものを IsNumeric)でチェック) ー この方法は小生が思いついたもの(WEBから引いてきたものではない)なので、使用者は十分テストして、困ったケースがないか吟味が必要です。 イベント・プロシージュアーというものは、入力者が何をするか判らず、扱いはむつかしいと感じる。 ーー コンボも同じことは考えられると思う。

関連するQ&A

  • エクセルVBA ユーザーフォームのtextboxの書式設定って?

    エクセルでユーザーフォームを作成しています。 金額を入力するTextBoxを作ったのですが、 その表示方法を「,」(カンマ)で桁区切り で表示さいたいのですが、方法ってありますか? TextBoxプロパティーを色々見ているのですが、 セルの書式設定みたいなものは無さそうなのですが、 方法があれば、教えていただきたく思います。 宜しくお願いいたします。

  • EXCEL VBAのユーザーフォームの配色について

    EXCEL VBAのユーザーフォームの配色の変更について教えていただきたいことがあります。 ユーザーフォームを設置しているのですが、プロパティで設定されている「システム」及び「パレット」の各色をVBAコードで表示することは出来るのでしょうか。 プロパティでUserForm1のBackColorを「強調表示」に設定 TextBox1の値を変えたときにTextBox1のBackColorを「強調表示」に変更する。 Private Sub TextBox1_Change() TextBox1.BackColor = RGB(255, 255, 150) End Sub でやろうとしていますが、全く同じ色を作ることができません。 システムやパレットの色をRGB以外のやり方で設定することはできるのでしょうか。 よろしくお願いいたします。

  • 【Excel VBA】ユーザーフォーム テキストボックスの有効・無効について

    Excel2003を使用しています。 ユーザーフォームにテキストボックスを11個とコマンドボタンを2個配置しています。 TextBox9に“0000”(文字列です)が入力されたら、TextBox10を有効に、それ以外は無効に設定したく、TextBox10のEnabledプロパティをFalse、LockedプロパティをTrueにして、コードを下記のように書いたのですが、うまくいきません。どこか、間違っているでしょうか? コードは該当部分だけ、載せています。よろしくお願いします。 -------------------------------------------------- If TextBox9.Text = "0000" Then TextBox10.Enabled = True TextBox10.Locked = False TextBox10.BackStyle = fmBackStyleOpaque Else TextBox10.Enabled = False TextBox10.Locked = True TextBox10.BackStyle = fmBackStyleTransparent End If

  • エクセルVBA フォームの日付を指定

    データ登録フォームの日付を指定したいのですがどうすればよいでしょうか? まず、userform5を開きます。規定値は当日にしていますが、過去のものも入れられるようクリアして任意の日付を入力します。 その後、実行ボタンを押すとuserform2を開き、入力開始するのですが、その時の撮影日textboxの値にさきほど入力した値を入れたいです。 変数はPrivate torokudate As Dateこのような形でよいと思いましたが、どこに書けば他のフォームでも利用できるのでしょうか? うまくいってるのかどうかわかりませんが、表示が0:00とされました。 撮影日textboxのプロパティ設定がわるいのかどうかもよくわかりません。 初歩的なVBAですが、よろしくお願いします。

  • ユーザーフォームのテキストボックスの書式設定について

    ユーザーフォームのテキストボックスの書式設定について TextBox1に金額、TextBox2に日付を入力し、Sheet1に転記するような フォームを作っています。 TextBox1には、 Private Sub TextBox1_Change() y = TextBox1.Text TextBox1.Text = Format$(CLng(y), "#,##0") End Sub としています。 TextBox2には、書式をH○○.○.○という設定にしたいのですが、 どのようにしたらよいでしょうか。

  • EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります

    EXCEL VBAのユーザーフォームの操作方法について教えていただきたいことがあります。 (1)ユーザーフォームにテキストボックスを2つ作る (2)コマンドボタンを1つ作る。 この場合に、コマンドボタンを押すと、セットフォーカスされている方のテキストボックスに「新春」と表示させることはできるのでしょうか。 キーボードは当然セットフォーカスされているテキストボックスに入力されますが それと同じ機能をコマンドボタンにも持たせたいのです。 Private Sub CommandButton1_Click() で TextBox1がセットフォーカスされているならTextBox1に"新春"と入力する TextBox2がセットフォーカスされているならTextBox2に"新春"と入力する というような条件式になるのでしょうか。 色々調べましたが答えが見当たりません。 よろしくお願いいたします。

  • 【Excel VBA】ユーザーフォームについて

    Excel2003を使用しています。 Sheet1のある範囲のデータをSheet2に(アクティブセルに)コピーするというマクロを作成しました。 データをコピーする際、範囲中のいくつかのセル(2~3箇所ですが)のデータを書き換えて、コピーするときもあるため、変更箇所がある場合は入力モード等の関係もあるので、ユーザーフォームを使って、書き換えるようにしました。 コピー元の範囲を変えただけの同じようなマクロが複数あるのですが、テキストボックスやコンボボックスに入力されたデータをシートへ転記する際のセルの位置が変わるだけなので、ひとつのユーザーフォームを使いまわしというと変ですが、そのようなことはできないのかなと思い、質問させていただきました。 -------------------------------------------------------------- Private Sub CommandButton1_Click()   Range("F371").Value = TextBox1.Text   Range("N371").Value = ComboBox1.Text   Unload Me End Sub 上記コードは、ユーザーフォームのコードの一部ですが、 Range("F371").Value = TextBox.1Text      ↓ Range("F397").Value = TextBox.1Text のように、転記先のセルだけ変わればいいので、そのために、同じユーザーフォームをいくつも作るのも…と思った次第です。使いまわしのようなことはできなければ、コピーして作成しようと思っています。 うまく文章に表すことができなくて申し訳ないのですが、よろしくお願いします。

  • Excel97のVBAでの、配列について。

    TextBoxを直接配列にすることは出来ますか? VBでは、プロパティのINDEXか何かで設定ができたかと思います。 VBAではそれらしきものが見つかりません。 TextBox1(0).text・・・ TextBox1(1).text・・・こんなふうに。 変数を配列にしてSetするよりも簡潔に出来る方法を教えてください。

  • エクセルでユーザーフォームの入力時に重複チェックしたいのですが・・・。

    エクセルでデータベースを作り、ユーザーフォームにて 入力作業を行っています。 フォーム上にテキストボックスが2つ有り、 一つは日付、もう一つは名称を入力する仕様と なっています。 またシートへの書き込みはコマンドボタンで 処理を行うようにしています。 このフォームで日付と名称を入力したときに、 そのデータをシートに書き込む前に 同じデータがすでにデータベースの中にある場合に 重複がある旨のメッセージダイアログを表示させたいと 思います。 処理条件としては、 1.日付、名称それぞれのテキストボックスを 抜けたとき(Private Sub TextBox1_Exit())に 処理させること 2.入力した日付と同じ日付のデータベースにおいて 名称が同じかどうかで判断すること 3.重複があればダイアログ表示、なければ何もなし ちなみにデータベースはA列に日付、B列に名称が 入っているものとします。 また上に処理条件を記しましたが、もっと良い方法が あれば加えてアドバイス願います。 VBA初心者ですので解説付きコードで教えてください。 (非常にあつかましいのですが、余り時間がないため、 明日の朝9時までにご回答頂けると非常に助かります。 その際、もっとも的確で早い回答をくださった方に 20ポイントつけさせて頂きます。) どうぞ宜しくお願いします。

  • VBAでのユーザーフォーム上でのタブオーダーの移動の方法

    やりたい事を以下に書きます。  ユーザーフォームで入力用のTEXTBOXがいくつかあり、TABINDEXが最初のTEXTBOXから順に入力していきます。  1つのTEXTBOXに入力完了後した場合、TABキーまたは、ENTERにより次のTEXTBOXにフォーカスが移動し、最後にコマンドボタンにを押すと入力が完了するというフォームを作っています。  ただし、最初のTEXTBOXに『99』を入力すると、途中のTEXTBOXへのフォーカスの移動はしないで最後のコマンドボタンにフォーカスが移動するようにしたいと考えています。 問題点を以下に書きます。  TEXTBOXの入力完了を現在、「AfterUpdate」イベントでつかまえて、TEXTBOXの値を取得し、その値が『99』だった場合、コマンドボタンにフォーカスを移動するようにコーディングしています。 こんな感じです。(かなり省略していますが、) Private Sub TextBox1_AfterUpdate() If TextBox1.Value = "99" Then CommandButton1.SetFocus Exit Sub End If End Sub この用にコーディングすると、TABINDEXが二つ後ろのTEXTBOXが入力待ち状態となってしまいます。 たとえば TEXTBOXが3つコマンドボタンが1つのフォームだと、 TEXTBOX1に『99』と入力し、上記のコーディングだと一度コマンドボタンにフォーカスが移動したあと、最後にTEXTBOX3にフォーカスが移動して入力待ち状態となる感じです。 色々試しましたが、解決方法が見つかりません。知っている方いましたら、教えてください。

専門家に質問してみよう