列にアメリカの日付を含むインポートされた大きなcsvファイルがあります。これらの日付を英国形式に変更したい(dd/mm/yyyy)
コードを使用します。問題は、米国の日付が両方にあるということです"mm/dd/yyyy"
および"m/dd/yyyy"
フォーマット-後者は、Excelの「クリック可能な」オプションのいずれにも応答しません-「テキストから列へ」の手順を含みます。隣接する列で実行したときに変換を実行するコードはありますか?
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)
DATEVALUE関数を使用して、日付文字列をExcelデータ値に変換してから、カスタム日付形式を作成して、日付値を英国形式で表示できます。
最初の日付文字列がセルA1にあると仮定すると、次の関数呼び出しは文字列を日付値に変換します。
=DATEVALUE(A1)
カスタム形式を作成できますdd/mm/yyyy;@
セルを右クリックして、[セルの書式設定]、[数値]、[カスタム]を選択し、[タイプ]フィールドに書式を入力します。
日付文字列の代わりに日付値を使用すると、文字列操作を行って日付要素を再配置することなく、表示形式を変更できます。また、必要に応じて、日付の算術演算を実行できるようにします。
ここに役立つサブがあります。 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日」と解釈されます。
奇妙なことに、これを行うには、テキストの1列をテキストの1列に変換する必要があります。
日付を含む列を選択: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
この関数はトリックを行う必要があります。
=CONCATENATE(MID(B2,SEARCH("/", B2,1)+1,2), "/",LEFT(B2,SEARCH("/", B2,1)-1), "/", RIGHT(B2,4))