アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルでの質問です。
試しにA1に2020,B1に年,C1に5,D1に月,E1に1と
入力してA2に5/1と入力すると自動的にA2は
(2020/5/1)になります。
ここからが知りたいことです。match関数を使って
=match($A$1&"/"&$C$1&"/"&E1,A2,0)
をするとA2のところでエラー(#N/A)とでます。
私の中では先程の関数式の意味
=match(検索値:"2020/5/1" 範囲:2020/5/1 種類:完全一致)
になるはずでした。
なぜ、検査範囲がエラー起きたのか
そして、どうしたら直るのか教えて下さい

A 回答 (3件)

こんにちは



エクセルは日付に関してはやや特別な扱いをしています。

実態は普通の数値なのですが、これを「日付である」と解釈した場合に一日を数値の「1」(少数以下は時分秒)と換算して計算します。
ご提示の例で、A2セルはこのような扱いがされており(日付型の数値はシリアル値と呼ばれています)、試しにA2セルの値はそのままで書式を「標準」や「数値」にしてみると「43952」と表示されます。
これが、上で言うところの「普通の数値」(=シリアル値)です。

一方で、$A$1&"/"&$C$1&"/"&E1 は文字列の連結となり、「2020/5/1」という文字列になります。
人間の見た目には「同じじゃないか」と思いますが、エクセルがA2セルの値として認識しているのは「43952」なので、数値と文字の違いもありますが値も全く違うものと認識されているので、検索してもヒットしません。
逆に、=MATCH(43952,A2,0) としてみると(人間にとっては意味不明ですが)、ちゃんと一致として検索されます。

>どうしたら直るのか教えて下さい
検索値をシリアル値に変換して検索することで可能になります。
日付をシリアル値にする方法はいくつかありますが、ご提示の例の場合
「年、月、日」であれば、
  DATE($A$1,$C$1, E1)
ご提示の様な文字列であれば
  DATEVALUE($A$1&"/"&$C$1&"/"&E1)
のように関数を用いて変換することができます。

この値を用いれば検索できるようになりますので、検索式を
 =MATCH(DATE($A$1,$C$1, E1),A2,0)
 =MATCH(DATEVALUE($A$1&"/"&$C$1&"/"&E1),A2,0)
などとすることで、検索できるようになります。
    • good
    • 0

コンピュータでは「文字列」と「数値」は全く別のデータです。


この区別をしっかり付けないと 表計算ではミスを連発します。

例えば A1に「="123"」 B1に「123」と入力します。
C1に「=A1=B1」と入力すると「FALSE」が返りますね。
数式中「""」で囲ったものは「文字列」として扱われるので「123」
とは別ものとして扱われます。

当然「$A$1&"/"&$C$1&"/"&E1」も「文字列」です。

> 自動的にA2は(2020/5/1)になります。
A2の表示形式を「標準」にすると「43952」となるはずです。
これは入力した値が「1900年1月1日から数えて43952日目」で
あることを表しています。

「2020/5/1」の表に表示されていますが これらは実際にはシリア
ル値で表現された「数値」です。

「"2020/5/1"」と「2020/5/1」(実際には「43952」)は別もの
なので MATCH関数は「#N/A」を返します。

「2020/5/1」というシリアル値を作りたいなら 数式では一例として

=DATE(2020,5,1)

のように表現します。

=MATCH(DATE($A$1,$C$1,E1),A2,0)
    • good
    • 0

「$A$1&"/"&$C$1&"/"&E1」は「2020/5/1」という文字列です。


「A2」は「2020/5/1」という日付です。
その違いではないかと思います。

=MATCH(DATEVALUE($A$1&"/"&$C$1&"/"&E1),A2,0)

のように、「DATEVALUE」関数で日付に変換してあげればいけると思いますよ。
    • good
    • 0

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