ユーザーフォームを使った勤怠打刻システムの作成方法

このQ&Aのポイント
  • ユーザーフォームを使用して勤怠打刻システムを作成する方法を教えてください。具体的には、TextBoxを使用して時間や日付を入力し、それをセルに反映させる方法が知りたいです。
  • ユーザーフォームの構成はTextBox1に時間、TextBox2に分を入力し、それをTextBox3に表示させ、セルのG列とH列に反映させる方法です。また、TextBox4にはセルのB列の値を表示させたいです。
  • 現在、ユーザーフォームを作成していますが、セルの選択が変わってもTextBox4の値が変わらない状況です。どのように修正すれば良いでしょうか?
回答を見る
  • ベストアンサー

セルの内容をテキストボックスへ反映

ユーザーフォームを用いて勤怠打刻のシステムを作っています。 ユーザーフォームの構成は下記の通りです。 TextBox1に時間(hour)を入力 TextBox2に分(minits)を入力 →TextBox3に入力した時間分を表示させ、G列H列に反映 TextBox4に打刻する年月日をB列から拾う シート   A   B ・・・ G   H 1     2019/10/1   08:00 19:00  2     2019/10/2 08:00  17:00 3     2019/10/3 08:00 17:00 ユーザーフォームはG列とH列に入力し、 G列に入力するとH列に移動、 H列に入力すると一つ下のG列へ移動と コマンドボタンを押すと自動でジグザグに動くようにしています。 TextBox4にG列・H列に対応するB列の値を表示させたいと思っています。 例えば、G1を選択しているとTextBox4に2019/10/1を表示、H2を選択していると2019/10/2を表示などです。 年月日は表示されるものの、セルの選択が変わっても TextBox4の値が変わらない状況です。 ご教授いただければ幸いです。

noname#239756
noname#239756

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.3

> 可能でしたらTextBox1にフォーカス移動したときに日付変更としたいです。 ユーザーフォームに 以下の感じでいかかがですか。 G1:H10の範囲は実際の範囲にしてください。 Private Sub TextBox1_Enter() If Not Intersect(Selection, Range("G1:H10")) Is Nothing Then Me.TextBox4 = Cells(Selection.Row, "B").Value End If End Sub

noname#239756
質問者

お礼

早速のお返事ありがとうございます。 無事解決いたしました。 感謝致します

その他の回答 (2)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

B列の入力がどのようになっているのか分からないのと、G、H列への出力タイミングがよく分からないので、ボタン1つで処理し、B列の入力を確認しています。 フォーム立ち上げ時に日付を表示し、TextBox4の表示は「yyyy/m/d」にしています。 当方、win10、Excel2010です。 ユーザーフォームのコードウインドウの例です。ご参考に。 Dim wRow As Long     '// 出力行 Dim wColumn As Integer  '// 出力列(G列) Private Sub CommandButton1_Click()  Cells(wRow, wColumn) = TextBox3.Text  wColumn = wColumn + 1   If wColumn = 9 Then    wRow = wRow + 1    wColumn = 7   End If    If Cells(wRow, 2).Value <> "" Then   TextBox4.Text = Format(Cells(wRow, 2).Value, "yyyy/m/d")  Else   MsgBox "出力行に日付が入力されていません"  End If End Sub Private Sub UserForm_Activate()  If Cells(wRow, 2).Value = "" Then   MsgBox "選択行に日付が入力されていません"   Unload Me  End If End Sub Private Sub UserForm_Initialize()  wRow = ActiveCell.Row  wColumn = 7  TextBox4.Text = Format(Cells(wRow, 2).Value, "yyyy/m/d") End Sub

noname#239756
質問者

補足

B列は既に入力してあり、カレンダーのようになっています(表示形式は20○○年〇月〇日)。 ユーザーフォームは常に開いた状態で G1を選択しコマンドボタン1をクリックするとG1へ入力されます。 コマンドボタンを押したタイミングで次のセル(この場合H1)へ移動します。 ユーザーフォームを開いた状態で次のセルへ移動となります。

  • kkkkkm
  • ベストアンサー率65% (1620/2459)
回答No.1

選択が変更されたらかボタンを押したらなのかは分かりませんがそこに Me(もしくはフォーム名).TextBox4 = Cells(Selection.Row, "B").Value でいかがですか。

noname#239756
質問者

補足

ご回答ありがとうございます。 現段階でシートに Private Sub Worksheet_SelectionChange(ByVal Target As Range) ActiveSheet.Unprotect Dim f As Long f = Selection.row Worksheets(3).Range("AF15") = Worksheets(3).Cells(f, 2).Value ActiveSheet.Protect End Sub ----------------------------------------------------------------------------------------- If Not Intersect(Target, Range("AF15")) Is Nothing Then UserForm2.TextBox4 = Worksheets(3).Range("AF15").Value End If ユーザーフォームに Me.TextBox4 = Format(Range("AF15"), "Long Date") を記入しています。 セルの選択が変更されたら日付を変更したいのですが、 可能でしたらTextBox1にフォーカス移動したときに日付変更としたいです。

関連するQ&A

  • 【Excel VBA】テキストボックスの値を検索するには?

    VBA初心者でわからないことが多く、困っています。 下記のことを行いたいと考えています。 データシートのC列(C3~C4000)にシリアルNoが4000件入っています。 ユーザフォームで、TextBox1、TextBox2、TextBox3、TextBox4、OKボタン、貼り付けボタンを作成しています。 これらを使用して、下記のことを行いたいと考えています。 (1)TextBox1にシリアルNoを入力すると、TextBox3に同じ値が入力される。 (2)TextBox2に台数を入力すると、TextBox1に入力されている値を基準にして、その台数の最終行のシリアルNoをC列から検索し、TextBox4に入力する。 (3)OKボタンを押すと、TextBox3とTextBox4のシリアルNoの範囲をC列から範囲選択した状態にする。 (4)貼り付けボタンで、選択した範囲をコピーし、別シートのB11から下へ貼り付ける。 どうぞご教授ください。よろしくお願いします。

  • テキストボックスをセルへ。

    3つ聞きたいです。 ユーザーフォームのテキストボックスに記入した内容を 最終行を取得して、指定の列にコメントを入力させるためには どうするのがいいでしょうか。下記で、エラーが出てしまいます。 .cells(lrow + 1, "c").addcomment = textbox5.value それと、一つのテキストボックスの内容を複数の セルへ記入させるには、下記をどうすればいいですか。 .cells(lrow + 1, "X:Z").value = textbox6.value あと、ショートカットキーで(例えば、CTRL + Q) ユーザーフォームを起動させるにはどうすればよいですか。 するとしたら、そのコードはどこに表示させるのがいいでしょうか。 いろいろ、お願いですが教示お願いします。

  • テキストボックスにフォーカスを当てる?

    こんばんは,すみませんよろしくお願いします。 テキストボックスにフォーカスを当てるには,例えば, TextBox1.SetFocus のようにするんだと思うのですが,テキストボックスに初期値が設定されていたときには,上記のようにすると,初期値のテキストの右側に線のようなポインタがテキストコントロール内にでてきます。 しかし,このような状態では,いったん初期値を消さないと,別の値に書き換えることは出来ません。 テキストコントロール内に初期の値として,何らかのテキストが入力されているとき,文字列が選択された状態になっていれば,即,別の値を入力することが出来ますので,ユーザーフォームをshowしたときに,テキストボックス内の初期値 (例えば,「ここに名前を入力してください」などの文字列) を選択した状態にしたいのです。どのようにすれば良いのでしょうか?何度もすみません。

  • セルの内容をテキストボックスに表示する

    こんにちは。今月からVBAを少しずつ勉強し始めている初心者です。 VBAでA列のセルをダブルクリックすると、そのセルにチェックが入り、 ユーザーフォームを起動させる。といったコードを記述しました。 チェックが入る→フォームが起動までは良いのですが、入力済みのセルをWクリックした時にフォームのテキストボックスににセルの内容を表示させようとしているのですがうまくいきません。不具合の内容は、フォームに表示されるデータが、前回Wクリックした行のデータが表示されます。例えば、 1回目 ID50を選択→表示されない。 2回目 ID70を選択→ID50が表示される。 3回目 ID90を選択→ID70が表示される。といった具合です。 コードは下記です。Targetが前回を参照しているのだと思って調べてみたのですがよく分かりません。すみませんがご教示お願いします。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim lngTop As Long, lngLeft As Long, strTitle As String Const RangeName As String = "領収書" If Not Intersect(Range(RangeName), Target) Is Nothing Then Cancel = True If Target = "レ" Then Target = "" Target.Offset(0, 9).ClearContents Else Target = "レ" End If End If If Target.Count <> 1 Then Exit Sub  If Target.Column <> 1 Then Exit Sub   If Target <> "レ" Then Exit Sub 入力F.Show With Worksheets("送付名簿") 入力F.TextBox1.Value = Target.Offset(0, 1).Value 入力F.TextBox3.Value = Target.Offset(0, 2).Value 入力F.TextBox4.Value = Target.Offset(0, 3).Value 入力F.TextBox5.Value = Target.Offset(0, 5).Value 入力F.TextBox6.Value = Target.Offset(0, 4).Value 入力F.TextBox7.Value = Target.Offset(0, 6).Value 入力F.TextBox10.Value = Target.Offset(0, 7).Value 入力F.TextBox9.Value = Target.Offset(0, 8).Value End With End Sub

  • Excelで検索結果をテキストボックスに表示

    Excelユーザーフォームにテキストボックス4つとコマンドドボタン1つを作成して、TextBox1に検索項目を入力しボタンを押すとA列を検索してB列、C列、D列の検索結果をTextbox2(B列)、textbox3(C列)、textbox4(D列)に表示する。 A列に同じ項目があったら、ボタンを押すと次の検索結果をTextboxに表示するマクロを教えてください。

  • UserFormにテキストボックスを作成してその内容をExcleに反映

    初めまして。ExcelのVBAをチャレンジしています。 初心者なので良くわからないため質問させて頂きました。 今、商品登録用のユーザーフォームを作成しています。 ユーザーフォームには TextBox1=「商品No.」 TextBox2=「商品名」 TextBox3=「単価」 TextBox3=「仕入先」 CommandButton1=「登録」 CommandButton2=「終了」 があります。 「商品No.」,「商品名」,「単価」,「仕入先」を入力し、「登録」をクリックしたらExcelに横一列(参考1)に反映させ、入力・登録を繰り返し行い(商品が入ったら随時入力)下に追加していきたいのですが、どの様にすれば宜しいでしょうか? <参考1>   A    B   C   D 1 商品No. 商品名 単価 仕入先 2 001   ○○○ 10円 △△  3 ・     ・   ・  ・ 4 ・     ・   ・  ・ 5 ・     ・   ・  ・

  • テキストボックスの値をセルに反映させたい。

    はじめまして、いつもお世話になっております。 EXCEL VBAの質問です。 下記(1)(2)の質問にお答えいただきたく、お願いいたします。 (1)ユーザーフォームのテキストボックスの値をEXCELのデータが入力されている 最終行の下の空白にユーザーフォームのボタンをクリックして反映。 (2)(1)の逆で特定のセルの値をユーザーフォームのテキストボックスに反映。 色々なサイトのプロシージャをコピペしましたが、うまくいきません。 見づらいかもしれませんが、ユーザーフォームの画像を添付します。 皆様、よろしくお願いいたします。

  • セルの値をテキストボックスに表示したい

    excelマクロ初心者です。教えてください。 <やりたいこと> 選択したセルと同じ行のうち特定の列のセルの値をフォームの テキストボックスに表示し、そのフォーム上で表示したテキスト ボックスの値をコマンドボタンでコピーしたい。 また、もうひとうつのコマンドボタンをおすと選択したセルと 同じ行の別のセルに"完了"と入力できるようにしたい。

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

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

  • Excel VBA テキストボックスから範囲選択を行うには?

    UserForm上にTextBox1、TextBox2、TextBox3、TextBox4、検索ボタンがあり、シートのC列にデータが入力されています。 下記のことを行いたいと考えています。 (1)TextBox1に検索する文字列入力 (2)TextBox2に台数(例えば100)を入れて検索ボタンを押す (3)検索ボタンを押すと、TextBox3にTextBox1の値が入り、TextBox4にTextBox1の値から入力した台数の行にある値を検索して表示させたいのです。 と同時に、TextBox3、TextBox4からシートの範囲選択を行うことは可能でしょうか? 以前も質問させていただきましたが、動作するに至らずでしたので再質問させていただきました。 よろしくお願いしますm(__)m

専門家に質問してみよう