VBA マクロ超初心者です。仕事で作成しなくてはいけなくなったのですが、お手上げ状態です。
同僚で解る人もいるのですが、教えていただいているのですが、何度質問できなくて助けて下さい。
少し前にも同じような質問をしましたが、下記のプログラムを修正して教えていただけると助かります。
UserFormにテキストボックス【実行日】【有効期日】【有効期日周期】を作成し、実行日を入力したら有効期日周期の年によって有効期日が自動でテキストボックスに入力されるプログラムを作成したいです。
Private Sub 実行日_Enter()
Dim dt As Date
Dim dy As Date
Dim s As String
Me.実行日 = dt
Me.有効期日=dy
テキストボックスの実行日に[20200531]と入力したら[2020/05/31]と
変換できるプログラムを作りたい。のですが、
S = "20200531"
dt = CDate(Format(s, "####/##/##"))
のプログラムでもデバックが表示されてどこがわるいのかもわかりません。
If 有効期日周期.Value = "1年" Then
d = DateAdd("yyyy", 1, dt) ' 年
Me.有効期日 = d
End If
End Sub
色々ネットで検索したのですが、どの部分のプログラムを使えばいいのか
検討もつきません。
宜しくお願い致します。
No.1
- 回答日時:
質問内容をよく理解できてません(何年たっても初級者ですので)が、多分こういう事なのかな?と回答してみます。
Private Sub 実行日_Enter()
Dim dt As Date
Dim dy As Date
Dim s As String
'Me.実行日 = dt '変数に何も入れていないのですけど?
'Me.有効期日 = dy '上記同様
s = "20200531"
s = Format(CLng(s), "0000/00/00")
Me.実行日.Text = s
If 有効期日周期.Text = "1年" Then
dt = CDate(s)
dy = DateAdd("yyyy", 1, dt) ' 年
Me.有効期日.Text = CStr(dy)
End If
End Sub
もし違うようでしたらベテランさんの回答を待っててください。
めぐみんさん
ありがとうございました。
全然詳しいです!!
『'Me.実行日 = dt '変数に何も入れていないのですけど?
'Me.有効期日 = dy '上記同様 』
をdt = Me.実行日 に変えたら変数を入れたことになるのでしょうか?
(わからなくて、すみません。)
dt = Me.実行日にして実行したら、デバックがでて黄色になります。
dt = Me.実行日は、プログラムの中で実行日を入力する代わりに、dtをいれるのかと思っていました。(dt=実行日)
No.2
- 回答日時:
Private Sub 実行日_Enter()
Dim dt As Date
Dim dy As Date
Dim s As String
Me.実行日 = dt
Me.有効期日=dy
テキストボックスの実行日に[20200531]と入力したら[2020/05/31]と
変換できるプログラムを作りたい。のですが、
S = "20200531"
dt = CDate(Format(s, "####/##/##"))
のプログラムでもデバックが表示されてどこがわるいのかもわかりません。
If Me.有効期日周期.Value = "1年" Then <= 有効期日周期の前にMe.がありません。
d = DateAdd("yyyy", 1, dt) ' 年
Me.有効期日 = d
End If
End Sub
No.3ベストアンサー
- 回答日時:
こんばんは!
もう一つの質問の方に投稿しようと思ったのですが、
締め切り済みだったのでこちらに投稿します。
とりあえずやってみました
↓の画像のようなユーザーフォームになっているとします。
テキストボックス1~テキストボックス3のオブジェクト名はすべて左側のラベル名としています。
そして左側のような入力後 → コマンドボタンをクリックすると右側のようになるようにしています。
Private Sub CommandButton1_Click()
Dim myY As Long, myM As Long, myD As Long
Dim myDate As Date
With 実行日
myY = Left(.Value, 4)
myM = Mid(.Value, 5, 2)
myD = Right(.Value, 2)
myDate = DateSerial(myY, myM, myD)
.Value = myDate
End With
有効期日 = DateAdd("yyyy", Val(有効期日周期), myDate)
End Sub
※ 画像のように、テキストボックスの「有効期日周期」は単に数値のみの入力としています。
※ 今回も細かいエラー処理はしていません。
足りに「有効期日周期」が空白だとエラーになります。
※ CDate関数をお使いのようですが、
当方の認識ではシリアル値に変換可能な文字列だけがシリアル値に変換可能だと思っていますので、
単に数値の羅列ではシリアル値とは認識されないと思います。m(_ _)m
No.4
- 回答日時:
No.3です。
Cdate関数を使ってみました。
前回のコードよし少し簡単にできます。
↓に変更してみてください。
Private Sub CommandButton1_Click()
Dim myDate As Date
With 実行日
myDate = CDate(Format(.Value, "0000/00/00"))
.Value = myDate
End With
有効期日 = DateAdd("yyyy", Val(有効期日周期), myDate)
End Sub
これでも前回と同じ動きになると思います。m(_ _)m
tom04さん
回答ありがとうございます。
両方とも試しましたが、
myDate = CDate(Format(.Value, "0000/00/00")) ←がデバックが出て、【型が一致しません】とでます。20200601とエクセルにはこのまま
表示されて、もう一回enterをクリックすると、もう一行下に2020/6/1で
表示されます。
先に回答していただいた方は、
myM = Mid(.Value, 5, 2)←部分が黄色になります。そしてenterをもう一度クリックすると下に2020/6/1で表示されます。
No.5
- 回答日時:
No.1のお礼に対して。
>dt = Me.実行日にして実行したら、デバックがでて黄色になります。
日付型と文字列では = で代入は不可能でしょう。
多分No.1を
Private Sub 実行日_Enter()
Dim dt As Date
Dim dy As Date
Dim s As String
s = Me.実行日.Text ' 文字列型で宣言した変数に文字列を入れる
s = Format(CLng(s), "0000/00/00")
If 有効期日周期.Text = "1年" Then
dt = CDate(s)
dy = DateAdd("yyyy", 1, dt) ' 年
Me.有効期日.Text = CStr(dy)
End If
End Sub
こんな感じじゃないのかな?
If文の意味(”1年")がこれであっているのであればですけど。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) ExcelのVBAコードについて教えてください。 4 2023/01/20 09:44
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- その他(Microsoft Office) Excelの関数(FILTER関数)について教えてください 2 2023/07/31 16:11
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンに何かが勝手にダウン...
-
Excel実行時エラー-2146959355?
-
eclipseで、「ポート番号が使用...
-
パソコンのスクリーンセーバー...
-
プログラムが書けません。
-
VBA コントロールパネルの機能...
-
VB.NETでボタンのクリックイベ...
-
VBA 作成中のプログラムを使っ...
-
EXCEL-VBAでコマンド...
-
chatGPTで次々と質問をしていく...
-
ランタイム関数とは何ですか?
-
latexでのエラー
-
pythonで他のアプリを操作する...
-
Flashゲームをホームページで楽...
-
VB.NETを実行するにはどうした...
-
プログラム実行中に強制停止さ...
-
エクセルVBA、ステップモードと...
-
COBOLで集団項目から符号...
-
プログラミングについてです。...
-
VSコード
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パソコンに何かが勝手にダウン...
-
chatGPTで次々と質問をしていく...
-
Excel実行時エラー-2146959355?
-
PC版のMinecraftが応答なしにな...
-
至急!RedmiPadを文鎮化させて...
-
VSコード
-
管理者として実行を毎回すると...
-
エクセルVBA、ステップモードと...
-
VB.NETでボタンのクリックイベ...
-
eclipseで、「ポート番号が使用...
-
EXCEL-VBAでコマンド...
-
プログラミングについてです。...
-
パソコンのスクリーンセーバー...
-
pythonで他のアプリを操作する...
-
プログラム実行中に強制停止さ...
-
latexでのエラー
-
プロパティの値が不正ですって...
-
Flashゲームをホームページで楽...
-
起動したアプリケーションを最...
-
「管理者として実行」された場...
おすすめ情報