- ベストアンサー
マクロ:日付入力の簡素化
比較的近い日付を大量に入力する際、いちいち2005/12/25のようにするのは面倒なので、以下のようなマクロがあれば便利なのですが教えていただけますか? 数字の後に「d」を入れると今日から何日後の日付 数字の後に「w」を入れると今日から何週後の日付 普通に入力するとそのまま 例)今日が12/2とすると 5d⇒2005/12/7 2w⇒2005/12/16 12/15⇒2005/12/15 宜しくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Alt+F11で該当するSheetに Private Sub Worksheet_Change(ByVal Target As Range) Dim DT As String, DN As Integer On Error GoTo ERR_End DT = Right(Target, 1) DX = CInt(Left(Target, Len(Target) - 1)) If DT = "w" Then DT = "ww" Target.Value = DateAdd(DT, DX, Date) Target.NumberFormatLocal = "yyyy/m/d" ERR_End: End Sub
その他の回答 (2)
- takkunnet
- ベストアンサー率74% (32/43)
#1です。 D列全体にする場合には Target.Addres(False,False) の部分を Target.Column とし、 case "A1" の部分を case 4 とします。(A=1 , B=2 , C=3 ... という感じで数値であらわします)
お礼
ありがとうございます、できました。大変助かります。
- takkunnet
- ベストアンサー率74% (32/43)
マクロ(VBA)は組まれたことありますか? 多少はわかる前提で記入します。 対象WorkSheetのChangeイベントを使用します。 そのイベント内に Select Case Target.Address(False, False) Case "A1" Select Case UCase$(Right$(Target.Value, 1)) Case "D" Target.Value = Format$(DateAdd("d", Left(Target.Value, Len(Target.Value) - 1), Now), "YYYY/MM/DD") Case "W" Target.Value = Format$(DateAdd("d", Left(Target.Value, Len(Target.Value) - 1) * 7, Now), "YYYY/MM/DD") Case "M" Target.Value = Format$(DateAdd("m", Left(Target.Value, Len(Target.Value) - 1), Now), "YYYY/MM/DD") End Select End Select このような処理で思われている内容ができると思います。 ただし、このVBAでは「A1」のセルのみ対象としてますので、該当するセル範囲しだいで判定方法を変える必要があります。 (全て左よせになっていますがHTMLの関係です。適宜タブを入れることを推奨します。) また、例の最後の「12/15⇒2005/12/15」についてはわざわざVBAにしなくても「スタイル」の機能で可能です。 (通常は「12/15⇒12月15日」になっていると思います。)
お礼
ありがとうございます。やってみます。もし範囲をD列全体にしたい場合は、2行目はCase"D:D"でよろしいのでしょうか?
お礼
ありがとうございます。「D」はできるのですが、「W」も何日後で出てしまいます。どこを変更すればよいでしょうか?宜しくお願いいたします。
補足
失礼しました、できました。間違って大文字で入れていました。誠にありがとうございます。これでだいぶ楽になりそうです。