VBA Excelでの日付入力と修正について

このQ&Aのポイント
  • VBA Excelを使用して、UserForm内のTextBoxに日付を入力する方法について説明します。
  • また、間違ったデータを修正する際に、Excelに登録している日付を自動的にTextBoxに入力する方法もご紹介します。
  • 詳細は以下の質問文章をご覧ください。
回答を見る
  • ベストアンサー

VBA Excelのyy/mmm/ddをUserFormに入力

また、質問させていただきます。 今、UserFormが開くと【TextBox1】【TextBox2】【TextBox3】に現在の日付が入るようになっています。   【TextBox1】(年 08)   【TextBox2】(月 03)   【TextBox3】(日 03) UserFormには、【CommandButton1】(登録)と【CommandButton2】(呼び出し)があります。 【CommandButton1】(登録)をクリックするとExcelに '08/03/03と表示されます。 ある日、データを間違えて入力してしまい【CommandButton2】(呼び出し)をクリックし修正する時にExcelに登録している日を【TextBox1】(年 08)【TextBox2】(月 03)【TextBox3】(日 03)と自動的に入力することは出来るでしょうか? 宜しくお願いいたします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 >【TextBox1】 yy >【TextBox2】 mm >【TextBox3】 dd > >の形で戻すことは可能ですか? もう少し、ご質問に対して、気をつけていれば良かったでした。すみませんね。そのご質問どおりに考えると、  If IsDate(Cells(i, 2).Text) Then       myDate = Cells(i, 2).Value2       TextBox1.Value = Format$(myDate, "yy")       TextBox2.Value = Format$(myDate, "mm")       TextBox3.Value = Format$(myDate, "dd")  End If   こんな風にするのが、一番忠実のような気がしました。たぶん、ご存知ですよね。 なお、Format 関数の、$ が、付いているのは、テキスト出力しているということです。そのままにすると、Variant 出力になりますが、あまり、今の時代は、付いていても、付いていなくても、大きな違いはないと思います。

tsu-u-san
質問者

お礼

有難うございました。 解決しました。 しかし、よく直ぐに分かりますね。とても助かりました。 自分なんか、参考書を広げて悩んだあげくここで聞く始末なので・・・ もう少し、色々勉強します。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >【TextBox1~3】 こちらに戻すということですね。 >TextBox】に呼び出したいNo.を入力して【CommandButton2】(呼び出し)をクリックするとそのNo.の行のデータが【TextBox】・【ComboBox】・【ListBox】にデータが反映される(戻る?)ようにしているのですが、 私は、ここの仕組みがどうされているのか分からなかったのですが、まあ、それはそのままにしておきます。 【TextBox】に呼び出したいNo. のTextbox を TextBox4 とします。 Private Sub CommandButton1_Click() に以下のように加えたらいかがですか? Cells(i, 2).Value2 , Value2 でなくても、Value だけでもよいです。  i = TextBox4.Value + 9 は、行の呼び出し   Dim myDate As Date   Dim i As Long   If Val(TextBox4.Value) > 0 Then     i = TextBox4.Value + 9     If IsDate(Cells(i, 2).Text) Then       myDate = Cells(i, 2).Value2       TextBox1.Value = Year(myDate)       TextBox2.Value = Month(myDate)       TextBox3.Value = Day(myDate)     End If   End If なお、お礼欄を使えば、こちらに直接連絡が入りますが、補足欄ですと、回答が遅くなります。予めご了解ください。

tsu-u-san
質問者

お礼

有難うございます。 TextBoxに反映(戻す)出来ました。 ただ、もう1つ説明不足だったのですが、上記の場合TextBoxに戻した場合 【TextBox1】 yyyy 【TextBox2】 m 【TextBox3】 d になりますが、これを 【TextBox1】 yy 【TextBox2】 mm 【TextBox3】 dd の形で戻すことは可能ですか? それと、丁寧にお礼欄の使い方(?)まで教えて下さいまして有難うございました!

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 同じテキストボックスを使いながら、前回の話とは違うのですね。 >自動的に入力することは出来るでしょうか? 質問の中の文章では、不十分です。 TextBox1 ~3 にセルから入れるのは、出力の反対のことをすればよいはずです。 >ある日、データを間違えて入力 ある日とはいつですか?任意のセルのことですか? 修正するセルをどのように決定するのでしょうか? 一体、どこのセルなのでしょうか? 起動時に登録で入れた部分でしょうか? 直すのは、UserForm をモードレスにして、直接、手書きのほうが早かったりするのではないでしょうか?

tsu-u-san
質問者

補足

早速の回答有難うございました。 説明不足で申し訳ありませんでした。 UserFormには、日付の【TextBox1~3】以外にも、入力が出来る【TextBox】や【ComboBox】・【ListBox】があります。 これらを、入力して【CommandButton1】(登録)をクリックすることにより下記の様にExcelに反映させるようにしています。(登録する毎に最終行に自動的にNo.を入力して反映します。)    A     B      C     D   ・・・・ ・ ・ 9 No.   日付     商品名     価格 ・・・・・ 10 1   2008/03/03  ○○○    ○円 11 2   2008/03/03  ×××    ×円 12 3   2008/03/03  △△△    △円 13 4   2008/03/03  ■■■    ■円 14 5   2008/03/03  ◎◎◎    ◎円 15 6   2008/03/03  □□□    □円 16 7   2008/03/03  ▼▼▼    ▼円 ・ ・ ・ 上記の様なデータを作成していきましたが、「入力間違い」や「修正」が出てきた場合、UserFormにある【TextBox】に呼び出したいNo.を入力して【CommandButton2】(呼び出し)をクリックするとそのNo.の行のデータが【TextBox】・【ComboBox】・【ListBox】にデータが反映される(戻る?)ようにしているのですが、日付だけはどのようにしたらいいか分かりません。 日付は、Excelの B列に yyyy/mm/ddの形式で入っています。 UserFormに反映させる方法があれば教えて頂きたいのですが・・・

関連するQ&A

  • excel vba についてお聞きします

    excel vba についてお聞きします userformを使ってworksheetにデータを登録するといった事をしたいと考えております userformにはtextboxとcommandbuttonを配置 commandbuttonを押したらtextboxに入力した内容をworksheetに登録させる 同時にworksheetのA列には日付を登録 日付は登録をするその日付を反映させる 同じ日付があった場合は日付の登録はせずにその日付の行、B→C→Dと順に textboxのデータの登録だけをする。 日付の入るA列以外にデータが入る事になります また、textboxの内容が既にworksheetに登録済の場合 『既に登録済みです』といったメッセージを出すようにもしたいのです ご教授の程、よろしくお願いします。

  • TextBoxに日付を自動的に入れる

    VBAについて教えて下さい! 今、UserFormに「TextBox1」,「TextBox2」,「TextBox3」,「CommandButton1」があります。 「TextBox1」には自動的に年"yy"(上書き修正も出来るようにする) 「TextBox2」には自動的に月"mm"(上書き修正も出来るようにする) 「TextBox3」には自動的に日"dd"(上書き修正も出来るようにする) が入るようにして 「CommandButton1」をクリックすることによりExcelの「A1」に"yy/mm/dd" と言う形で自動的に入力することは出来ないでしょうか? また、その時にありえない日にちが入力された時にエラーが出て、「TextBox3」にカーソルが戻るようなことは出来ないでしょうか?

  • エクセルのuserformに自動入力したい

    こんにちわ! 最近userformを使い始めたのですが、エクセル上にあるデータをuserformを開いた際に自動で読み込むことは可能でしょうか? 例えば、 userformを開いた時点でラベルや、テキストボックスをクリックをせずとも自動でエクセル上のA1に入力されているデータをcaptionに読みこみたいです。 アドバイスの程よろしくお願いします。

  • UserFormを利用してシートからシートへコピー

    お世話になっています。 UserFormに日付を入力したら、シート1に入力してあるデータをシート2にコピーをさせたいのですが出来ますでしょうか? シート1には、下記のようなデータがあります。 UserFormを作成し、その中には【TextBox】・【CommandButton】があり【TextBox】に日付を入力し【CommandButton】をクリックすると、シート2にそのデータがコピーされるようにしたいのですが・・・ (ちなみに、日付はバラバラに入っています) シート1   A   B      C     D    E ・ ・ ・ 7 No.   日付    商品名    金額   仕入先 8 1  2008/03/10   ○○○ 9 2  2008/03/10   ○○○ 10 3  2008/03/14   ○○○ 11 4  2008/03/13   ○○○ 12 5  2008/03/12   ○○○ 13 6  2008/03/11   ○○○ 14 7  2008/03/12   ○○○ 15 8  2008/03/13   ○○○ ・ ・   ・ ・ ・   ・ ・ ・   ・ 2008/03/12を入力した場合、 シート2   A   B      C     D    E ・ ・ ・ 7   日付    商品名    金額   仕入先 8  2008/03/12   ○○○ 9  2008/03/12   ○○○ 10 11 12 13 14 15 ・ ・   ・ ・ ・   ・ ・ ・   ・

  • UesrFormのTextBoxに入れた日付をExcelに入力

    教えてください。 VBAでUserFormを作成しています。 その中に「TextBox1」があり日付を入力させます。 入力は、半角でyy/mm/ddで入力させて「CommandButton1」をクリックさせたらExcelに反映させるのですが、どうしても、日付が違う値になるのです。 半角で入力した日付をyy/mm/ddでExcelに反映させ、さらに誤った日付(例:08/02/31など実際に無い日)を入れた場合、再入力をさせたいのですが良い方法はありますか?

  • Excell(2003) VBA UserForm上のSheetの参照方法は

    Excell2003にてuserForm1にコントロールとしてスプレッドシートを載せています。 このuserForm1には、別にテキストボックス(textbox1)とコマンドボタンが二つ(commandButton1とCommandButton2)があります。 commandButton1がクリックされたとき、textbox1に入力された値をチェックしたのち、Me(userForm)上のSheet1の適当なセル(たとえばA2)にその値を入力したい。  また、CommandButton2がクリックされたときは、Sheet2のA2に入力したい。その場合Sheet2を表示する動作も必要です。  この場合 Q:本体のSheetではなく、フォーム上のSheetを指定する方法 Q:複数のSheetからなるフォーム上のspledSheetのいずれかを表示する方法  はどのようにしたら良いのでしょう。

  • ExcelデータをUserFormへ

    教えて下さい! 今、UserFormに【TextBox1】・【TextBox2】・【TextBox3】・【CommandBottum1】があります。 【TextBox3】にExcelの「No.」を入力して【CommandBottum1】(検索)をクリックしたら【TextBox1】に「商品名」・【TextBox2】に「金額」を表示させたいのですが、どのように行えばよいでしょうか? ちなみに、データは1~7行目までブランク、8行目はタイトル、9行目から始まります。     A    B    C 1 ・ ・ 8   No.   商品名   金額 9   1   ○○○○   80 10   2   △△△△   100 11   3   ××××   150 12   4   ■■■■   200  13   ・    ・        ・ 14   ・    ・        ・  ・    ・    ・       ・ ・    ・    ・       ・

  • Vba UserForm SetFocus

    ExcelのVbaでUserForm上に英単語のタイピング練習のソフトを作ろうとしていますが、うまくいきません。コントロールのイベントについての理解が不足しているのが分かりました。 ユーザフォーム上の複数のテキストボックス間のフォーカスの移動について教えて下さい。 UserForm1にテキストボックスを3つ、コマンドボタンを1つ配置しました。それぞれTextBox1、TextBox2、TextBox3、CommandButton1とします。 Private Sub CommandButton1_Click() TextBox3.SetFocus ・・・(1) End Sub Private Sub TextBox3_Enter() MsgBox "In TextBox3" TextBox2.SetFocus ・・・(2) End Sub 各TextBoxのTabStopプロパティは「True」、「TabIndex」は番号順になっています。 コマンドボタンのTabStopプロパティは「False」にしています。 フォームを表示し、コマンドボタンをクリックするとエラーが発生します。 (2)の実行の後(?)、(1)がエラー表示されます。 各イベントの発生のタイミング、連鎖、終了等の理解が不足していて、その理由がよく分かりません。どなたか教えていただけないでしょうか。よろしくお願いします。

  • UserFormのTextBoxに入力した値を保存する方法がありますか

    UserFormのTextBoxに入力した値を保存する方法がありますか? 具体的には、UserFormのTextBoxに2010/6/10と入力したときに シートのセルT13に表示されるように以下のマクロを作成しました。 Private Sub CommandButton1_Click() Range("T13").Value = 日付.Value If CloseMode = vbFormControlMenu Then Cancel = True Me.Hide End If End Sub 再度UserFormを開くと前の入力内容があるのですがExcelを保存 して閉じて再度シートを開くと空白になってしまいます。 UserFormを開いたタイミングで出力させたT13の値を返すという ようなマクロにするにはどうしたらよいでしょうか。 初心者なので詳しく教えていただけませんか。

  • VBA ユーザーフォームでデーターの入力

    いつもお世話になります。 WIN7 EXCELL2010 です。 現在は ユーザーフォームを起動し、 日時   は自動で今日の日付 ID    入力 売上金額 入力 を順次エンターキー クリックをクリックして 「入力」ボタンをクリックすると B C K列にデーターが入力されます。 この現状からいちいち「入力」ボタンをマウスに持ち替えるのはたくさんのデーターを 入力するに面倒で、キーボード上で作業が可能ならば改善したいと思っています。 「入力」ボタンのクリックを「キーボード」のエンター変えたいのですがどうマクロを記述すればいいかご指導いただけませんか。  ※併用が可能ならば「入力」ボタンでのデーター入力もできるのならありがたいのです。 よろしくお願いします。 参考 UserForm1 Private Sub CommandButton1_Click() ' y = 2 Do While Cells(y, 2) <> "" y = y + 1 Loop Cells(y, 2) = TextBox1.Text Cells(y, 3) = TextBox2.Text Cells(y, 4) = TextBox3.Text Cells(y, 11) = TextBox4.Text TextBox1.Text = Format(Date, "mm/dd") TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.SetFocus End Sub Module1 Sub FormDisp() UserForm1.Show vbModeless End Sub

専門家に質問してみよう