2017-07-11 10 views
1

データ入力を簡単にするために、ユーザーは「/」を付けずに「ddmmyyyy」と入力することができます(例: "12032017")。エントリの後、 "dd/mm/yyyy"の値、たとえば "12/03/2017"でターゲットセルを更新したいとします。
開始時に、ターゲットセルのフォーマットは "General"に設定されますが、日付値が計算されるとすぐに、セルのフォーマットは自動的に "dd/m/yyyy"に変更されます。 私は、一般書式と日付書式の両方を使用しようとしました。以下は、あなたはまだ日付ではなく実際の日付、使用DateSerialのように見える文字列を返しているVBAコード文字列の値をvbaの日付値に変換する

If Not Intersect(Target, Range("D11:D510")) Is Nothing Then 
    If Not (Target.Value = "") Then 
    Application.EnableEvents = False ' very important 
    Target.Value = Left(Target.Value, 2) & "/" & Mid(Target.Value, 3, 2) & 
    "/" & Right(Target.Value, 4) 
    Application.EnableEvents = True 'very important 
    End If 
    End If 
+0

'12032017'は、Excelが意志有効な認識日付ではありません自動的に変更されるので、フォーマットを変更するだけでは機能しません。 Worksheet_Changeイベントでvbaが必要です。このイベントは、文字列を解析して日付を返し、適切にフォーマットできます。 –

+0

@ScottCraner、返信いただきありがとうございます。はい、私はマクロを使用しており、以下はコードです。 (ターゲット、範囲( "D11:D510"))がNothingの場合 Not(Target.Value = "")Then Application.EnableEvents = False '非常に重要 Target.Value = Left(Target。値、2)& "/" &ミッド(Target.Value、3、2)& "/" &右(Target.Value、4) Application.EnableEvents = true「に非常に重要な エンド END IF – Ehsan

+0

もしくださいコメントではなく[編集]を使ってオリジナルの投稿にコードを入れてください。 –

答えて

1

です:

If Not Intersect(Target, Range("D11:D510")) Is Nothing Then 
    Target.NumberFormat = "@" 
    If Not (Target.Value = "") Then 
     Application.EnableEvents = False ' very important 
     Target.Value = DateSerial(Right(Target.Value, 4), Mid(Target.Value, 3, 2), Left(Target.Value, 2)) 
     Target.NumberFormat = "dd/mm/yyyy" 
     Application.EnableEvents = True 'very important 
    End If 
End If 
+0

スコット、私はオーバーフローエラーを取得していない場合(Target.Value = "")Thenステートメント – Ehsan

+0

ターゲットの値は何ですか?わたしにはできる。 –

+0

ターゲットセルのフォーマットを日付ではなく一般的に設定することで、問題なく動作します。ありがとうございました – Ehsan

関連する問題