Excelは関数の構成をどのように処理しますか?


21

関数を使用して、今日の日付をExcelで数値として取得しようとしていました。たとえば、この質問を書いたとき、18ドルを手に入れるべきでした。

私は使用しようとしました:

  1. TODAY()今日の日付を日付形式で返す関数。
  2. Day(<date>)の日数を返します<date>。これはDAY(19/05/1984)19を返すはずです。

したがって、式

=DAY(TODAY())

私が望んでいた結果を与える必要があります。

ただし、これは18/01/1900を返します(今日関数を使用する場合)

私が使用する場合

=TODAY()

セルA1で

=DAY(A1)

別のセルでは、正しい結果が得られます。

DAY(TODAY())が期待した結果をもたらさないのはなぜですか?

私の数学者およびアマチュアプログラマー(Maple、Java、および一部のPython)のバックグラウンドから、関数の構成は問題ないようです。

より一般的には、Excelは数式の構成をどのように処理しますか?


11
正解は「ひどい」です。
カールウィットフト

Excel関数のOfficeサポート ..それは言う:=DAY(TODAY())...現在の月の日付(
1-31

回答:


40

あなたの式は正しいです。Excelがセルをフォーマットする方法がわかりにくいです。たとえば、セルの値を手動で設定し18、フォーマットを日付に変更すると、それがとして表示されJanuary 18, 1900ます。

数式でセルの形式を「一般」に変更すると、期待する結果が表示されます。


3
書式設定がこれを行う理由を説明する役立つ場合があります。Excelは、タイムスタンプを「1900年1月1日00:00:00以降の日」として保存し、時間、分、秒を1日の小数として保存します(1900年1月1日の正午は「1.5」です)。
カールケビンソン

また、任意の種類の日付/時刻値が使用されるとすぐに、Excelはデフォルトで日付または時刻の書式設定を行います。それは、そのようにフォーマットされた別のセル、またはのような機能のいずれかTODAY()です。分解関数でのみそれらを使用し、書式設定を元に戻す必要がある場合、非常に迷惑です。
ラチェットフリーク

1
タンジェンシャル関連:sciencemag.org/news/2016/08/… [5つの遺伝学論文の1つにMicrosoft Excelのおかげでエラーが含まれています]
ダレンリンガー

@DarrenRinger私はいつもそれを「彼らの道具を責める」と読んだ-論文の重要なポイントであり、警戒し続けること。私にも同様のことが起こりましたが(遺伝学上ではありません)、他のすべての人と同じように、「Excelはその数値を...に変更しました」と思います。 to ..... "
ダレンバートルプクック

9

Excelが「日付」値を操作すると考えると混乱するかもしれません。そうではありません。

Excelで日付と時刻を使用する方法

Excelで、番号がために使用される表す日付(0-JAN-1900以降の日の可能性、分数)が、それらは数値としてExcelで保存され、操作されます。TODAY()は数値の関数であり、DAY()は数値引数から数値結果への関数です。

あなたの場合、DAY(TODAY())は18(数値)を正しく返しました。これは、短い形式で日付を表示するようにフォーマットされたセルに割り当てられたと思われます。Excelにとって、18が日付として解釈されるとき、それが意味することです。

そのセルを数値形式に書式設定すると、答えが予想どおりに表示されます(例:18)。


2

フォーミュラに問題はありません。私があなたに提案したいのは、フォーミュラが期待した結果を生成しない場合、エラーまたは間違った結果を生成します。あなたはフォーミュラが何をするのかについて言及していないので!

一方、ExcelのNumberでDAY値を取得できる可能性があるものを紹介したいと思います。

以下のスクリーンショットを確認してください。

数字で日を取得

注意:

日付はCell E166にあります。2列目Fには結果があり、3列目Gには私が使用したフォーミュラが表示されます。

TEXT関数を使用して、Day値をテキストデータとして取得することもできます。

値は赤です。色はカスタムセル形式DDです。セルに適用して、日付の日の値のみを表示できます。

基本的にあなたはExcelユーザーではないことを述べたので私はあなたにすべての可能性を提案したことに注意してください

これがお役に立てば幸いです。フォーミュラが与えたエラーを投稿することを忘れないでください。


1

数式は正しく構成されています。予期しない結果は、Excelがさまざまなタイプのデータを保存する方法が原因です。

ワークブックレベルの設定に基づいて、Excelが日付の保存に使用する同様のシステムが2つあります。

1900年の日付システム

1900年の日付システムでは、サポートされる最初の日は1900年1月1日です。日付を入力すると、日付は1900年1月1日からの経過日数を表すシリアル番号に変換されます。 1998年7月5日を入力すると、Excelは日付をシリアル番号35981に変換します。

既定では、Microsoft Excel for Windowsは1900年の日付システムを使用します。1900年の日付システムにより、Excelと、Lotus 1-2-3など、MS-DOSまたはMicrosoft Windowsで実行するように設計された他のスプレッドシートプログラムとの互換性が向上します。

1904年の日付システム

1904年の日付システムでは、サポートされる最初の日は1904年1月1日です。日付を入力すると、日付は1904年1月1日からの経過日数を表すシリアル番号に変換されます。 1998年7月5日を入力すると、Excelは日付をシリアル番号34519に変換します。

既定では、Macintosh用Microsoft Excelは1904年の日付システムを使用します。初期のMacintoshコンピューターの設計のため、1904年1月1日より前の日付はサポートされていませんでした。この設計は、1900年がle年ではないという事実に関連する問題を防ぐことを目的としています。1900年の日付システムに切り替えると、Excel for Macintoshは1900年1月1日という早い日付をサポートします。

これらの抜粋は、https//support.microsoft.com/en-us/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excelから取得されています。

シリアル番号は、1900年1月1日から1900年2月29日までの架空の日付を含む、単純な現在の日付数のカウントです。ただし、DAY関数は、さらにデータ型変換関数と考えることができます。これは、かかる日付シリアル番号を入力として戻る整数を出力として。あなたの例では、18を日付シリアルを表していると考え、1900年1月1日から18日先をカウントすると、1900年1月18日になります。

フロントエンドの簡単な修正は、セルの形式をNumberGeneralなどの他の形式に変更することです。これにより、Excelは日付シリアルとして解釈するのではなく、整数として表示するようになります。バックエンドでは、すべてが順調です。整数の結果は、他の式で使用でき、正しく動作します。

例として、今月の15日が過ぎたかどうかを示す条件式を作成したいとしましょう。以下を使用してこれを行うことができます。

=IF(DAY(TODAY())>15,"The 15th has passed","It is not yet the 15th")

日付シリアルを使用して同じ結果を達成するのははるかに困難になるため、整数を返すDAY関数は、Excelの一般的なユースケースのコンテキスト内でより有用になります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.