0

日付を dd-mm-yyyy 形式から dd/mm/yyyy 形式に変換するのに苦労しています。

たとえば、2012 年 2 月 25 日 (dd/mm/yyyy) として Excel に日付を入力すると、次の行に日付を入力すると、日付が 2012 年 2 月 25 日 (dd-mm- yyyy) 形式。

私がやりたいことは、Excel で (dd/mm/yyyy) 形式で日付を入力すると、そのまま保持し、次に移動するときに (dd-mm-yyyy) 形式に戻してはならないということです。細胞。

日付を現在のシステム日付として入力すると、コードでエラーが表示されます。日付の検証に問題があります。つまり、入力した日付が有効な日付であるかどうかです。

    Sub valid_date()
    ' ---------------------------------------------------------------------
    ' Final Code - Trial
    ' ---------------------------------------------------------------------

    Dim d1 As Variant
    Dim IssueDate As Variant
    Dim str As Variant

        d1 = Worksheets("Sheet1").Cells(6, 1).value

            MsgBox " The Issue Date format is " & d1

        sysdate = Date

        MsgBox "System Date is " & sysdate


                If IsDateValid(d1) Then ' if date is in dd/mm/yyyy format then print this
            If (d1 > sysdate) Then
                MsgBox "Invalid date"
            End If
        End If
     End Sub

    Function IsDateValid(pdate) As Boolean

        IsDateValid = False

        Set RegExp = CreateObject("VBScript.RegExp")

        '   it only matches whether date is in dd/mm/yyyy format or not
        '
        '   [1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1]   ---> it allows the DATE  from 01 to 31
        '   [1-9]|0[1-9]|1[0-2]                 ---> it allows the MONTH from 01 to 12
        '   1[9][0-9][0-9]|2[0][0-9][0-9]       ---> it allows the YEAR  from 1900 to 2099
        '
        '   below is the regular expression for checking the date in dd/mm/yyyy format

        RegExp.Pattern = "^([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])[/]([1-9]|0[1-9]|1[0-2])[/](1[9][0-9][0-9]|2[0][0-9][0-9])$"

        ' check whether the date is in dd/mm/yyyy format or not....
        tempdate = RegExp.Test(pdate)

             If tempdate Then    ' if tempdate is in dd/mm/yyyy format than proceed further
                'If isdate(tempdate) Then  ' if date is a valid date then proceed further
                 If isdate(pdate) Then
                    IsDateValid = True
                Else
                    IsDateValid = False
                End If
            Else
                IsDateValid = False
            End If               
    End Function

正規表現を使用して上記のコードを使用して、日付が dd/mm/yyyy 形式であるかどうかを確認しています

しかし、私が直面している問題は、dd/mm/yyyy 形式で日付を入力するたびに、Excel の日付が dd-mm-yyyy 形式になることです。

コードを少し更新しました。現在のシステム日付として日付を入力するとエラーが発生するため、もう 1 つヘルプが必要です

たとえば、日付を 09/09/2012 (現在のシステム日付と仮定) として入力し、IsDate メソッドを使用してこの日付を確認すると、エラーが発生します。

私は再び自分のコードを編集しました、

誰でもこれについて私を助けてくれますか

4

3 に答える 3

1

VBA/RegExは必要ありません。日付を入力するセル/列を選択し、カスタム数値形式を作成しますdd/mm/yyyy。これで、有効な日付(05-05-2000、3-1-2010、14 / 6-1990など)をどのように入力しても、としてフォーマットする必要がありますdd/mm/yyyy

また、Olleが指摘しているように、VBAで日付を操作する場合Dateではなく、オブジェクトを使用する必要があります。Variantこのようにして、フォーマットの問題が発生する可能性のある文字列ではなく、シリアル番号を操作します。

于 2012-08-09T18:00:50.050 に答える
0

まず、コンピューターの地域設定で日付を確認することをお勧めします。「dd/mm/yyyy」形式を使用するように設定すると、Excel でも使用され、RegEx VBA コードが不要になることを願っています。

次に、VBA を使用して日付を再フォーマットする必要がある場合は、Variant ではなく Date データ型を使用することを強くお勧めします。また、タイプミスを最小限に抑え、より高品質のコードを生成するために、コードの先頭で Option Explicit を使用し、変数を明示的に宣言することをお勧めします。

第三に、私はあなたのコードをもう少し調べましたが、うまくいかないようです:

1. 宣言されていないためtempdate、 2. 3の結果からをVariant
代入tempdateします。したがって、チェックすると常に になります。booleanRegExp.Test(pdate)
IsDate(tempdate)falsebooleanDate

繰り返しますが、Dateデータ型を使用する場合は、正規表現をスキップできます... :)

于 2012-08-09T11:47:55.697 に答える
0

Adobe オンライン PDF to Excel を使用しており、日付は MM/DD/YYYY として正しく表示されますが、月 (=Month()) を抽出すると DD 部分が返されます。DD/MM/YYYY として解釈されています。ファイルを閉じた.csvとして保存し、Excelを再起動して.csvファイルを開いたところ、日付は正しいMM/DD/YYYYでした。

于 2012-12-20T13:18:36.517 に答える