役に立つか?VBAメモ

仕事で使ったVBAをメモっとく

エクセルで1月1日入力すると今年の1月1日になるから

都度2015/~ってキー打つのめんどくさい~
5文字多い~


で、調べたらオートコレクトに”..”を登録して”2015/”って出るようにするのがあった。
早速使ってみたけど、TextBoxやUserForm上では効いてくれないらしい。
そのまま”..1/5”なんてなってしまう。

仕方ないのでオートコレクトをヒントにVBAで毎年変更せずオートコレクトと同じように使えるようにしました。
TextBoxに”..1/5”と入れるとセルに”2015/1/5”と表示されるVBAで、
”..”入れないで”1/5”だと”2014/1/5”ちゃんとになります。

オートコレクト毎年変えなくてもいいから楽ちんですね~

シート(1)にTextBox1を配置し、D1に結果を表示します。

 

Private Sub TextBox1_Change()

If Left(TextBox1.Value, 2) = ".." Then
TextBox1.Value = Replace(TextBox1.Value, "..", Format(DateAdd("yyyy", 1, Date), "yyyy") & "/")
Sheets("1").Range("D1").Value = TextBox1.Value
Else
Sheets("1").Range("D1").Value = TextBox1.Value
End If

End Sub

 

 日本語で書くとこう

 

TextBox1が変わったらやることだよ

もし、TextBox1の値の左から2つ目までが「..」だったら、
TextBox1の値は、TextBox1の値の「..」を今日の日付の年に1を足して、年だけの4桁に変えて最後に「/」を加えるよ
シート1のセルD1の値は、このTextBox1の値と一緒にするよ

「..」がなかったら

そのまんまシートD1の値は、このTextBox1の値と一緒にするよ

もしもの話はこれでおしまい

 

あたまんなかでこんな風に書いてます・・・

追記

こっちのほうが楽かも?

If CDate(TextBox1.Value) < (Date - 240) Then

Sheets("1").Range("D1").Value = DateAdd("yyyy", 1, TextBox1.Value)

'CDateで文字列を日付に変換したものが8ヶ月より前だったら
'D1の値をTB1の年の位に1足したものにする