17

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

4

5 に答える 5

28

また、関数を非常に簡単に使用することもでき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()、関数を使用して月 mm の長さが 1 文字か 2 文字かを確認します。最後に、& および / 演算子を使用して文字列を連結します。left()right()LEN()

これを 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)

于 2013-03-27T17:28:22.850 に答える
3

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

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

  =DATEVALUE(A1)

カスタム フォーマットを作成するdd/mm/yyyy;@には、セルを右クリックし、[セルのフォーマット]、[数値]、[カスタム] の順に選択し、[タイプ] フィールドにフォーマットを入力します。

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

于 2013-03-27T17:17:54.270 に答える
2

ここにあなたを助けるかもしれないサブがあります。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

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

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

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

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

DATEVALUE()「2011 年 12 月 30 日」のような米国の日付入力はシステム ロケールの機能に失敗し、「07/05/2012」(2012 年 7 月 5 日) のような米国の日付入力は解釈されるため、おそらくそれらを解析する必要があります。あなたのロケールでは「2012 年 5 月 7 日」のように。

于 2013-03-27T17:36:13.777 に答える
1

奇妙なことに、これを行うには、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 
于 2014-02-17T17:44:06.510 に答える
1

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

=CONCATENATE(MID(B2,SEARCH("/", B2,1)+1,2), "/",LEFT(B2,SEARCH("/", B2,1)-1), "/", RIGHT(B2,4))
于 2013-03-27T17:00:01.353 に答える