• ベストアンサー

フォームテキストボックスの表示設定

Excelシートとユーザーフォームのテキストボックスを、 ConntrolSourceで連動させ表示させています。 この時、セルの表示は、時刻表示させ、時間単位の計算を行っていますが、フォームの表示が、時刻表とならず、0.5などと表示されてしまいます。フォームからの入力は、時刻入力してもセルへは、正常に時刻単位で入力できます。 フォームの、表示を時刻単位で表示するには、どうしたらよいのか、教えてください。VBA超初心者で、困り果てています。 よろしくお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です。補足ありがとうございました まず先の回答を理解するために新規のブックにユーザフォームとテキストボックスを1つ配置して、ユーザーフォームのモジュールシート(VBE画面でユーザーフォームをダブルクリックすると開くシート)に#01のVBAを貼り付けて動作を確認してください。 その上で、時刻を入力するテキストボックスが複数あるなら、TextBox_Changeイベントのモジュールも複数になります Private Sub TextBox9_Change()  ActiveCell.Offset(1,0).Value = TextBox9.Value End Sub Private Sub TextBox10_Change()  ActiveCell.Offset(2,0).Value = TextBox10.Value End Sub Private Sub TextBox11_Change()  ActiveCell.Offset(3,0).Value = TextBox11.Value End Sub Private Sub TextBox12_Change()  ActiveCell.Offset(4,0).Value = TextBox12.Value End Sub   Private Sub UserForm_Activate()  TextBox9.Value = Format(ActiveCell.Offset(1,0).Value, "h:mm")  TextBox10.Value = Format(ActiveCell.Offset(2,0).Value, "h:mm")  TextBox11.Value = Format(ActiveCell.Offset(3,0).Value, "h:mm")  TextBox12.Value = Format(ActiveCell.Offset(4,0).Value, "h:mm") End Sub #01ではUserForm_Initializeイベント使いましたが、複数のシートに繰り返してユーザーフォームで入力を行うようなのでUserForm_Activateイベントに変更しました。 ただアクティブセルを基準にしてセルに値を書き込むのは、トラブルの元のように思えて仕方ないですが、その仕様で大丈夫ですか

kamikaze-7
質問者

お礼

zap35様 無事、完成しました。返事が遅くなり申し訳ありませんでした。 #01の回答に、素人が、訳も解らずあれこれ考えた挙句、ただ動いたというだけで、返信してしまいました、#03で、私の拙いコードに丁寧な回答をいただいていたのに、本当に申し訳なくて、コードを理解するため、あれこれ勉強していました今は、#03の回答が、私のこれからの、VBAを勉強するための、バイブルとなっています。 本当に有難うございました。改めまして、気分を害されたのではないかと思い、お許し願います、これからも、解らない所があったら、よろしくお願いします。

kamikaze-7
質問者

補足

丁寧な回答、有難うございます。 早速、ブックを作り試してみます。 zap35様が、ご心配いただいている、トラブルの元になるのではないかとの、ご指摘有難うございます。 なにぶん、VBA超初心者のため、ご指摘を理解出来ずにいます。 申し訳ありません、アクティブセルは、ある値の変化を基準にしてIF~then により、指定しています。

その他の回答 (3)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#01です。#01のお礼を読みましたが、何をされたいのかさっぱりわかりません。 TextBoxのValueは本来、文字型です。これをVBAでセルに書き込んだときエクセルは「時刻」と判断して自動的に日付型に変換しますが、直接TextBoxのValueを扱うときは文字型のデータですから、Format関数で整形しようとしても無意味です。おそらくこの点が理解できていないように感じました。 どうしてもTextBoxのValueを整形したいなら、DateValue(日付を表す文字列)という関数もありますからヘルプで調べてみてください。 またUserForm_InitializeイベントでTextBox_ChangeイベントのモジュールをCallしていますが、これもよく理解できません。 (仮に動いたとしてもInitializeイベントでは最初にLoadしたときの1回しか動作しませんよ。だから#03ではActivateイベントにしたのですがInitializeイベントに戻したのはなぜでしょうか) 私の回答は既にされています。それを工夫して改良していただくのは大変に喜ばしいことですが、「改造した結果が動かない」と言われてもどうしようもありません。例え初心者であってもそれはご自身でDebugするべきです。

kamikaze-7
質問者

お礼

zap35様 丁寧な、ご指導有難うございます。 ご指摘の通り、textboxの、取り扱いが全然理解していなく安易に、 動くかどうかで、喜んで基本が出来ていませんでした。 私の、質問に丁寧に回答していただいたのに、申し訳ありませんでした。 #03の回答を、基本から勉強しなおします。 本当に有難うございました。

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

この問題は私には難しいな。下記で正しいか自信ないが。 (1)Userform1を作成。 (2)テキストボックスをユーザーフォーム上に作成 (3)その他コントロールをユーザーフォーム上に1つ作成。 (4)(2)のテキストボックスには ConntrolSourceにA1(例)と設定。 (5)標準モジュールに Sub test01() UserForm1.Show vbModeless End Sub と入れる。 (6)シートSheet1のイベントに Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then UserForm1.TextBox1.Value = Format(Range("a1"), "hh:mm") End If End Sub をコピペ。 (6)シートSheet1をアクチブにしておいて (7)標準モジュールの(5)を実行 ーー テキストボックスを変える(例11:20)ーー>A1に反映 セルA1を変える(例 18:56)-->テキストボックスに反映。 すると思うが。何か問題がありそう。

kamikaze-7
質問者

補足

imogasi様 回答有難うございます。 参考にして、設定してみます。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

ConntrolSourceでセルの値と連動させる場合、時刻を表すシリアル値が表示されてしまうみたいなので、ConntrolSourceプロパティは使わず、ユーザフォームイベントで連動させたらいかがでしょう。もしそのテキストボックスには時刻しか入力されないなら以下でも可能です。 Private Sub TextBox1_Change()  Sheets("Sheet1").Range("A1").Value = TextBox1.Value End Sub Private Sub UserForm_Initialize()  TextBox1.Value = Format(Sheets("Sheet1").Range("A1").Value, "h:mm") End Sub

kamikaze-7
質問者

お礼

zap35様 回答の利用方法を、自分なりに考え Private Sub TextBox8_AfterUpdate() TextBox8.Value = Format(TextBox8.Value, "h:mm") End Sub で、テキストボックスの表示方法を設定し 次に Private Sub UserForm_Initialize() Call TextBox8_AfterUpdate ........... と、フォームの初期化時に、 テキストボックスを書き換えさせ表示できないものか試したところ 時間単位で表示することが出来ました。 ただ、12:00の表示が、なぜか0:05又24:00が0:00と表示されてしまいます。 この考え方でよいものか、又なぜ12:00が0:05等に表示されるのか、教えてくださいお願いします。

kamikaze-7
質問者

補足

zap35様、早速の回答ありがとうございます。 私が、書いたコードは、以下のコードですが、 計算させるための、表がいくつかあって、フォームから それぞれの表に、アクティブセルを切り替え入力しています。 それらの、コードは、省略しています。 Sub 表示データ設定() 'シートと、ユーザーフォームの各作業時間とを、連動させます。 Dim lngrow As Long lngrow = ActiveCell.row TextBox8.Value = "b" & lngrow  TextBox9.ControlSource = ActiveCell.Offset(1, 1).Value   TextBox10.ControlSource = ActiveCell.Offset(2, 1).Value  TextBox11.ControlSource = ActiveCell.Offset(3, 1).Value TextBox12.ControlSource = ActiveCell.Offset(4, 1).Value End Sub を、Callで使用しています。 質問ばかりで、申し訳ありませんが、zap35様の、 回答の利用方法が、どう利用してよいのかわかりません 教えてください。 読みにくいコードを、記載したことをお許しください。 よろしくお願いします。

関連するQ&A

  • フォームのテキストボックスの内容

    こんばんは 顧客情報が入った名簿があり、ユーザーフォームを起動して入力・修正しています。チェックをすることで送付状を印刷するようにしてありますが、フォームの中に担当者が送付状に一言書き添えるためのテキストボックスを用意して送付状のセルに文章を入れようと思っています。ところが、テキストボックスでは改行して入力されている内容がセルにうまく表示できないのです。テキストボックスに表示されているとおりに印刷用シートに表示させるようなことは出来ないものでしょうか。よろしくお願いします。

  • テキストボックスの表示について

    いつもお世話になります。VBAで質問があるのですが、ユーザーフォームを作り、コマンドボタンとテキストボックスを配置します。 Private Sub CommandButton1_Click() Dim i As Long  For i = 1 To 30   TextBox1.Text = i & "を入力しました"   Worksheets("Sheet1").Range("A1").Value = i & "回目です"  Next i End Sub と入力して実行すると、セルには1~30回まで順に書き込みがありますが、テキストボックスには最後の「30を入力しました」しか表示されません。 これを「1を入力しました」、「2を入力しました」、「3を・・・」というようにテキストボックスに順に表示させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • セルの値をユーザーフォームのテキストボックスに

    エクセルの質問です。 シート1にボタンを設置してユーザーフォームを呼び出すようにしています。 ユーザーフォームにテキストボックスを用意してて、シート1のセル(A1)に記入された数字を、ボタンを押した時に立ち上がったユーザーフォームのテキストボックスに表示されるようにしたいのですが、どうしたらいいのでしょうか?

  • ユーザーフォーム内のテキストボックス内の書式設定

    A1セルに12.345と入力してあり、書式は「数値」で小数点以下の桁数2にしてあり、 「12.35」と表示されます。 VBAを起動して、ユーザーフォームを挿入し、 テキストボックスを作成し、 TextBox1の「ControlSource」にA1と入力すると TextBox1には「12.345」と表示されます。 エクセルのA1と同じ様に TextBox1も「12.35」と表示したいのですがどうすればいいのでしょうか? エクセル2003です。 よろしくお願い致します。

  • エクセルVBAユーザーフォームのテキストボックスについて

    VBA初心者です。 エクセルVBAユーザーフォームのテキストボックスに入力した数字を通貨単位でセルに反映させるにはどうすれば良いのですか? Private Sub 一月OK_Click() Range("J10") = Me.一月売上 Range("J13") = Me.一月粗利 Unload Me End Sub 今はこんな感じです。 ここで月度の売上を入力してシート上で合計させたいのです。 よろしくお願いします。

  • Excel2000VBA テキストボックス内での改行で・・・

    ユーザーフォームにテキストボックスを作り、 テキストボックス内での改行をできるように設定します。 このテキストボックスに入力されたデータをセルに入力すると セルでは改行したところに「・」が入ってしまいます。 例えばテキストボックスに  こんにちは[改行]  いい天気ですね と入力して、これをsheet1のA1に入力します。すると、  こんにちは・  いい天気ですね と入力されてしまいます。 この「・」を表示しないようにする方法はありますか? よろしくお願いします。

  • VBAユーザーフォームで

     エクセルVBAでユーザーフォームより、テキストボックスで入力させたものをセルに表示させようとしています。  テキストボックスは1と2があり、テキストボックス1で入力した値の最初の5文字+固定値をテキストボックス2に自動で入力(表示)したいのですがなかなかうまくいきません。(自動入力後、手動で一部修正します。)  VBAをはじめたばかりの初心者ですが、どうぞよろしくお願いします。

  • エクセルで、任意のテキストボックス等にフォーカスを移したい

    すいません、またまた質問です。 エクセルXPで、ユーザーフォーム上に 複数のテキストボックスやリストボックスを 置いて入力した値が任意のシートのセルに 入力されるというものを作っています。 (しかしながらVBAがほとんど見様見真似レベル なのでかなり悪戦苦闘(~_~*)) そこで、ユーザーフォームにて例えばTEXTBOX1に 入力後、Enterで次のテキストボックス(又は リストボックス)にフォーカスを移したいのですが、 その時に任意のテキストボックス等にフォーカスを 移すことは可能でしょうか。 番号順(なのかな?)に自動でフォーカスを 移動させることはできたのですが、任意の対象へ 移動させるやり方とかってあるのでしょうか。 例えばTEXTBOX1からRISTBOX5へ移すとか。 入力する順番に移動できたらユーザーフォーム上での 入力作業が非常に楽になると思って(^o^;) どうぞよろしくお願いします。

  • テキストボックスへにセル値の入力

    エクセルマクロの初心者で恐縮なのですが、ユーザーフォームのテキストボックスに下記のようなことは可能でしょうか? 例1)ユーザーフォーム上にある「テキストボックス」に「オプションボタン1」を選択するとワークシートのセル値を入力(反映)することは可能でしょうか? 例2)次に、「オプションボタン2」を選択すると、例1でテキストボックスに入力(反映)した値を消去し、かつ、このテキストボックスに数値を直接入力したら、ワークシートの別セルに入力した数値が反映されるようにすることは可能でしょうか? 例1・2)についてどのようなマクロを組めばよいのでしょうか? マクロにお詳しい方、大変申し訳ございませんか、ご指導お願いいたします。

  • VBAユーザーフォーム内のテキストボックスで検索

    http://oshiete.homes.jp/qa3451770.html こちらで質問した者なのですが (benelli様ありがとうございました) VBAでユーザーフォームでの検索を作成し このユーザーフォーム内にテキストボックスを作成して そのテキストボックスに入力した数字を検索できるようにしたいです。 よろしくお願い致します。

専門家に質問してみよう