2013-08-28 19 views
6

2つの長い列のCSVファイルをインポートしました。これらの日付は、米国のフォーマットAug/28/2013であり、標準の英国dd/mm/yyyyフォーマットになるようにします。Excel 2010 - 米国の日付を英国の形式に変更する

私は米国の日付としてセルをフォーマットしてから、数字のみの形式に変換し、日付形式ボックス内のさまざまな他の順列に変換しようとしましたが、成功しませんでした。

誰も私にこれらのひどい米国の日付を取り除くことができますか?

+0

あなたはフィルタリングすることができますWindowsのPowershellを使ってExcelで(* ftpの* nixサーバーへ)ksh/bash on * nixをインポートする前にcsvを実行してください。 –

答えて

1

私は受け取った日付がテキストとして書式設定されていて、単純に日付として書式を設定しても何も変わらないと仮定しています。あなたは日に次の式を実行することができます:あなたが番号を取得した場合

=(MID(A1,FIND("/",A1)+1,FIND("/",A1,FIND("/",A1)+1)-FIND("/",A1)-1)&"-"&LEFT(A1,FIND("/",A1)-1)&"-"&RIGHT(A1,4))*1 

、あなただけdd/mm/yyyyとしてそれをフォーマットする必要があり、それは良いことがあります。

3

問題は、米国の日付が、13日未満の英国の日付として解析されることがあります。この場合、Excelはローカライズされた英国のシリアル(日付)番号に変換されます。

だから、03/19/2014は明らかに3月19日の米国の日付です。ただし、2014年5月3日はあいまいなので、Excelは、米国の5月3日ではなく、3月5日のローカル日付形式を解析します。 Excelが米国の日付を英国の日付として保存しているかどうかを確認する式が必要です。英国の日付はExcelで数値として保存されます。

=IF(ISNUMBER(A2),DATE(TEXT(A2,"yyyy"),TEXT(A2,"dd"),TEXT(A2,"mm")),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1,2))) 

(セルA2の米国日付で、PCの日付はdd/mm/yyです)。

ISNUMBERがtrueの場合、米国の日付は英国の日付のように見え、Excelは数値としてシリアル化しています。したがって、日付をテキストとしてフォーマットし、日付に戻すことができます。注:dayは、最初のDATE関数のmonthパラメーターに渡され、変換が実行されます。 ISNUMBERがfalseの場合、Excelとしての文字列として格納され、12ヶ月を超える日付文字列は変換されません。文字列関数を使用してDATE関数を分割します。これに関連し

+0

この式では、1日が1桁(日数が1から9まで)で、先頭にゼロがない場合はエラーを返します。この場合、シンボルとともにスラッシュも抽出されます。私は日の値の抽出方法を変更して回避策を見つけました: '= IF(ISNUMBER(A2)、DATE(TEXT(A2、" yyyy ")、TEXT(A2、" dd ")、TEXT(A2、 MID(LEFT(A2、FIND( "/"、A2,4)-1)、DATE(RIGHT(A2,4)、LEFT(A2、FIND( "/"、A2)-1) FIND( "/"、A2)+ 1、LEN(A2)))) '私はそれをテストし、すべての可能な場合に動作するように見えます。 – Wayfarer

1

は、以下単に式

「DD/MMに

から日付を変更する "MM/DD/YYYY" のために有用であり得ます/ YYYY "

式を使用せずに
=VALUE(TEXT(B2,"mm/dd/yyyy")) 
16

別の解決策:

  • 関連する列
  • が列へのデータ→テキストを選択してください選択...
  • 「区切り」を選択し、
  • をクリックしてください
  • すべての区切り記号を解除し、クリックしてください次へ
  • 選択したデータ列フォーマット「日:MDY」とをクリックして完了

日付は現在、英国の日付に変換する必要があります。

+1

私はこの技術が文字通り何もしない唯一の人ですか? – cbp

1

私たちは、このより簡潔な式で、両方の世界の最高を取得することができます:

=IF(ISNUMBER(A2),VALUE(TEXT(A2,"mm/dd/yyyy")),DATE(RIGHT(A2,4),LEFT(A2,FIND("/",A2)-1),MID(A2,FIND("/",A2)+1,2))) 

は短く何かを見つけることができません。

+0

この式は、1日が1桁(日数が1から9まで)で、先頭にゼロがない場合はエラーを返します。この場合、シンボルと共にスラッシュも抽出されるため、ゼロを返しません。私は日の値の抽出方法を変更して回避策を見つけました: '= IF(ISNUMBER(A2)、VALUE(TEXT(A2、" mm/dd/yyyy "))、DATE(RIGHT(A2,4) (A2、FIND( "/"、A2,4)-1)、FIND( "/"、A2)+1、LEN(A2 )))) '私はそれをテストし、すべての可能な場合に動作するように見えます。 – Wayfarer

0

生データは何とか数字として読み込まれるはずだったが、もう一つ問題があったが、そうではなかった。したがって、私は最後の1つのケースで数式を更新しました。

= IFERROR(IF(ISNUMBER(A2)、VALUE(TEXT(A2、 "mm/dd/yyyy")、DATE(RIGHT(A2,4)、 DATE(RIGHT(A2,4)、LEFT(A2、FIND( "/"、A2)-1)、MID ( "/"、A2)-1)、MID(A2、FIND( "/"、A2)+1,1)))

0

これは混在した形式の日付英国と米国は同じ列にあります。私は無粋ソリューション場合は、有効を発見した:

Step1) Select the column containing the dates to be converted; 

Step2) Format, Cells, Text; 

Step3) Format, Cells, Date, US; 

Step4) Data, Text to column, Next, Delimited, Next, delete all delimiters, Next, select format MDY; 

Step5) Format, Cells, Date, UK. 

ステップ4は、他の場所で示唆されていたが、それはそれ自身の上で私のためにそれをしませんでした。私はこれらのステップをマクロに組み合わせることを望んでいますが、これまでは成功していません。

0

私は他の提案のいくつかを試しましたが、誰も私にとってはうまくいかなかったようです。私の場合は、米国の日付をM/d/yyyy hh:mm:ssの形式でインポートしていました。スプレッドシートにいくつかのVBAを使って気にしない場合は、次の関数は、私のために仕事をした:

Public Function USDate(ds As Variant) As Variant 
    Dim sp() As String 
    Dim spt() As String 
    Dim spt2() As String 

    If ds = vbNullString Then 
     USDate = "" 
    ElseIf IsNumeric(ds) Then 
     ' Convert numeric US dates wrongly interpreted as UK i.e. 1/7/2017 as 7th January 2017 
     USDate = DateSerial(Year(ds), Day(ds), Month(ds)) 
    Else 
     sp = Split(ds, "/") ' split the date portion 
     spt = Split(sp(2), " ") ' split the time from the year 
     spt2 = Split(spt(1), ":") 'split the time hms 

     USDate = DateSerial(spt(0), sp(0), sp(1)) + TimeSerial(spt2(0), spt2(1), spt2(2)) 
    End If 
End Function 

単に例えば、スプレッドシートの数式で使用= USDate(A2)

関連する問題