Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10全般 : Excel 2016)
セルの入力情報が日付だったら・・・の判断
投稿日時: 18/11/22 15:54:05
投稿者: 春麗

A1セルとB1セルに入力されている内容が日付(YYYY/DD/MM)だったら、C1セルに完了と入れたいです。
 
日付以外だったり、片方のセルだけが日付だったら、C1セルはブランクのまま。がいいです。
 
Cell関数とか調べてみたのですが良い方法がわかりません。
 
よろしくお願いします。

回答
投稿日時: 18/11/22 16:14:06
投稿者: WinArrow
投稿者のウェブサイトに移動

CELL関数を使いますが、第1引数に「"Format"」を指定します。
 
 
=IF(AND(CELL("format",A1)="D1",CELL("format",B1)="D1"),"完了","")

回答
投稿日時: 18/11/23 10:34:13
投稿者: sy

引用:
A1セルとB1セルに入力されている内容が日付(YYYY/DD/MM)だったら、C1セルに完了と入れたいです。
これは不可能です。
CELL関数はセルに設定されている書式を判別するだけです。
入力されているデータが「数値」か「文字」の区別はTYPE関数で判断できますが、「日付のシリアル値」か「ただの数値」かを判別する関数は存在しません。
 
それとも数値さえ入力されれば、どんな数値(例えば1とか「1900/01/01」と表示される)でもOKなんですか?
 
私的には、想定される日付の範囲を決めて(例えば2018/1/1〜2100/12/31までとか)、その範囲に入っていれば日付として判断すると言う方法が良いと思います。
上記の例えを数式にすると、以下になります。
=IF(COUNTIFS(A1:B1,">=43101",A1:B1,"<=73415")=2,"完了","")

 
 
WinArrow さん
 
その式はセルに設定されている書式設定に対応した結果を返すだけで、入力されているデータとは関係ありません。
 

回答
投稿日時: 18/11/23 11:17:15
投稿者: WinArrow
投稿者のウェブサイトに移動

sy さんの引用:

WinArrow さん
 
その式はセルに設定されている書式設定に対応した結果を返すだけで、入力されているデータとは関係ありません。
 

 
そうでしたね?
早とちりしてしまいました。
 
セルに入っている「値」を日付を判断する場合、
単純な関数はないと思いますが
例えば
=IF(ISERROR(DATEVALUE(TEXT(A1,"yyyy/mm/dd"))),"NO日付","日付")
でも判断はできますが、
日付と判断できる数値範囲(1〜2958465)ならば、日付と判定されてしまいます。
skさんのレスの中にも書かれていますが、このような数式は、実務的とは言えないでしょう。
 
その業務としての日付範囲というものがあると思います。
例えば
「発注日」という項目の妥当性を判断する場合、
未来日は絶対にありえませんから、
x日の過去日〜当日の範囲以外は、エラーとするようなことです。
 

回答
投稿日時: 18/11/23 14:50:02
投稿者: んなっと

具体例を添えて質問してください。
空欄や無効な日付入力を避けたいのでしょうか。
 
      A      B   C     
1       2018/11/30    A列空欄
2 2018/11/9          B列空欄
3                両方空欄
4 2018/11/9 2018/11/30 完了      
5 2018/11/9 2018/11/31    B列無効な入力(実は文字列)
6 2018/11/9    11/30    B列コピペ(表示形式異なる)
7 2018/11/9  11月30日    B列コピペ(表示形式異なる)
 
C1
=IF(OR(CELL("format",A1)<>"D1",CELL("format",B1)<>"D1",ISERR(TEXT(A1,"m/d")+TEXT(B1,"m/d"))),"","完了")
下方向・↓

回答
投稿日時: 18/11/23 21:00:43
投稿者: mattuwan44

>A1セルとB1セルに入力されている内容が日付(YYYY/DD/MM)だったら、C1セルに完了と入れたいです。
 
他の方も言われてますが、日付と分かる文字列で表示されていても、エクセルが内部的に保持している値は「数値」です。
完了と入れたいとおっしゃってますが、実際は、「完了と表示させたい」ではないですか?
 
では、「完了」と表示できる条件はなんでしょうか?
 
勘で言ってみると、
B1セルの値 - A1セル値
の答えが、「0より大きい」場合が完了ではないですか?
あるいは「0以上」なのか。。。
 
つまり計算結果が完了と判定できる場合に、C1セルに「完了」と表示させればいいわけです。
でわどうするか。
 
「0より大きい」場合が完了とするならば、
セルの書式設定→表示形式タブ→分類→ユーザー定義→種類の下の欄に、
完了;
と入れれば、計算の答えが正の値の場合、「完了」と表示できます。
(当然、A列B列は日付形式のセルの書式設定をしておきます。)
詳しくは、
https://www.relief.jp/docs/003231.html
 
また、もっと複雑な条件判定をするならばIF関数を使って、
どういうときはどういう答えというのを返してやるといいと思います。
 
なので、「どっちかが日付以外」という条件で判断するのではなく、
計算結果がどうなれば完了なのか(日付なら足したり引いたり計算できますよね?)の判断基準を、
数式で示すべきだと思います。

回答
投稿日時: 18/11/25 12:59:06
投稿者: ブルー

>日付以外だったり
 
日付以外とは具体的にどんな値ですか?
まずはこの点を明らかにしてください。
 
日付以外はすべて文字列なら =IF(COUNT(A1:B1)=2,"完了","")
 
それとも日付ではない数値を入力することもあるんですか?
だとしたら入力するたびに表示形式を変更しているということ?

回答
投稿日時: 18/11/25 22:55:18
投稿者: WinArrow
投稿者のウェブサイトに移動

単純に「日付」を判定するならば
当該セルの値に「*1」などで計算して、エラーにならないことを判定すればよいでしょう。
でも、当該セルが「空白」の場合は、エラーにならないので、空白以外という条件が必要です。
数式の例
=IF(A1<>"",IF(NOT(ISERR(A1*1)),"完了",""),"")
 
 
ところで、
「完了」という表現は、
何かが始まり〜その何かが終了したという意味に考えることができます。
且つ、過去形であることから
セルA1がは決まりの日付で、セルB1が終了の日付と推測することができます。
であるならば、両方のセルが日付ならばという条件は、
A1<=B1という関係にあるとも言える。
単純に「日付ならば」という条件だけでは、
非常にあいまいなチェックになるのではないでしょうか?
質問内容の再考をお勧めします。
 
 
 
 

回答
投稿日時: 18/11/27 20:46:58
投稿者: ブルー

WinArrow さんの引用:
両方のセルが日付ならばという条件は、
A1<=B1という関係にあるとも言える。

言えないでしょう。
日付以外の値を何と想定しているんですか?
 
A1が日付、B1が文字列なら、
両方のセルが日付ではないのに =A1<=B1 はTRUEになりますよ。
 
くり返しになりますが、
日付以外の値が文字列しかないのなら
両方のセルがどちらも数値かどうかで判定できます。
 
=IF(COUNT(A1:B1)=2,"完了","")
 
日付以外の数値もあるのなら、そういう入力の仕方自体を見直した方がいいでしょう。

回答
投稿日時: 18/11/27 22:49:21
投稿者: WinArrow
投稿者のウェブサイトに移動

ブルー さんの引用:

WinArrow さんの引用:
両方のセルが日付ならばという条件は、
A1<=B1という関係にあるとも言える。

言えないでしょう。
日付以外の値を何と想定しているんですか?
 
A1が日付、B1が文字列なら、
両方のセルが日付ではないのに =A1<=B1 はTRUEになりますよ。
 

説明が不足していました。
>A1<=B1
「これだけの条件に変更すべき」
といっているのではなく、
両セルが数値であるというチェック
さらに、「完了」という文言から、未来日でないというチェック+A1<=B1というチェックをしたらいかがですか?
という内容です。
(「完了」以降の文章は、推測です。)

回答
投稿日時: 18/11/28 08:30:35
投稿者: んなっと

ほぼ同じ内容ですが、もう一度書き込んでおきます。
 
A:B列 表示形式 ユーザー定義
[>=1]yyyy/m/d;[>0]hh:mm;G/標準
 
      A      B   C             D
1 2018/11/9 2018/11/30 完了              
2 2018/11/9    -1130            B列負の数
3 2018/11/9    11:30        B列1未満の正の小数
4 2018/11/9      0             B列ゼロ
5 2018/11/9    11-31            B列文字列
6 2018/11/9    11/30    B列コピペ(表示形式異なる)
7 2018/11/9  11月30日    B列コピペ(表示形式異なる)
 
C1
=IF(OR(CELL("format",A1)<>"D1",CELL("format",B1)<>"D1",ISERR(TEXT(A1,"m/d")+TEXT(B1,"m/d"))),"","完了")
下方向・↓
 
 
...これでも状況次第では不完全。

回答
投稿日時: 18/11/28 10:00:55
投稿者: んなっと

条件付き書式で表示形式をさらに追加すれば、こんな可能性も?
 
      A      B   C      D
1 2018/11/9 2018/11/30 完了       
2 2018/11/9  20181130    B列巨大な数

トピックに返信