web-dev-qa-db-ja.com

Excelの日付の書式設定

列にアメリカの日付を含むインポートされた大きなcsvファイルがあります。これらの日付を英国形式に変更したい(dd/mm/yyyy)コードを使用します。問題は、米国の日付が両方にあるということです"mm/dd/yyyy"および"m/dd/yyyy"フォーマット-後者は、Excelの「クリック可能な」オプションのいずれにも応答しません-「テキストから列へ」の手順を含みます。隣接する列で実行したときに変換を実行するコードはありますか?

16
Mary

TEXT()関数も非常に簡単に使用できます(注:ソースデータはExcelの日付値である必要があります)

TEXT(value, format_text)

ここで、valueは参照セルで、format_textはテキストのフォーマット方法です。ケースではdd/mm/yyyyです。

想定:

A1 = 3/17/2013
A2 = 12/27/2013

B1およびB2に単​​に入力します。

B1 = TEXT(A1, "dd/mm/yyyy")
B2 = TEXT(A2, "dd/mm/yyyy")

結果は

     A              B
3/17/2013      17/03/2013
12/27/2013     27/12/2013

お役に立てば幸いです。

テキストを使用する場合の提案の更新:

mid()left()right()関数を使用して文字列を分割し、LEN()関数を使用して月mmが1文字または2文字かどうかを確認します。最後に、&および/演算子を使用して文字列を連結します。

これをB1に貼り付けてみてください、うまくいくはずです:

=MID(A1,FIND("/",A1,1)+1,2)&"/"&IF(LEN(LEFT(A1,FIND("/",A1)-1))=1,0&LEFT(A1,FIND("/",A1)-1),LEFT(A1,FIND("/",A1)-1))&"/"&RIGHT(A1,4)

26
rg144

DATEVALUE関数を使用して、日付文字列をExcelデータ値に変換してから、カスタム日付形式を作成して、日付値を英国形式で表示できます。

最初の日付文字列がセルA1にあると仮定すると、次の関数呼び出しは文字列を日付値に変換します。

  =DATEVALUE(A1)

カスタム形式を作成できますdd/mm/yyyy;@セルを右クリックして、[セルの書式設定]、[数値]、[カスタム]を選択し、[タイプ]フィールドに書式を入力します。

日付文字列の代わりに日付値を使用すると、文字列操作を行って日付要素を再配置することなく、表示形式を変更できます。また、必要に応じて、日付の算術演算を実行できるようにします。

3
chuff

ここに役立つサブがあります。 QueryTablesメソッドを使用して、Excelがデータの特定の列を文字列として解釈するように指定できます。

_Sub ImportExternalCSVAsText()
'
Dim sFileName As String
sFileName = Application.GetOpenFilename("CSV files, *.csv")

    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & sFileName _
        , Destination:=Range("$A$1"))
        .Name = "CSV"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 437
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 2, 2) '2 denotes STRING
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
_

この例では、CSVファイルを3列幅でインポートし、列2と3に文字列型のデータが含まれるように指定します。

.TextFileColumnDataTypes = Array(1, 2, 2) '2 denotes STRING

この方法が機能しない場合は、お知らせください。私は以前にこの問題に対処しなければなりませんでした(英国の請負業者の米国の請負業者として)。そのとき使用していたいくつかの機能があります。

これにより、すべての値が文字列として取り込まれます。

ほとんどの場合、解析する必要があります「12/30/2011」などの米国の日付入力はシステムロケールのDATEVALUE()関数に失敗し、「07」のような米国の日付入力は失敗するため2012年5月5日」(2012年7月5日)は、ロケールによって「2012年5月7日」と解釈されます。

2
David Zemens

奇妙なことに、これを行うには、テキストの1列をテキストの1列に変換する必要があります。

日付を含む列を選択:mm/dd/yyyy

  • [データ]で、[列にテキストを選択]
  • 固定幅を選択
  • 年(yyyy)の後に列幅の区切りを設定します
  • 列データ形式
  • ドロップダウン選択mm/dd/yyyy(ソース形式)
  • 目的地を選択
  • 終わり

ソースデータは、システムの日付形式に変換されます。

Sub USUKDateFormat()

    ' USUKDateFormat Macro

    Selection.TextToColumns Destination:=ActiveCell.Offset(0, 2).Range("A1"), _
        DataType:=xlFixedWidth, OtherChar:="/", FieldInfo:=Array(Array(0, 4), Array _
        (10, 1)) 
End Sub 
1
MaryPat

この関数はトリックを行う必要があります。

=CONCATENATE(MID(B2,SEARCH("/", B2,1)+1,2), "/",LEFT(B2,SEARCH("/", B2,1)-1), "/", RIGHT(B2,4))
1
SteveP