毎週、または誰かが日付がアメリカの形式に変換されている(壊れていますか?他の多くの人々と同様に、私は助けようとしましたが、問題は分かりません。私は今原因を発見したのだろうかと思う。.NumberFormatが時々誤った日付と時刻を返します
私は、Excelワークシートからデータを抽出し、Excelユーザーが見ることができる値に一致するようにフォーマットされた文字列として出力する必要があるアプリケーションに取り組んでいます。したがって、値が "1"と表示されるようにフォーマットされている場合は、文字列を "1.00"にします。
セルの値を数値、日付、または時間でテストすることで、この効果が得られます。もしそうであれば、私は番号の形式を取得し、そのセルの値をフォーマットするためにそれを使用します。ほとんどのケースで
With .Cells(Row, Column)
Output string = Format(.Value, .NumberFormat)
End With
これは私が必要と正確に出力を提供します。しかし、ソースが英国の日付または時刻としてフォーマットされているアメリカの日付と時刻が取得されることがあります。
Excel 2003とExcel 2007で多くの実験を行った結果、原因を発見しました。 (私はExcel 2010にアクセスすることはできませんが、私はそれが同じ問題を抱えていると推測する質問から)この問題は、インターネット上で何も発見できないことを誰かが気付いたので、この問題を世界に明らかにすることを意図しています。 (疑いなく、誰かが "xyz"をグーグル・グーグルに返信し、即座に答えを得たということは間違いありません)。しかし、この質問の主な目的は、あらゆる状況で必要な結果を得るための提案を求めることです。
通常、「23mar12」のように日付を入力します。 Excelはこれを日付と認識し、それを "23-Mar-12"とフォーマットします。私はFormat Cells
を選択し、カスタムフォーマットを入力または選択するか、日付フォーマットの1つを選択することができます。
ただし、私が選択するフォーマットは記録されたフォーマットではありません。カスタムフォーマット "dd/mm/yyyy"は、日付フォーマット "* 14/03/2001"として記録されます。これは明らかに問題がない限り、さらに下に行くまではありません。
私は日時の列を作成し、それぞれ異なるカスタムまたは標準形式でそれぞれの書式を設定しました。私はこれらの日付と時刻のそれぞれについてNumberFormatを抽出し、それを隣接する列に文字列として書き込むマクロを書きました。私はまた数値フォーマットを使用して値をフォーマットし、その文字列を第3列に書きました。
多くの場合Excelで選択されたと記録されたフォーマットは、のNumberFormatによって返される形式ではありませんでした:
Excel format NumberFormat
Date: * 14/03/2001 m/d/yyyy
Date: * 14 March 2001 [$-F800]dddd, mmmm dd, yyyy
Date: 14/03/2001 dd/mm/yyyy;@
Date: 14/03/01 dd/mm/yy;@
Date: 14/3/01 d/m/yy;@
Date: 14.3.01 d.m.yy;@
Date: 2001-03-14 yyyy-mm-dd;@
Date: 14 March 2001 (1) [$-809]dd mmmm yyyy;@
Date: 14 March 2001 (2) [$-809]d mmmm yyyy;@
Custom: hh:mm:ss h:mm:ss
Time: * 13:30:55 [$-F400]h:mm:ss AM/PM
Time: 13:30:55 (1) hh:mm:ss;@
Time: 13:30:55 (2) h:mm:ss;@
Time: 01:30:55 PM [$-409]hh:mm:ss AM/PM;@
Time: 1:30:55 PM [$-409]h:mm:ss AM/PM;@
Excel形式列の値(1)及び(2)に私が追加されました2つの明らかに同一のフォーマットが存在することを示します。 NumberFormat列からわかるように、それぞれの場合、第2のバージョンは先行ゼロを抑制する。
ほとんどの変更は重要な影響を与えません。 "[$ -F800]"などは明らかにダミー値であり、効果はありません。明らかに、「F800」をMicrosoftの国コードに置き換えて、その国の言語に翻訳された日と月の名前を付けることができます。
ただし、Microsoftがアスタリスクでマークする3つの標準形式は、容認できないほど変更されています。日付はリトルエンディアンからミディアムエンディアンに変更されます。 「* 2001年3月14日」に時刻が24時から12時に変更され、曜日が追加されます。
アスタリスクを日付に対して使用すると、コメントが参照されます。「タイプリスト(番号タブ、セルの書式設定)」ダイアログボックスでアスタリスク()を持つアイテムを除き、適用する日付書式では、 「オペレーティングシステム」と表示されます。「アスタリスク()が[タイプ]リスト([番号]タブ、[セルの書式設定]ダイアログボックス)にあるアイテムを除いて、オペレーティングシステムと一緒に使用することができます」。
標準の日付と時刻の形式では、結果が得られない可能性があることをユーザーに警告できます。しかし、彼らが普及しているフォーマット「dd/mm/yyyy」を望むなら、それを持つことはできません。たとえば「dd-mm-yyyy」はOKですが、カスタム形式「dd/mm/yyyy」は日付形式になります。「* 14/03/2001」は「m/d/yyyy」になります。
私の最初のところに戻ってください:ある特定の日付形式のこの奇妙な取り扱いは、多くの人が日付を主張している理由が時々アメリカ形式に変換されているので、問題がそれほどわかりにくいのですか?私は他のグループが何をしているのか分からない、あるタイプのMicrosoftプログラマーの他の場所で、このタイプの問題に遭遇しました。これは、一部の機能が常に機能し、他は機能しないことがある理由ですか?マイクロソフトのプログラマーの中には、正しい形式を探す場所とそうでないものがあります。
さらに重要なことは、私にとっては、誰でも提案することができます:
- を私は本当の日付や時刻の形式を取得する方法は?
- 日付または時刻のユーザーの選択した表示形式を決定する他の方法はありますか?
BTW 1:私は30年前に、アメリカ軍が月/日/年形式を使用していないと言いました。アメリカの民間人だけがこのフォーマットを使用しています。これが本当なら誰でも教えてくれますか?
BTW 2:同様の問題はExcelの色にあります。 Excelは色を "ggbbrr"として保持し、他の人は "rrggbb"として保持します。 .Net Excelインターオペラのプログラマーは、スクリーンを制御するために使用する前に、Excelのカラー番号を聞いたり、取り消したりしなかった。
及び(2)ビット、 'D 'は' dd'が一桁の日にゼロを付加として、一桁または二桁の日を示しています。同様に 'h'は10桁未満で1桁の時間を与え、' hh'は0を前に付けます。フォーマットは同じではないので、それぞれの曜日または時間が2桁の場合、同じ結果が返されます。 – Pete
私は言う: "Excel形式の列の値(1)と(2)は、2つの明らかに同じ形式があることを示すために私によって追加されました。先行ゼロ。それはあなたのコメントとどのように違いますか? –
@Pete上記のコメントにあなたの名前を含めるのを忘れてしまった。 –