web-dev-qa-db-ja.com

GoogleシートMM-DD-YYYYからDD-MM-YYYY

EtsyショップからCSVデータをダウンロードして、税金を計算しました。日付を適切に「コピー」したいのですが。

Etsyから取得したCSVの日付は「02/09/16」の形式になっています

これは、オランダ語では「2016年9月2日」ですが、英語では「2016年9月2日」です。

これを正しい日付に変更する方法を見つけることができないようです。言語/時間およびロケール設定を変更するとき、Googleスプレッドシートは常にそれが正確に間違っていることを確認します。すべてをUSまたはAUSに設定すると、日付はオランダの日付として返され、すべてをオランダに設定すると、英語の日付が返されます!

最初のダッシュ "02"(月)の前に2つの数値を抽出し、=vlookup()を使用してデータシートから月を検索し、これを正しい日付に貼り付けると考えていました。馬鹿げた回避策のようですが、日付を適切に変更できないようです。

        Col.A    Col.B
Row. 1)    01    January
Row. 2)    02    February

01を検索し、B1を返します。等々…

何か案は?私はまさにExcel /スプレッドシートの第一人者ではありません。

3
Ramon

したがって、mm/dd/yyでフォーマットされたものがありますが、ローカルフォーマットはdd/mm/yyです。日付を回復するには、必要があります

  1. インポートされた日付をプレーンテキストとしてフォーマットします。これらが列Aにあるとします
  2. 列Bで、regexreplaceを使用して日付をあいまいでない形式で再構築し、datevalueを使用して日付に変換します。列Bは日付としてフォーマットする必要があります。

B列の式は

=datevalue(regexreplace(A2, "(\d+)/(\d+)/\d*(\d{2})", "20$3-$1-$2"))

これは、2016年9月2日または2016年9月2日のいずれかを、ISO 8601標準に準拠する日付である2016-02-09に置き換えるため、ローカル設定に関係なく2月9日と解釈されます。

(開始する日付が2/9/16の場合、変換後のフォームは2016-2-9であり、正確にはISOではありませんが、datevalueは同じように処理します。)

その他のセパレーター

一部の日付にスラッシュ-ではなくハイフン/が含まれている場合、次の正規表現を使用して処理できます。

=datevalue(regexreplace(A2, "(\d+)[-/](\d+)[-/]\d*(\d{2})", "20$3-$1-$2"))

ここで、文字グループ[-/]は、リストされている文字の1文字を意味します。

20世紀の問題

上記は、日付が21世紀を参照していることを前提としています。 98年9月2日も処理するには、さらに作業が必要です。たとえば、上記を実行した後、もう1列を作成します。

=if(year(B2)>2050, date(year(B2)-100, month(B2), day(B2)), B2)

これは、2050年を過ぎている場合、日付から100年を差し引きます。

3
user79865

テキスト形式か日付形式かに関係なく、日と月の順序を切り替えるには:

=--join("/",index(split(A1,"/"),2),index(split(A1,"/"),1),right(A1,2)) 

JOIN
インデックス
SPLIT
RIGHT

必要な「方向」がわかっている場合、次のスーツのいずれかが短くなります。

=--TEXT(A1,"dd/mm/yy")
=--TEXT(A1,"mm/dd/yy")

繰り返しますが、A1がテキスト形式であるか日付形式であるかです。

TEXT

0
pnuts