列にアメリカの日付を含む大きなインポート csv ファイルがあります。コードを使用して、これらの日付を英国形式に変更したいと考えて(dd/mm/yyyy)
います。問題は、米国の日付が と の両方"mm/dd/yyyy"
の"m/dd/yyyy"
形式であることです。後者は、「テキストから列へ」手順を含む、Excel の「クリック可能な」オプションのいずれにも応答しません。隣接する列で実行すると変換を行うコードはありますか?
5 に答える
また、関数を非常に簡単に使用することもでき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)
DATEVALUE 関数を使用して日付文字列を Excel データ値に変換し、カスタム日付形式を作成して日付値を UK 形式で表示できます。
最初の日付文字列がセル 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
この例では、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 日」のように。
奇妙なことに、これを行うには、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
この関数はトリックを行う必要があります:
=CONCATENATE(MID(B2,SEARCH("/", B2,1)+1,2), "/",LEFT(B2,SEARCH("/", B2,1)-1), "/", RIGHT(B2,4))