VBAで繰り返しの日付の記述方法

このQ&Aのポイント
  • VBAを使用して、日付の繰り返しを行う方法について教えてください。
  • 現在、Win7とExcel2010を使用しています。
  • 具体的な問題として、TextBox1からComboBox1に移動し、再びTextBox1に戻るときに、2回目以降に日付が表示されないという問題が発生しています。どのように修正すればよいでしょうか?
回答を見る
  • ベストアンサー

VBA 今日の日付の繰り返しの記述

いつもお世話になります。 WIN7 EXCELL2010 です。 参考に下記のようなマクロを記述しています。 TextBox1から順次ComboBox1と移動し又TextBox1に戻るのはうまく移動します。 最初の時の 「TextBox1.Text = Format(Date, "mm/dd")」は上手く表示してくれますが一巡して2度目になると表示されません。 私が多分ですが Do~Loop と思うのですがうまくゆきません。 恐れ入りますがご指導いただけませんでしょうか。 マクロの記述 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "1" .AddItem "2" .AddItem "3" End With TextBox1.Text = Format(Date, "mm/dd") End Sub '**************** '設定 '**************** 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) = ComboBox1.Text TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" ComboBox1.Text = "" TextBox1.SetFocus End Sub

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

> 一巡して2度目になると表示されません。 原因は > TextBox1.Text = "" たぶん、ココです。 新規行に書き込んで、すべてのテキストボックスを「空白」にしちゃっていますから、 ニ巡目以降は必ず「空白の状態で」開始されてしまいますね。 やるなら、ここも     TextBox1.Text = Format(Date, "mm/dd") これを採用するか、 セルへの転記が終了した後に「イニシャライズ」するか、 どちらかが早いと思われますよ。

dorasuke
質問者

お礼

早速ご回答いただき誠に有難うございました。 うまくいきました。 思いもよらないことでした。 頭の中は Do Loop 一辺倒でしたから。 でも苦労してその上にご指導いただいて非常に勉強になりました。

関連するQ&A

  • ユーザーフォームに今日の日付を

    いつもお世話になります WIN7 EXCELL2010 です。 UserForm1 に下記のように マクロを入れています。 Private Sub CommandButton1_Click() ' y = 2 Do While Cells(y, 2) <> "" y = y + 1 Loop Cells(y, 2) = TextBox1.Text = Format(Date, "mm/dd") Cells(y, 3) = TextBox2.Text Cells(y, 13) = TextBox3.Text Cells(y, 14) = TextBox4.Text TextBox1.Text = Format(Date, "mm/dd") TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" TextBox1.SetFocus End Sub USERFORM1 を立ち上げたときに TEXT BOX1 に今日の日付が出るようにしたいのですが上記のマクロでは 表示されません。 色々調べて上記のマクロを作成しました。 恐れ入りますが上のマクロのどこがいけないのかご指導願えませんでしょうか。 よろしくお願いします。

  • Private Sub UserForm_Init

    いつもお世話になります。 Windws7 excell2010 です。 同一のシートに二つの「Private Sub UserForm_Initialize()」があるときにどう名前を変えればまたはどうすればいいかご指導願えませんか。 「Private Sub UserForm_Initialize()」が一つの時はE5のようにうまく作動してくれます。 E列に 売上の 「回収」のリスト Private Sub UserForm_Initialize() F列に 何時の 「売掛月」のリスト(1~12の数字) Private Sub UserForm_Initialize() A列に =IF(B2="","",TEXT(B2,"mm")) 参考に下記します。 ~1 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "振込" .AddItem "現金" .AddItem "小切手" End With End Sub ~2 Private Sub UserForm_Initialize() With ComboBox2 .AddItem "10" .AddItem "11" .AddItem "12" End With End Sub '**************** '設定 '**************** 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, 5) = ComboBox1.Text Cells(y, 6) = ComboBox2.Text UserForm2.TextBox1.Text = "" UserForm2.TextBox2.Text = "" UserForm2.TextBox3.Text = "" UserForm2.ComboBox1.Text = "" UserForm2.ComboBox2.Text = "" UserForm2.TextBox1.SetFocus End Sub

  • ユーザーフォームに入力したデーターが転記できない

    いつもお世話になります。 Windows7 excell2010 です。 いろんなものに勉強してここまでに作成したユーザーフォームですが、データーは入力できるのですがコマンドボタンをクリックしても各セルに反映されません。 色々と試行錯誤していますがうまくゆきません。 どこに不具合があるかわからず恐れ入りますがどなたかご指導いただけませんか。 参考にコードは参考に下記にします。 ユーザフォームのVBAは下記です コード ※Module1 Sub 売上() Do UserForm1.Show Loop End Sub Sub 入金() Do UserForm2.Show Loop End Sub ※UserForm1 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "1" .AddItem "2" .AddItem "3" End With End Sub Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm1.TextBox1.Text Cells(n, 3) = UserForm1.TextBox2.Text Cells(n, 4) = UserForm1.TextBox3.Text Cells(n, 11) = UserForm1.ComboBox1.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub ※UserForm2 Private Sub CommandButton1_Click() n = Cells(Rows.Count, 1).End(xlUp).Row + 1 Cells(n, 2) = UserForm2.TextBox1.Text Cells(n, 3) = UserForm2.TextBox2.Text Cells(n, 4) = UserForm2.TextBox3.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • エクセルVBAユーザーフォーム「テキストボックス」「コンボボックス」の書式設定について

    ユーザーフォームを作成して、出荷実績を投入しようとしています。 現在、ユーザーフォームを作成して、 上から以下のようにボタンが並んでいます。 (1)コンボボックス1  商品コードと商品名を選択する。 (2)テキストボックス1~7  地域ごとの出荷実績を投入する。 (3)コマンドボタン1  決定→入力 (4)コマンドボタン2  終了 そして、以下3つの問題点がありますが、どのようにVBAを記述したら良いのか、わかりません。  a.コンボボックス1に表示される商品を商品コード   (アルファベット)と商品名で改行したい。   つまり「折り返して全体を表示する」ことは出来ないでしょうか。  b.「AAAA~」は5行目・「CCCC~」は7行目 といった   ように、商品ごとに値を投入する行を変更したい。  c.テキストボックス1~6の内容の合計が自動で(入力している   最中に)テキストボックス7に表示されるようにしたい。 次のようなVBAは記述出来たのですが、上記3つの要素を加えるには どのようにしたらよいのか、教えていただけないでしょうか? ちなみに入力する順番は次のようになっています。(設定済み) M4→L4→J4→K4→H4→I4 →M5→L5→J5→K5→H5→I5 ------------------------------------------------------------- ’フォームを表示させる。 Sub formdsp() UserForm1.Show End Sub ’フォーム内容 Dim cnt As Integer Private Sub Combobox1_Change() End Sub '入力ボタン Private Sub CommandButton1_Click() With ActiveSheet .Cells(cnt, 13) = TextBox1.Text .Cells(cnt, 12) = TextBox2.Text .Cells(cnt, 10) = TextBox3.Text .Cells(cnt, 11) = TextBox4.Text .Cells(cnt, 8) = TextBox5.Text .Cells(cnt, 9) = TextBox6.Text .Cells(cnt, 15) = TextBox7.Text cnt = cnt + 1 .Cells(cnt, 13) = Activate End With UserForm1.TextBox1.Text = "" UserForm1.TextBox2.Text = "" UserForm1.TextBox3.Text = "" UserForm1.TextBox4.Text = "" UserForm1.TextBox5.Text = "" UserForm1.TextBox6.Text = "" UserForm1.TextBox7.Text = "" UserForm1.Combobox1.Text = "" UserForm1.TextBox1.SetFocus End Sub '終了ボタン Private Sub CommandButton2_Click() Unload Me End End Sub 'コンボボックス Private Sub userform_initialize() cnt = 4 With UserForm1.Combobox1 .AddItem "AAAA 11111111111" .AddItem "BBBB 22222222222" .AddItem "CCCC 333333333" .AddItem "DDDD 444444" .AddItem "EEEE 5555555555" .AddItem "FFFF 666" .AddItem "GGGG 7777777" .AddItem "HHHH 88888" .AddItem "IIIII 999999999" .AddItem "JJJJ 0000000000000" .AddItem "KKKK 1111" .AddItem "LLLL 222222" .AddItem "MMMM 3333" End With End Sub

  • 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

  • ユーザーフォームVBAでCells(n, 7)が

    いつもお世話になります Windows7 excell2010 です ご指導を仰ぎたいのは参照図で言うと、 TextBox1~6 は順調に入力しますがTextBox7にすると「入力」に飛び 参照図のG13に入力されません。 VBAを勉強し始めたはかりですのでどこが悪いかわかりません。 恐れ入りますがご指導願えませんでしょうか。 下記参考にします。 Module のコードには Sub FormSample() Do UserForm1.Show Loop End Sub Sub Test() MsgBox "ボタンによるマクロの実行" End Sub UserForm1 Private Sub CommandButton1_Click() n = 1 Do n = n + 1 Loop While Cells(n, 1) <> "" Cells(n, 1) = UserForm1.TextBox1.Text Cells(n, 2) = UserForm1.TextBox2.Text Cells(n, 3) = UserForm1.TextBox3.Text Cells(n, 4) = UserForm1.TextBox4.Text Cells(n, 5) = UserForm1.TextBox5.Text Cells(n, 6) = UserForm1.TextBox6.Text Cells(n, 7) = UserForm1.TextBox7.Text Unload Me End Sub Private Sub CommandButton2_Click() Unload Me End End Sub

  • VBA コンボボックスのコード記述位置について

    初心者です。初歩的な質問でお恥ずかしいのですが、コンボボックス用のコードを 記述するには「Private Sub UserForm_Initialize()」の下に記述するしかないのでしょうか。 例えば、縦長のユーザーフォームに上からコンボボックス1、コマンドボタン、コンボボックス2を 配置した場合、コードの記述をコンボボックス1の処理、コマンドボタンの処理、コンボボックス2の処理と、順番通りに記述することは出来るのでしょうか? 現在はこのようにコードを記述しています。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "赤色" .AddItem "青色" .AddItem "黄色" End With With ComboBox2 .AddItem "緑色" .AddItem "黒色" .AddItem "紫色" End With End Sub Private Sub CommandButton1_Click() MsgBox "テスト" End Sub 本当であれば、下記のように順番通りに記述したいです。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "赤色" .AddItem "青色" .AddItem "黄色" End With End Sub Private Sub CommandButton1_Click() MsgBox "テスト" End Sub With ComboBox2 .AddItem "緑色" .AddItem "黒色" .AddItem "紫色" End With End Sub With ComboBox2の上に、必要なコードを記述すればできるのでしょうか。 ご教示下さい。

  • VBA 追加したMultiPageでのイベント

    ExcelVBAでどうしても分からないところがあったため、質問させていただきました。 <Usrform上Control> ・UserForm1 ・MultiPage-Page1 ・CommandButton1(押すとPageが追加されます。Page1,Page2,Page3...) ・Combobox1 ・TextBox1 <現在可能な動作> UserForm1上にMultiPageのPage1を設定しています。 CommandButton1を押すとPage2が追加され、Page1上に設定されてあるCombobox1とTextBox1をPage2上に追加します。 <行ないたい動作> 現在は、Page1上でCombobox1の値が変更された時に、Page1上のTextBox1の値が変更されるように設定していますが、 Page2上のCombobox1の値が変更された時に、Page2上のTextBox1の値を変更することは出来ますでしょうか? 使用Versionは、Excel 2003です。 何卒、よろしくお願いします。 <Code> Private Sub CommandButton3_Click() Dim myCmbbx As MSForms.ComboBox Dim myTxtbx As MSForms.TextBox With MultiPage1 .Pages.Add , , .Value + 1 .Value = .Value + 1 End With With MultiPage1.SelectedItem Set myCmbbx = .Controls.Add("Forms.Combobox.1", "ComboBox1", True) With myCmbbx .AddItem "AAA" .AddItem "BBB" .AddItem "CCC" End With Set myTxtbx = .Controls.Add("Forms.TextBox.1", "TextBox1", True) With myTxtbx .MultiLine = True End With End With End Sub Private Sub ComboBox1_change() If ComboBox1.Text = "BBB" Then TextBox1.Value=1234567 End If End Sub

  • エクセルVBA コンボボックスの値の転記

    エクセルVBAの質問です。 ユーザーフォームを表示し 年を選択するコンボボックス1 月を選択するコンボボックス2 を入力してもらい ユーザーフォームを閉じるときに sheet1のワークシートのC2セルに 「コンボボックス1の値」+「年」+と「コンボボックス2の値」+「月」をつなげて 入力できるというようなマクロを考えています。 下記の様に考えてみたのですが、 うまく入力できませんでした。 Private Sub UserForm_Initialize() With ComboBox1 .AddItem "2021" .AddItem "2022" .AddItem "2023" .AddItem "2024" End With With ComboBox2 .AddItem "1" .AddItem "2" .AddItem "3" .AddItem "4" .AddItem "5" .AddItem "6" .AddItem "7" .AddItem "8" .AddItem "9" .AddItem "10" .AddItem "11" .AddItem "12" End With Private Sub CommandButton1_Click() 'ユーザーフォームを閉じる Unload UserForm1 'ユーザーフォームの値をセルC2に入力 With Worksheets("sheet1") .Cells(2, 3).Value = "ComboBox1.Text" & "月" & "ComboBox2.Text" & "日" End With End Sub どのように修正すればいいでしょうか? よろしくお願いします。

  • EXCEL VBA 多種のコンボボックス操作

    こんばんは。 現在ユーザーフォーム上に10個のコンボボックスを配置しています。 1-8は共通リストを、9と10は別々のリストを表示させたいのですが・・ Private Sub UserForm_Initialize() Dim X, No, Y As Integer With UserForm2 For No = 1 To 8 For X = 0 To 7 .Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next For Y = 0 To 7 .ComboBox9.AddItem Worksheets("Letter").Cells(Y + 1, 11).Value .ComboBox10.AddItem Worksheets("Letter").Cells(Y + 1,12).Value Next End With End Sub 上記のコードですが、エラーが出てどうにも行き詰っています。 Private Sub UserForm_Initialize() Dim X, No As Integer For No = 1 To 8 For X = 0 To 7 UserForm2.Controls("ComboBox" & No).AddItem Worksheets("Letter").Cells(X + 1, 10).Value Next Next End Sub ↑だと1-8まで問題なく動くのですが・・・ すみませんが、アドバイスお願いいたします。

専門家に質問してみよう