私のロケールでは、日付は dd/mm/yyyy またはその変形 (dd-mm-yy を含む) として挿入されます。Excel フォーム (通常の Excel ファイル) を作成し、日付を dd/mm/yyyy として表示するように既にフォーマットしましたが、「05/04/2015」と入力すると、「04/05/2015」と表示されます。地域設定をローカル設定に変更することで解決できることはわかっていますが、地域設定の変更方法を知らない多くの人にこのフォームを配布する必要があり、誰もその方法を教えてくれないと仮定して、質問します。
地域設定を変更せずに、「05/04/2015」と入力して「2015 年 4 月 5 日」として認識させる方法はありますか?
追加メモ: 「4 May 15」(4/5/15 と入力) を意味している場合、Excel は入力を「mm/dd/yy」形式として受け取るため、これを「5 April 15」として認識します。 Excel のデフォルトの動作を「dd/mm/yyyy」に変更する必要がありますこれはユーザーが入力する方法です。
可能であれば、エンドユーザーが設定を変更することなくフォームを使用できるように、設定もファイルに含める/埋め込む必要があります。
マクロや VBA には詳しくありませんが、試してみたいと思います :)
編集: これは私の質問に関連しています: MS-EXCEL の数式バーで日付形式を dd-mm-yyyy から dd-mm-yy に変更するにはどうすればよいですか?
ただし、Excel が dd/mm/yy 形式で入力していることを認識している限り、数式バー全体を変更する必要はありません。
答え1
このWorksheet_Change
イベントは基本的にあなたが求めていることを実現できますが、ユーザーが変更を意図していることを確認する必要があります。私は、'Yes/No'
誤って変更されないように、ソリューションに選択ボックスを追加しました。選択ボックスなしでこれを行うのは危険です。既存の値を編集しようとすると、元の書式に戻ってしまうからです。
このコードは、操作対象のシートの VBA コード内に「存在」する必要があります。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iDay, iMonth, iYear As Integer
Dim solutionRange As Range
'the cells you want the date to change for
Set solutionRange = Range("D4:D12")
'only triggers if the user's changing one cell
If Target.Count = 1 Then
If (Not (Intersect(solutionRange, Target) Is Nothing) And (Target.Value > 0)) Then
'disable application events so this change doesn't trigger itself
Application.EnableEvents = False
iDay = Left(Target.Value, 2)
iMonth = Mid(Target.Value, 4, 2)
iYear = Right(Target.Value, 4)
' Give the user a choice to say whether they need the date changed. You *can* remove both the 'If' and 'End If' if you really need to, but I'd strongly suggest keeping them.
If (MsgBox("Have you entered your date in the format 'MM/DD/YYYY'?", vbYesNo) = vbYes) Then
Target.Value = DateValue(iMonth & "/" & iDay & "/" & iYear)
End If
Application.EnableEvents = True
End If
End If
End Sub
答え2
あなたのおっしゃっていることはよくわかります。私は YY-MM-DD と入力するのが好きです。それを希望どおりに変更する設定は Excel にはありません。必要な設定は Windows にあります。コントロール パネルの「時刻と言語」のどこかに隠されています。
詳細設定の「時刻と日付の形式の変更」に移動して、「短い日付」設定を変更する必要がありました。
使用するオペレーティング システムに応じて、手順が多少異なる場合があります。
お役に立てれば。
答え3
デフォルトを変更することはできないと思います。特に海外からデータをインポートする場合、修正するのは面倒です。
私が考えられる最も簡単な方法は、何らかの手動の方法を使用することです...
オプション1: 入力を受け入れることができます文章書式を設定してセルに入力すると、Excel は日付として解釈しなくなります。次に、隣接するセルで、LEFT、RIGHT、および MID とともに DATE 関数を使用できます。たとえば、ユーザーが日付を MM/DD/YYYY の完全な形式で入力する必要があることを指定します。
セル A1: 2015/04/05
セル B1: =DATE( RIGHT(A1,4), LEFT(A1,2), MID(A1,4,2) )
オプション 2: ユーザーに「日」、「月」、「年」を 3 つの別々のセルまたはフィールドに入力するよう要求します。これは、設定に応じて、良い場合も悪い場合もあります。
とにかく頑張ってください!
答え4
すでにある同じ形式を使用してセルに新しいデータ値を割り当てるときにも同じ問題が発生しました。
ターゲット セルの形式は同じですが、2018 年 12 月 2 日は 2018 年 12 月 2 日に置き換えられます。
..Range("B10").Value = DateValue(newdate) を使用すると問題は解決しました