許せない心理テスト

日付入力で、スラッシュあり・なしのいずれにも対応できる設定について質問します。

Excelで日付を入力する欄に、例)「2010/8/31」と表示させたいのですが、入力する際の2つのパターンに対応させる方法がわかりません。

1つめは、「8/31または2010/8/31」とスラッシュを入れて入力
2つめは、「20100831」と数字だけを続けて入力

どちらか1つなら、セルの書式設定で対応できるのですが、そうすると、もう一方がエラーになります。
いずれの場合にも対応できるようにしたいのですが、ご存じの方がいらしたらぜひ教えてください。

A 回答 (4件)

一つ目は日付の様に見えるしExcelは日付として扱うけど、二つ目


は誰が見ても二千十万八百三十一という数値であって日付じゃない
でしょう。

見た目だけ誤摩化すだけでデータとしては使い物にならないことを
受け入れるなら、ユーザー書式の条件式を使って巨大すぎる数値の
場合に書式を変える手があります。

[>2000000]0000!/00!/00; yyyy/mm/dd

こんな感じ。でもこれ、スラッシュ区切りで年を省略した日付は入
力出来ません。スラッシュが一つだと分数扱いになります。ハイフ
ン区切りで「9-1」のように入力すれば大丈夫なんだけど。

で、こういうバラバラな入力の仕方が出来るような工夫をすると、
見た目が同じなのに全く違う数値が入力されてるわけで、本来絶対
に許容すべきではありません。必ず区切りを入れて日付として入力
するよう強制するべきです。
    • good
    • 0
この回答へのお礼

grumpy_the_dwarfさん

ご回答ありがとうございます。
ユーザー書式の条件式を使う方法もよいと思ったのですが、スラッシュが一つの場合もあると思うので今回の用途では逆に混乱してしまいそうなので使わないでおきます。
が、知識としていつか役に立ちそうなのでしっかり覚えておこうと思います。

おっしゃるとおり、安易に許容すべきではないと思いますので、日付の入力方法を統一してもらうようにコメントを入れるなりして対応したいと思います。

ありがとうございました。

お礼日時:2010/09/04 13:50

どのような目的で、日付と「20100831」のような数値を、日付として「表示」したいのでしょうか?



単に、2つの形式で入力されたデータを統一したいなら、「20100831」と入力されているデータを日付シリアル値に一括変換して、実際に日付データとして統一するのがお勧めの操作です。

日付の列を選択して、データ「区切り位置」で「次へ」「次へ」で最後に列のデータ形式を「日付」にチェックを入れ(YMDになっていることを確認して)「完了」してください。
    • good
    • 0
この回答へのお礼

MackyNo1さん

ご回答ありがとうございます。
目的としましては、社内の申請書類のフォーマット(Excel)の改訂を行っており、『「20100831」での入力が普通でしょ!直して!』という要望が出たためです。
これまで日付欄はスラッシュ入りで入力してもらうようになっていて、それが普通だと思っていたのですが、そうではない人もいるんだな…ということで、あまり難しい方法を使わずにできるのであれば両方対応できるといいなと思った次第です。
入力するのは各社員で、私の手元には印刷された状態で提出されてくるので、私が何か手を加えることはできず、単に見た目の問題なのです。
なので、今回皆さんから教えていただいたご回答を活用すると、対応できそうなのですが、上司に渋られてしまったので、そこまではしないことになりましたが…。
MackyNo1さんに教えていただいた方法も、別の機会で使えそうなのでとても勉強になりました。

ありがとうございました。

お礼日時:2010/09/04 14:10

入力するセルを文字列にしたら入力はできますね、


それを他のセルで「数値だけの日付入力」と「/を含んだ日付入力」の2つをIF関数で場合分けして変換すればできます。

A1のセルを入力用で文字列にして、例えば隣のB1のセルを日付書式にして、次の式を入れます。
=IF(ISERROR(FIND("/",A1)),DATE(INT(A1/10000),MOD(INT(A1/100),100),MOD(A1,100)),DATEVALUE(A1))
こうすれば、A1が"20101101"でも"2010/11/01"でも、B2には日付に変換されて入ります。

始めの ISERROR(FIND("/",A1)) A1の文字列の中に"/"があるかどうかの判定です。
次の DATE(INT(A1/10000),MOD(INT(A1/100),100),MOD(A1,100)) は数値で入力された日付を変換する式です。
最後の DATEVALUE(A1) は"/"を含んだ文字列を日付に変換する関数です。

どうしても同じセルで入力したいのなら、これを同等の処理をVBAで組む事になりますね。
    • good
    • 0
この回答へのお礼

yama1718さん

ご回答ありがとうございます。
IF関数で場合分けして変換する方法は、自分でいろいろ考えてもうまくいかなかったので、ご回答いただいた内容でできることがわかり、とても勉強になりました。
できれば同じセル内がいいのですが、あまり複雑にしない方がいいという上司の意向もありまして、今回はスラッシュ入りでの入力に統一してもらうようにしました。
ですが、今後、別の機会でこの方法を使わせていただきたいと思います。

ありがとうございました。

お礼日時:2010/09/04 13:56

残念ですが両方を同時に設定することはできません。

(マクロを用いた方法を除く)

理由は、2010/8/31 と入力すると、実際には 40421 と言う【シリアル値】が入力され、20100831 とは異なる数値になるからです。
セルの書式設定で 20100831にスラッシュを挿入して見た目を日付風にしても、セルの数値は 20100831 なんです。シリアル値にはなりません。

どちらか片方を使うか、2010.08.31 など、スラッシュではなくピリオドを使うなどしてみましょう。
(この場合は後で該当するセルのピリオドをまとめてスラッシュに置換することで無理矢理日付に変換させることで解決します)
    • good
    • 0
この回答へのお礼

Cupperさん

ご回答ありがとうござます。
やはり同時に設定することはできないのですね。
わかりやすい説明で納得できました。
今回はどちらか片方を使うようにしたいと思います。
ピリオドを使ってあとでまとめて置換する方法も、今後使う機会があるかもしれないので覚えておきます。
ありがとうございました。

お礼日時:2010/09/04 13:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報