• ベストアンサー

「○日ぶりの気温」がわかるエクセル関数は?

よく新聞などに「7ヶ月ぶりの暑さ」とか「15年ぶりの寒さ」などと載っていますが、それをエクセルの関数で調べることができるでしょうか? 私がとっているデータはだいたい以下のようになります。データは横方向にとっています。世界の各国(国によっては数地点~300以上地点)のデータがあるので、全体では5000くらいのデータ量があります。  北海道|23 16 19 18 17    東京 |27 25   19 26     沖縄 |19 25 26 23 20     たとえば、北海道だと2日ぶりの低温になり、東京だと3日ぶりの高温になります。これがわかるようにしたいのです。 試してみたのは、 =MATCH(LOOKUP(IT2,D2:IS2),D2:IS2,0) のように、MATCH関数とLOOKUP関数を組み合わせてみました。(高温を調べる時は、気温をすべてマイナスにして対応) LOOKUP関数は、列の右から検索してくれますが、MATCH関数は列の左から検索するようで、同じ気温が2つあるとおかしな答えになってしまいます。本当は2日ぶりの高温なのに126日ぶりになっちゃう、とかです。 なお、上記の方法で行き詰まっているのは  ○気温の数字が降順ではない。なおかつ、空欄もある  ○検査値以下の最大の値はLOOKUP関数で求められるが、検査値以上の最小の値をスマートに求める方法がない  ○対象となる同じ気温が複数あった場合は最も右の気温を対象としたいが、MATCH関数は最も左を採用してしまう。 などです。この問題をクリアする関数があったら、教えてください。よろしくお願いします。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

私も、No1の方と同様に「○日ぶり」の数え方に違和感を覚えましたが、今回は質問者さんの数え方でいきます。 基準となるセル(一番右のセル=当日)があり、 1.基準セルの値より小さい値が入っている一番右側のセルを探して、基準セルの列数-探したセルの列数-1 が、「○日ぶりの低温」 2.基準セルの値より大きい値が入っている一番右側のセルを探して、基準セルの列数-探したセルの列数-1 が、「○日ぶりの高温」 と、言う事でどうでしょう? 質問の表がシートのA1:F3に入っているとしたばあい、 北海道の低温は {=COLUMN(F1)-MAX(((B1:E1)<=F1)*(B1:E1<>"")*COLUMN(B1:E1))-1} 東京の高温は {=COLUMN(F2)-MAX(((B2:E2)>=F2)*(B2:E2<>"")*COLUMN(B2:E2))-1} で出ます(配列式ですので、{}を抜いた式を入力してCtrl+Shift+Enterで確定してください)。

powergif
質問者

お礼

うわっ!すごい!一発でできました。これを求めていました。ありがとうございます!

その他の回答 (2)

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.2

マッチやルックアップを使いこなされているご様子からして エクセル関数マスターの称号を目指して 日々精進されているものと思います 直接の解を示しては 貴方しか発想できない解の可能性を もいでしまいますので ヒントです ルックアップはソートしてないと使えない筈です エクセルでは真理値フェールは0トゥルーは1なのです 当たり前ですが 0に何を掛けでも0ですし 一定範囲内の1の数はただ単に総和 詰まり集計すれば解ります 各々の日の気温から基準日の気温を引いて sign関数にかけると 基準日より温暖な日は1に 寒冷な日は-1に 同じ温度の日は0になるでしょう 北海道の例では  1 -1  1  1  0 ですね 何日ぶりとは 基準日と直前の日との関係が 遡って何日も続いている状態を言います なので何日続いたか 検索機能のある関数で探すとか 集計関数で対象期間特定後に集計するとか または 何日目に同様な状態で無いように切り替わるか その場所を 切り替わり点の有無の真理値に 昇順の連番を掛けておいて 連番最大値を探すことにより知る… とか 他にも手はありますが そんなことをすれば良いのですよね あとの問題として どの程度まで近しいと見るかがありますが それはご自身で決めて頂けないと… ね~ 配列数式を使えば雑作もないですよね

powergif
質問者

お礼

一つ誤解があるようなので訂正させてください。私はエクセル関数マスターの称号を目指しているレベルではないのです。MATCHやLOOKUPは、1ヶ月以上検索しまくってやっとたどり着いたくらいで「配列関数って何?」くらいのレベルなのです(汗) 多大なヒントありがとうございました。特に1と0とー1にする発想は、難しいことばっかり考えていた私一人では絶対にわからないところでした。頂上は一つでも、いろんな手段があるんだな、と非常に勉強になりました。

noname#204879
noname#204879
回答No.1

直接の回答でなくて恐縮ですが、貴方の「○日ぶり」の使い方が正しいのかどうか気になったので、確認させてください。(国語の問題?) 例えば「2日ぶりに会った」とは、前回会ったのは一昨日つまり2日前だ、と私は理解しています。 貴方の「北海道だと2日ぶりの低温」の前回が16℃を指しているのなら、「北海道だと3日ぶりの低温」と言うべきだと考えますが、如何でしょうか? ちなみに、http://blog.goo.ne.jp/iwadas/m/200811 において、某気象予報士が「2008年11月29日」に「6日ぶりに15度を超えました」と書いています。 一方で… http://www.data.jma.go.jp/obd/stats/etrn/view/daily_s1.php?prec_no=44&prec_ch=%93%8C%8B%9E%93s&block_no=47662&block_ch=%93%8C%8B%9E&year=2008&month=11&day=&elm=daily&view= に気象庁発表の「東京2008年11月」度の[日ごとの値]が記載されています。 22日~29日の「最高気温」は、14.5、16.9、11.9、13.4、14.0、11.0、13.5、16.0 と報告されています。 つまり先の「6日ぶり」は6日前の気温16.9℃を基準にしていることは明らかですね。

powergif
質問者

お礼

確かに私の用語の使い方はおかしいですね。要は、基準が一定であればいいや、と考えていたのであまり重視しなかったところでした。ありがとうございました。

関連するQ&A

  • EXCELの関数探してます、lookupのような

    A列に1,10,20,30とありB列に200,300,400,500とある場合を想定します LOOKUP関数を使い、1のときは200、10の時300,20の時400のように値を出したいとします。つまり横の値。 LOOKUP関数を使うと2,3,4,5,6,7,8や11,12,13~19などの検査値で不完全一致の場合の値を出すとき、 2,3,4,5,6,7,8のときは1の値の200がでて、11,12,13~19の時は10の値の300が出ますよね ようはその値より上の値の数字をだしてくれるんです。14なら300,26なら400,39なら500のように 質問は下の値を出してくれるLOOKUPのようなものはありませんか?14なら400,26なら500のような

  • EXCELの質問

    B列で最大の値を取得して、A列でその時の時間を取得したいのですが、 Lookup関数を使用しても行が増えるとうまくいきません。どうしてでしょうか? MATCH関数も行が増えるとうまく値を取れません。誰か教えてください。 例)   A  B 1 8:00 350 2 8:10 500 3 8:20 200 4 8:30 400 この場合8:10を取得したいのですが・・・

  • excelでデータ検索

    excelでのデータ検索をする関数について教えてください。 例えば下のような4列の表があるとします。   A B  C D  東京 1 社長 あ  東京 1 部長 い  大阪 1 課長 う  大阪 2 部長 え A~C列の値をキーにして、D列の値を見つけたいのですが (例えば(東京,1,部長)なら「い」という風に。) 何か使える関数はあるのでしょうか。 lookup関数とかだと、1列の値しか対象にできないので..。 よろしくお願いします。

  • EXCELの関数を作りたい!

    EXCELである文字列データが文字列範囲(文字列データがランダムにあるデータ範囲)で存在するか否かをチェックする関数を作りたいのですが? 文字列範囲がランダムなのでLOOKUP関数が使えないと思うのですが。 EXP:東京都という文字列データが都道府県データ(右記文字列がランダムに存在する)

  • Excel 関数返り値を「値」に

    Excel の関数の返り値そのものを数値に置き換える関数はないのでしょうか。 たとえば、=VLOOKUP()でみているセル値をそのまま「値」に置き換える。      (LOOKUPの対象が変わっても、前の値を保持するため)など 関数がドグサければマクロでも。 教えて下さい。よろしくお願いします。

  • エクセルで複数の条件を満たした値を返す関数を教えてください。

    エクセルで複数の条件を満たした値を返す関数を教えてください。 (画像を添付しました) 左の表(A1からD9)のデータを右の表でIDと製品を選択すると 会社名、名前が抽出するような関数を教えてください。 INDEXやMATCHなど使ってみたんですが、組み方が悪いのかうまく抽出できませんでした。 よろしくお願いします。

  • EXCELのLOOKUP関数に似た関数

    EXCELのLOOKUP関数でベクトル形式の場合、 「検査値が見つからない場合、検査範囲内で検査値以下の最大値が、一致する値として使用されます」 のですが、これと似たケースで 「検査値が見つからない場合、検査範囲内で検査値以上の最小値が、一致する値として使用されます」 のように値を返して欲しいのです。 方法をご存知の方、お力をお貸し願います。

  • Excelの関数で

    お願いします。 Index関数とMatch関数を使用して表の中の値を求めようとしましたが、 検索行が複数あるため、うまくいきません。 検索する列は1列(a,b,c)ですが、検索行(あ、い、う~)が複数になっています。 更に空白もあります。 こんな感じ↓です。 ---------------------   あ  い   う   え      お   か ---------------------    a  10  20  30 b  40  50  60 c  70  80  90 --------------------- こういった場合にはどんな関数を使って一致する値を求めたら良いのでしょうか? 大変困っております。よろしくお願いします。

  • エクセルのFIND関数について

    エクセルのFIND関数は、特定の文字列が左から何文字目にあるかを求める関数であると理解していますが、右から何文字目にあるかを検索出来ないものでしょうか? なお、検索する文字列は数値以外であり右より一番右にある文字の右からの文字数を検索したいです。  対象文字列    右から数値以外の一番最初の文字の文字数 30%1       →   2 200mg20    →   3 2.5mg1     →   2 1          →   0 25%1       →   2 0.5g1キット(生理食塩液100            →   4 1010       →   0

  • エクセルの関数について

    検索に使用する関数についてお伺いいたします。 表を二つ作成しました。 シート1には特に項目の指定がなく、番号の若いものから順に左から右に並べた24×8の表があります(表1とします)。 シート2にはいろいろな項目を指定した表があり、B列にランダムに数値が入っています(表2とします)。 表1の範囲に表2のB列の値が入っている場合、表2のA列に◎や*などのなんらかのしるしをしたいのですが、どのような関数を使用すればよいでしょうか? わかりにくい文章で申し訳ありませんが、よろしくお願いいたします。

専門家に質問してみよう