2017-11-03 9 views
1

VBAコードでは、01-OCT-2017のような文字列の日付のテキストファイルを読み込んでいます。ほとんどの日付のために完璧にCDate()またはDateValue()作品を使用して、フランスやベルギーの設定でWindows上でアクセス:USの文字列をIntl(フランス語)のWindowsに変換する

、ではなく、2月-APR-MAY-JUN-7月・8月のため、ここで「févr」、「AVR」、「舞」 、 "Juin"、 "Juil"が期待されます。例えば、
CDate("15-JUN-2017")は、エラーを返します。
これを処理するVBA関数を書き込む前に、これを処理できるいくつかの魔法の機能があるかどうか疑問に思っていましたか?

+0

(https://superuser.com/questions/730371/how-to-prevent-excel-to-use地域別の日付設定のための設定) – ShanayL

答えて

0

私は次のように書いていますが、フランス語ではうまくいくようです。他の言語と一緒に作業するためには、12ヶ月間をカバーするように改訂することができます。これは、[Excelの数式での日付のパターンのためのOSの地域設定を使用することを防ぐためにどのように]役立つかもしれない

Function cvtUsDt(ByVal sUsDt As String) As Date 
'CDate and DateValue do not work well on US text dates like 15-FEB-2017 
'on machine with some non english regional settings 
'problematic months: FEB-APR-MAY-JUN-JUL-AUG-DEC 
    Dim sMon As String 
    If sUsDt Like "*FEB*" Then 
     sMon = Format(DateSerial(2017, 2, 10), "mmm") 
     sUsDt = Replace(sUsDt, "FEB", sMon) 

    ElseIf sUsDt Like "*APR*" Then 
     sMon = Format(DateSerial(2017, 4, 10), "mmm") 
     sUsDt = Replace(sUsDt, "APR", sMon) 

    ElseIf sUsDt Like "*MAY*" Then 
     sMon = Format(DateSerial(2017, 5, 10), "mmm") 
     sUsDt = Replace(sUsDt, "MAY", sMon) 

    ElseIf sUsDt Like "*JUN*" Then 
     sMon = Format(DateSerial(2017, 6, 10), "mmm") 
     sUsDt = Replace(sUsDt, "JUN", sMon) 

    ElseIf sUsDt Like "*JUL*" Then 
     sMon = Format(DateSerial(2017, 7, 10), "mmm") 
     sUsDt = Replace(sUsDt, "JUL", sMon) 

    ElseIf sUsDt Like "*AUG*" Then 
     sMon = Format(DateSerial(2017, 8, 10), "mmm") 
     sUsDt = Replace(sUsDt, "AUG", sMon) 

    ElseIf sUsDt Like "*DEC*" Then 
     sMon = Format(DateSerial(2017, 12, 10), "mmm") 
     sUsDt = Replace(sUsDt, "DEC", sMon) 
    End If 

    'in case of error, return 1/1/1900 
    cvtUsDt = 0 
    On Error Resume Next 

    cvtUsDt = CDate(sUsDt) 
End Function 
関連する問題