エクセルで文字列が自動的に日付に変わる理由とLEN関数の挙動について

このQ&Aのポイント
  • エクセルで特定の文字列を入力すると自動的に日付に変換される理由について説明します。
  • LEN関数を使用して文字列の文字数を取得する際、表示形式に注意が必要です。
  • 文字列の表示形式が変わらない場合と変わる場合の違いについても解説します。
回答を見る
  • ベストアンサー

エクセルの質問です。

エクセルの質問です。 いつもお世話になっています。質問させて下さい。基本的なことかもしれませんが、、すみません。 例えば一つのセル内に 6-3 と入力すると自動的に日付になります。 6+3としても表示形式が変わったりはしません。 さらに深い質問なのですが、 一つのセルに   7/4(日)   となっているものをLEN関数で文字列の文字数を返すと  答えは当然6が返ります。  しかし、その6になった値に関して -3 を付け数式的には  =LEN(A1)-3 とすると、答えは 1/3 となります。 LEN関数で同じ6が返るように仮に AAAAAA として、 -3をつけたし =LEN(A1)-3 としても、答えは 3にしかなりません。勝手に表示形式は変わりません。 勝手に表示形式が日付に変わるのはなぜなのでしょうか?

noname#123141
noname#123141

質問者が選んだベストアンサー

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

少し勘違いがあるようなので、セルの書式と数式の関係について説明します。 >例えば一つのセル内に 6-3 と入力すると自動的に日付になります。 >6+3としても表示形式が変わったりはしません。 これは標準書式に6-3や1-2-3のような日付と判断されるものが入力されるとエクセルが気を利かせて自動的に日付書式に変えるためです。 この場合、6-31のような文字列の場合は、そのような日付がないのでそのまま文字列として入力されます。 >一つのセルに7/4(日)となっているものをLEN関数で文字列の文字数を返すと、答えは当然6が返ります。  これは「7/4(日)」と文字列で入力した場合ですね。 >しかし、その6になった値に関して -3 を付け数式的には  =LEN(A1)-3 とすると、答えは 1/3 となります。 エクセルでは数式で計算したとき、多分同じ形式の計算をするのだろうと気を利かせて参照元の書式と同じ表示形式で表示するようになっています。 したがって、元のA1セルの書式が日付で「3/14」に設定されていると「3」に対応するシリアル値の日付、すなわち1900年1月3日が、設定された表示形式で表示されることになります。 >LEN関数で同じ6が返るように仮に AAAAAA として、 -3をつけたし =LEN(A1)-3 としても、答えは 3にしかなりません。勝手に表示形式は変わりません。 この場合も参照元の書式が「標準」だから変化がないのです。 良くあるケースですが、もし、文字列書式にしていた場合には、1回目の数式入力時は計算値を正しく表示していますが、そのセルが自動的に「文字列」書式に変わっているため、数式を再入力すると、計算式が文字列となり、正しく作動しなくなりますので注意が必要です。

noname#123141
質問者

お礼

ご回答ありがとうございます。 自分でも操作してみて、もしかして、、と思ったのですが、 >気を利かせて参照元の書式と同じ表示形式で表示するようになっています。 気を利かせてくれるのですね。エクセルってやっぱり賢いソフトと改めて感じました。 謎が解けました。ありがとうございました。

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

エクセル本来の機能として7/4や7-4などと入力すればセルの表示形式は自動的に標準から日付に変わります。 一旦表示形式が日付に変わりますと自動的に表示形式が標準に戻ることはありません。 表示形式が日付に変わったままのセルに=LEN(A1)-3を入力しても表示形式は日付ですので表示形式が標準では3でも1/3のように日付の表示形式で表示されますね。 セルの表示形式を標準にしてから=LEN(A1)-3を入力すれば3と表示されますね。

noname#123141
質問者

お礼

ご回答ありがとうございます。 今まで日付の入力をするときは 7/1 としか入力したことがなかったので、7-1でも日付として認識してくれる、というのは初めて知りました! 原因が分かったのですっきりしました。ありがとうございました。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.1

数式を入力したセルの書式に日付の書式が 設定されているのではないでしょうか。 書式を標準にすれば3に変わると思います。

noname#123141
質問者

補足

ご回答ありがとうございます。 書式を変更すれば3に変えることはできます。 私が疑問に思っていることは、なぜ自動で変換されることがあるのか、という意味です。 もともとすべて標準の書式設定でも自動に変わります。

関連するQ&A

  • エクセル2007の大小比較質問。

    エクセル2007の大小比較質問。 数式でB1というセルの答えが85以上ならAのセルを赤く表示するという式についてです。 条件付き書式のやり方は分かるので省略します。 A1のセルに =B1>85 と入力します。 B1のセルには文字列が入力されています。 =B1>85 この式の場合は TRUE =B1<85 この式の場合は FALSE B1に数式が入力されていて、その答えが空白表示だった場合も TRUE になります。 空白表示=0 (どうして85より大きいのか?) 文字列=計算不能 にはならないのでしょうか? このロジックについてご説明をお願い致します。 また空白表示と文字列の場合は除くという関数(<>””ではなくIFなど)がありましたらお教えください。 よろしくお願い致します。

  • エクセル 表示形式について

    先程も実は質問させていただいたのですが、似たような質問を再度させてください。 日付    曜日 2006/4/1    土 とします。 日付は表示形式で「d」にしました。 曜日は「=A1(2006/4/1のセル)」のようにして、更に「aaa」の表示形式を付けました。 そこで、また今度は条件書式を付けたいのです。 「aaa」と掛けた月火水木・・・に「日」は赤にするという条件書式をつけたいのです。 条件はどのようになるのでしょう。 曜日を文字列で入れていたときには 「セルの値が次の値に等しいときに赤にする」のようにして、書式を赤字に設定していました。 でも曜日をaaaと表示形式かけた時にはどうなるんですか。数式は「=A1」とかですし。。。 どなたか教えてください!><

  • エクセルで挿入した列に関数が値を返しません。

     エクセルで列を挿入したセルに、関数を入力しても値を返しません。 関数を入力しても、数式バーに表示される数式がセルに表示されるだけで、答えは出ません。式はあっていて、違うセルに数式をコピーして張り付けると、値を返します。  また、挿入した列に元からある空白の列をコピーして貼り付け、関数を入力しても値を返します。  どこかで変な設定をしてしまったのでしょうか?  分かる方、どうか教えてください。

  • EXCELの関数でこんな事できますか?

    表示形式が日付で入力されていて、たとえばあるセルに2012年6月29日の形式で入力されている場合隣のセルに2012/6と自動的に月までの表示に文字列形式で入力する関数、あるいは関数の組み合わせがあれば教えていただきたいのですが。      2012年6月29日→2012/6          日付形式    文字列   

  • エクセルで、「20030828」を「2003/08/28」にしたいのですが…

    「エクセル2000」を使用しています。 ある列に、 「20030828」などと文字形式で 入っている値を、 「2003/08/28」のような、日付形式の データに変換したいのですが…。 「セルの書式設定」では変えられないですよね? =REPLACE(I2,5,0,"/") という関数で 「2003/0828」 と、表示することには成功したのですが、 「08」と「28」の間にどうすれば 「/」が入れられるのか分かりません。 関数を勉強したことがなく、 方法論を知らずに使っているもので…(^-^;)。 何か良い方法があれば、お教えいただけないでしょうか。

  • エクセル CONCATENATE関数

    エクセル2003のCONCATENATE関数で作ったテキストを関数化(数式化)できないでしょうか。 たとえば、C3のセルに下のCONCATENATE関数を入れ =CONCATENATE(D3,E3,F3) 文字列"=sum(A1:A10)" を表示させ、 その後CONCATENATE関数をのぞき、=sum(A1:A10)を計算させたいのです。 CONCATENATE関数で合成されたセルをコピーし、形式を選択して貼り付けから値だけを貼り付けても、なぜかうまくいきません。 =sum(A1:A10)とC3に表示され、計算は実行されません。

  • エクセル値の貼り付け

    数式及び関数を多数使用しているSheet1があるとします。(ほとんどが表) 最終的にこれは元請けにエクセルデータとして提出します。 しかし、提出する際には各セルが数式及び関数が入った状態ではなく、文字列(値)としの状態で提出したいと考えています。 一度、Sheet1をコピーしてSheet1(2)をつくり、そのなかの文字及び数式を削除し、表(罫線)だけの状態としました。そしてSheet1を全体を範囲指定しSheet1(2)に『形式を選択して貼り付け→値』としようとしたのですが、『この操作には、同じサイズの結合セルが必要です』とエラー表示がでて貼り付けできませんでした。ほかにも列を指定したりだとかA1から範囲指定したりだとかいろいろ試しましたが結果は同じでした。 おそらく原因は、表の中にいろいろな形でセルを結合しているからだと思います。当然、ひとつのセルでやれば値だけの貼り付けはできます。しかし膨大な表なのでそういう訳にもいきません。 なにかいい方法はありませんか。

  • どんなexcel関数が必要でしょうか。

    A列の合計値150の中でA1のセルの値が合計値のどれだけの割合を占めているかをB列に表示したい場合、=A1/A7でB1のセルは表示出来ますが、その数式を下にコピーすると=A2/A8となって#DIV/0!になってしまいます。単純にC列に150という値を貼り付けて横に計算していけば簡単でしょうが、それをせずに関数式だけでB列の答えを出すにはどうしたら良いでしょうか。 A   B 10 6.7%  20 #DIV/0! 30 #DIV/0! 40 #DIV/0! 50 #DIV/0! 150

  • EXCELで日付を文字列として取り出すには

    EXCELで日付形式のセルの内容を、そのイメージのまま文字列にするにはどうすれば良いでしょうか。何かうまい方法があれば教えてください。 例えば、2006/01/05 と表示されている日付をそのまま文字列として 取り出したいのです。単にセルの書式設定で文字列に変えただけでは 38722とタイムスタンプの値らしきものに化けてしまうので困っています。

  • エクセルの関数の質問です。

    エクセルの関数の質問をさせていただきます。 例えばセルA列に1,2,5,6,4,5,7,9,10,13というランダムな値があったら、1は1の儘で、それ以外の奇数を偶数にしてB列に呼び出すような関数がありましたら教えてください。 このA列の値は1-15-1、2-3-2、5-2-3、というような文字列の左側の値をMID関数を使って呼び出した値です。 よろしくお願いします。 前回の質問と同じプログラムなのですが、全体の値を半分にして求めた数を2倍にしてみたのですが、値を半分にすると精度が少し狂いますので、再度、良い方法があったら教えていただきたくお願いいたします。

専門家に質問してみよう