• ベストアンサー

Excelのmatch関数のバグ?それとも、私の勘違い?

Microsoft Excel 2002 SP3 での質問です。 match("木",{"土","日"}) が、2を返すんですが、これはExcelのバグでしょうか? それとも、私の勘違いでしょうか? 第1引数が、第2引数の配列の何番目にあるかを調べるのが、matchの機能だと思ったのですが・・ なぜか、#N/Aが返りません。 これは、土日の判定に使おうと思っています。Weekdayで検査してもいいのですが、動かない理由が分かりません。 数値などは、問題なく動いているように見えますし、木曜以外は動きます。

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

MATCH関数の照合の型が省略されているので検索値に近い最大値を選択しているからです。これを完全一致型の0を使用する事で#N/Aが戻りますのでお試し下さい。 =match("木",{"土","日"},0) 因みに土日判定ならWEEKDAY関数の方が良いと思います。

masa6272
質問者

お礼

ありがとうございます。 Excelはあまり使わないんで、知りませんでした。 関数のマニュアルの読み方がいい加減でした。 ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

MATCH(検査値, 検査範囲, 照合の型) 検査値 表の中で必要な項目を検索するために使用する値を指定します。 検査値 には、実際に検索する値ではなく、検査範囲 の中で照合する値を指定します。たとえば、電話番号帳を使ってある人の電話番号を調べるとき、検査値 としてその人の氏名を指定しますが、実際に検索するのは電話番号です。 検査値 には、数値、文字列、論理値、またはこれらの値に対するセル参照を指定できます。 検査範囲 検査値 を含む隣接したセル範囲を指定します。検査範囲 は、配列または配列に対するセル参照を指定してもかまいません。 照合の型 -1、0、1 の数値のいずれかを指定します。照合の型 には、検査範囲 の中で 検査値 を探す方法を指定します。 照合の型 に 1 を指定すると、検査値 以下の最大の値が検索されます。このとき 検査範囲 は、-2、-1、0、1、2、...、A、...、Z、...、ア、...、ン、...、FALSE、TRUE のように昇順で並べ替えられておく必要があります。 照合の型 に 0 を指定すると、検査値 に一致する値のみが検索の対象となります。このとき 検査範囲 を並べ替えておく必要はありません。 照合の型 に -1 を指定すると、検査値 以上の最小の値が検索されます。このとき 検査範囲 は、TRUE、FALSE、...、ン、...、ア、...、Z、...、A、...、2、1、0、-1、-2、... のように降順で並べ替えられている必要があります。 照合の型 を省略すると、1 であると見なされます。

masa6272
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VLOOKUPとMATCH関数

    こんにちは、お世話になります。 =VLOOKUP($B3,$I:$N,MATCH(C$2,$I$2:$N$2)2,0),0) この数式に関して何ですが、 第一引数第二引数第三引数と続くわけですが、 VLOOKUPの中にMATCH関数が入ったりとだんだん細かくなってきてしまって、難しいのですが この関数の数式の処理を詳しく解りやすく教えて頂けないでしょうか? ご教示お願いします。

  • MATCH関数で空セル検索

    MATCHを使って空セルの検索は可能でしょうか? MATCH("",配列,0) とした場合、#N/A エラーが返されます。 目的はデータ中の空セルの位置を検知したいので、別の方法でもかまいません。 よろしくお願いいたします。

  • Excel 関数を使って曜日を自動的に出したい

    Excel関数を使って曜日を自動的に出るようにしたいです。 通常 10月1日 木 10月2日 金 10月3日 土 ・ ・ と表示したい場合、CHOOSE関数とWEEKDAY関数を使って 曜日を自動的に出すやり方はわかるのですが、 月と連動させて表示をさせたい (例) 10月 ← ★ここに「月」を入力すると ★その月に準じた日数が自動的に出てきて・・・ (10月なら31日まで、11月なら30日までというように) ↓ 1日 木 ←★さらに曜日も自動的に出る 2日 金 3日 土 という仕組みにしたいです。 どのように作ればよいでしょうか? わかりづらく申し訳ございませんが お知恵を貸してくださいm(_ _)m

  • foreach のバグでしょうか。PHP 5.3.3 で悩んだところが

    foreach のバグでしょうか。PHP 5.3.3 で悩んだところがあります。 あるレコードが正規表現にマッチした場合、そのレコードに対して何らかの処理をするスクリプトを書いていました。 しかし思ったように動かず原因を調べました。結果、配列の値が変わっていることに気づきました。  ◇テスト用レコードの内容   http://www.yahoo.co.jp/   http://www.bing.com/   http://www.goo.ne.jp/   http://www.google.co.jp   http://d.hatena.ne.jp/  ◇先頭一致して欲しい文字列   http://www.google.co.jp/   http://www.bing.com/   http://www.youtube.com/  この場合、処理の対象は2件です。  私が書いたスクリプトでは3回マッチしてしまいます。  以下、テスト用に作ったスクリプトです。 <?php // URL のパターンを用意 (とりあえず以下の3パターン) $ar = array(); $ar['Google'] = array(  'URL' => 'http://www.google.co.jp/' ); $ar['Bing'] = array(  'URL' => 'http://www.bing.com/' ); $ar['YouTube'] = array(  'URL' => 'http://www.youtube.com/' ); // 先頭一致の正規表現にする foreach($ar as $key => &$value){  $value['regex'] = '/^' . preg_quote($value['URL'], '/') . '/'; } echo("URL の パターンを出力してみる/n"); print_r($ar); // テスト用 レコード $list = array(); $list[] = 'http://www.yahoo.co.jp/'; $list[] = 'http://www.bing.com/'; // match. $list[] = 'http://www.goo.ne.jp/'; $list[] = 'http://www.google.co.jp/'; // match. $list[] = 'http://d.hatena.ne.jp/'; // マッチするのは2回のみ...のはずが for($n = 0; $n < count($list); $n ++){  foreach($ar as $key => $value){   if(preg_match($value['regex'], $list[$n], $match)) echo("match.\n");  } } echo("もう一度 URL のパターンを出力してみる\n"); print_r($ar); echo("なぜか一番最後の配列の値が変わっている。\n"); ?>

    • ベストアンサー
    • PHP
  • 正規表現について

    PHP5.2.4を使用しています。 任意の数の引数がある文字列をpreg_matchを使ってマッチさせたいのですが、 例えば"ENUM(ab,cd)"は ab と cd の2つの引数があるとします。 次のようなパターン文字列まではアイデアとして浮かんだのですが、 引数の最後は , がないので当然ですがマッチしません・・・ どのようにパターン文字列を記述すれば良いのでしょうか? $str = "ENUM(ab,cd)"; if (preg_match("/ENUM\(([^\,]+\,)+\)/", $str, $match)) { print "{$match[0]}<br>\n"; }

    • 締切済み
    • PHP
  • EXCEL関数について。

    EXCEL関数について。 下記関数にて、値の取得を行うようにしましたが、 この関数使用時のエラー(#N/A)が 出ないようにする為の数式を教えていただけませでしょうか? 【現在の数式】 =INDEX('01'!$T$8:$W$14,MATCH($C$12,'01'!$S$8:$S$14,0),MATCH($G12,'01'!$T$7:$W$7,0)) この数式の内、最初のMATCH関数  MATCH($C$12,'01'!$S$8:$S$14,0) の中の S8~S14までのセルの間に参照値 C12 の値がない場合に、エラーが出ないように したいのですが、その数式を教えていただけないでしょうか?

  • マッチした郵便番号のみを配列に格納したい

    テキストファイルから郵便番号のみを 抽出したいと考えています。 欲しいのは該当した郵便番号のみの一覧なのですが 下記プログラムではマッチした行が 配列として格納されてしまいます。 $naiyou = file("textfile.txt"); for($i=0;$i<sizeof($naiyou);$i++){ if(preg_match("/\d{3}-\d{4}","$naiyou[$i]")){ $naiyou[$i]=$naiyou[$i]."\n"; array_push($result,$naiyou[$i]); } } マッチした数字のみを配列に格納するには どうすればいいのでしょういか?

    • ベストアンサー
    • PHP
  • Excel INDEX関数ズレて抽出される

    INDEX関数で行列番号取得にMATCH関数を使用したときにズレてしまう。 定例のミーティングの参加表を作成しようとしています。 シートの構成は添付画像の通りです。 Sheet1 定例のミーティングの参加表 巡回Aは月ごとに担当者が変わる。 Sheet2 巡回Aの月別の担当表 巡回Aの担当表を用意して、COUNTIF関数で参加表の氏名が巡回Aのリストに含まれていない場合(カウント0)は空欄にし、0以外の場合、INDEX関数で列番号のところにMATCH関数をネスト、MONTH(TODAY())+1とし、ex. 8月なら翌月の9月に該当する列番号を抽出して巡回Aの出席を月が変わると連動するようにしたいです。 =IF(COUNTIF($B$22:$B$29,$B3)=1,IF(INDEX($C$22:$N$29,MATCH($B3,$B$22:$B$29,0),MATCH(MONTH(TODAY())+1,$C$20:$N$20,0))=0,"",INDEX($C$22:$N$29,MATCH($B3,$B$22:$B$29,0),MATCH(MONTH(TODAY())+1,$C$20:$N$20,0))),"") 職場のExcel2016では列がズレてしまい、抽出ができないです。 Excel365では問題なく抽出ができました。 2016でズレるのは何故でしょうか。 詳しい方居ましたらご教授下さい。 よろしくお願い致します。

  • Excel INDEX関数の使い方

    添付図はA列B列にデータが入っており E1:E5のようなリスト(部署一覧)を用意しておき C列に部署名をとりだそうというものです C2に =INDEX(部署一覧,MATCH(1,FIND(部署一覧,B2),0)) という数式を入力してCtrl+Shift+Enterで配列数式にすれば部署名を取り出せるとありました 1.その通りにやってなるほど部署名はとりだせたのですが MATCH関数の引数に”1”とあるのがその意味が分かりません どなたか解説をお願いできないでしょうか 2.また部署名の前に別の文字列 例えば”関東支社”のような文字列がある場合 部署名だけを取り出すことはできないものでしょうか よろしくお願いします

  • エクセルでカレンダーにより色をつけたい

    エクセルを用いて毎日のチェック表のようなものを作りました。 日にちに合わせて曜日を表示させるようにしました。「=MID("月火水木金土日",WEEKDAY(E6,2),1)」 これにより自動で曜日が表示されますが、このときに合わせて土曜と日曜のところのセルを自動で色をつけたいのです。     1 2 3 4 5 6 7 8 9     木 金 土 日 月 火 水 木 金 項目1 項目2 項目3 上のような形になっており、この場合ですと3、4の土日部分を自動で色をつけたいのです。 よろしくお願いします。

このQ&Aのポイント
  • 1年前に期限切れとなったESETセキュリティソフトウェアを再度使用するためには、更新版か新規版の購入が必要です。
  • 過去1年間は別のセキュリティソフトウェアを使用していましたが、ESETを再度利用したいと考えています。
  • 「更新版」を購入し、過去1年間使用した別のセキュリティソフトウェアをアンインストールし、ESETを再インストールすることで利用することができます。
回答を見る

専門家に質問してみよう