Excel2007で数字を入力し、基準値以上なら連続達成日数を計算する方法

このQ&Aのポイント
  • Excel2007で数字を入力し、基準値以上の場合に連続達成日数を計算する方法について教えてください。
  • 基準値以上でカウントをし、基準値未満の場合はカウントをリセットする方法を知りたいです。
  • 平日と土日で基準値が異なり、また土日の場合はαとβによって基準値が変わるという条件で計算を行いたいです。Excel2007を使用しています。
回答を見る
  • ベストアンサー

次の場合の関数はどうなりますか(添付画像あり)

エクセル2007で、毎日数字を入力していき、 基準値以上なら達成とみなして「連続××日目」 とカウントを表示する関数を教えてください(詳細は添付画像の通りです) 基準値以上でカウントし、基準値未満でカウントをリセットします。 たとえば基準値が4なら、達成時間が4時間であれば連続達成日数としてカウントし、3時間59分なら0にリセットです。 ただし、基準値は次の様に変動致します。 平日の場合、F4の値(この画像では5時間半) 土日の場合、次の2つに分岐 B列にαとあれば、F5の値(ここでは3時間) B列にβとあれば、F6の値(ここでは4時間半) ※土日のうち、どちらがαでどちらがβかは、その週によって変わるということです。 ※F4~F6の基準値は、月ごと、場合によっては週ごとに変わることがあります。 そのたびに計算式の数値を調整するのも面倒ですので、計算式内で基準値を使用するときは 必ずF4~F6セルを絶対参照するようにしたいです。 ※D8には、現在の記録が常に更新されるようにします。 ※Excel2007です。 ※添付データが小さくて確認しづらい可能性があります。その場合は下記の外部サーバーで大きなサイズの添付画像を閲覧できます。 https://www.dropbox.com/s/6uf26e2njvo3c05/%E7%84%A1%E9%A1%8C.png?dl=0 大変複雑になってしまいお手数をお掛けしますが、 何とぞ、よろしくお願い致します。

noname#231606
noname#231606

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

  • ベストアンサー
  • mt2015
  • ベストアンサー率49% (258/524)
回答No.3

ANo.1です。 > D8の、現在の達成日数の関数も、よろしければ教えて頂きたいです。 達成時間が入力されている一番下の行の連続達成日数を表示できればよいでしょうか? それでしたらこんな感じでどうでしょう。 =VLOOKUP(SUMPRODUCT(MAX(C11:C100*(D11:D100<>""))),C11:E100,3,FALSE) データが何行目まであるのか解りませんでしたので、とりあえず100行目まであるとしています。 もっと多い場合は式中の100を書き換えてください。

noname#231606
質問者

お礼

すごい・・・・ お示しの計算式で、意図する動作を確認致しました。 これほど素晴らしい式を頂いて、本当によろしかったのでしょうか、 お時間を割いて手間暇をかけていただき、たいへん恐縮です。 エクセルが、見事に化けました。 これが本当の表計算なのですね、もはやエクセルというより別の便利アプリですね、 完全に1つのソフトウェアを開発してしまった感じですね。 私ばかりが得をして、回答者様に何もお返しできないのが心苦しいですが、 御蔭さまで本当に助かりました。 これで日常がよくなります、本当に、頭が上がりません。 この度は、素晴らしいソフトウェアの開発を、本当にどうもありがとうございます。

その他の回答 (3)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

>No.1の回答者様の添付画像にあるような方法を採ることにいたします。 E列の数式は解決したものとさせて頂きます。 >依然として、D8セルにおける「現在の連続達成日数」を求める方法が分かりません。 「現在の連続達成日数」と言う定義が分からないので回答できませんでした。 貼付画像では23行目まで表示されており日付の値が4/1(日)なので今年のようですが将来の達成時間を既に予測できているのでしたら今日の日付は3/20(火)ですからE11の1をD8セルに返すことでしょうか? しかし、E11の値は質問の文言からは0になるはずなのでどのような論理なのかが説明されていません。 23行目が最終の入力日としてE23の値をD8セルへ返す場合は「現在の連続達成日数」と言う文言が不可解なことになります。 Excelの数式は論理に叶ったものにしなければなりませんので曖昧な条件では数式を組み立てられません。 D8セルへの数式も現時点では曖昧さが残っていますので再度見直して補足を完全にしてください。 現在の日付はTODAY関数で取得できますのでC列の日付から今日の日付を探すことはMATCH関数で行番号を抽出できます。

noname#231606
質問者

お礼

この度は、私どもの不完全な質問形式により混乱を招いてしまい、 申し訳ありません。 もっと論理的に質問するよう気を配るべきでした。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.2

>基準値以上でカウントし、基準値未満でカウントをリセットします。 >たとえば基準値が4なら、達成時間が4時間であれば連続達成日数としてカウントし、3時間59分なら0にリセットです。 添付画像と異なるようですが勘違いでしょうか? >※F4~F6の基準値は、月ごと、場合によっては週ごとに変わることがあります。 Excelでは数式が入力されているセルについて自動再計算が標準になっています。また、再計算を手動に変更しても再計算コマンドによってすべての数式について再計算されますのでF4~F6の値が変更されると以前に計算された結果が再計算で置き換えられます。 このような条件で良ければワークシート関数で処理可能です。 達成時間のD列に入力して時点で単発の計算を行うにはVBAでプログラムしないと目的に合いません。 >大変複雑になってしまいお手数をお掛けしますが、 複雑と言うより条件の提示が不明確のため的確な回答ができません。 基準値の変更がない場合は下記の数式で良いと思います。 E11セルの数式(但し、土日の確認セルにはαまたはβが必ず入力されていること) =IF(WEEKDAY(C11,2)<6,IF(D11>=$F$4,SUM(E10,1),0),IF(B11="α",IF(D11>=F$5,SUM(E10,1),0),IF(D11>=F$6,SUM(E10,1),0))) 「基準値以上でカウントし」とは「上のセルに1を加えた値」と解釈していますのでE11セルの数式にE10+1では#VALUE!になるためSUM関数でエラーを回避して同等の結果を得ています。(SUM関数では文字列のとき0と解釈されます)

noname#231606
質問者

お礼

プロの方とお見受けします。 特定のセルの内容を変えるとそのセルが参照されている全セルも再計算されてしまうのですね。 なるほど、そうでしたか。 右も左も分からないもので、大きな勘違いをしていたようです。 お時間を割いて計算式をありがとうございます。 ただ、私どもの用途においては基準値は一定ではないので、 No.1の回答者様の添付画像にあるような方法を採ることにいたします。 No.1の回答者様の改善案と計算式を使って、意図する動作が得られました。 依然として、D8セルにおける「現在の連続達成日数」を求める方法が分かりません。 ※過去最高記録ではなく現時点での連続記録であり、つねにE列の値を参照します。 とある方が、 =VLOOKUP(999,E:E,1,TRUE) と仰っていたのですが、それはどういう原理なのでしょうか? 既にご回答を頂いている折厚かましいですが、よろしければ、ご教授いただければ嬉しいです。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

> ※F4~F6の基準値は、月ごと、場合によっては週ごとに変わることがあります。 > そのたびに計算式の数値を調整するのも面倒ですので、計算式内で基準値を使用するときは > 必ずF4~F6セルを絶対参照するようにしたいです。 例えば、3/31まではF4の基準値は4:00だったけど、4/1からは5:30に変更する……って事ですか? そりゃ無理だ。 F4セルの基準値を書き換えたらこのシートでF4セルを参照して演算した結果が全て書き換わっちゃいます。 G:I列にその日の基準値を持つべきです。 添付の図ではG:I列にその日の基準値をもっています。 平日の基準値を4/1から4:00→5:30、αの基準値を3/27から3:00→4:00と変えています。 E11セルに↓ =1*(D11>=IFERROR(HLOOKUP(B11,H$10:I11,ROW(A2),FALSE),G11)) E12セルには↓を入れて、E12を下にコピーしています。 =IF(D12>=IFERROR(HLOOKUP(B12,H$10:I12,ROW(A3),FALSE),G12),E11+1,0)

noname#231606
質問者

お礼

プロの方とお見受けします。 お示しの計算式で、意図する動作を確認致しました。 ご丁寧に画像までお貼り頂き助かります。 素晴らしい、美しい式です。 これほど複雑なことを、この2つの計算式で達成できるものなのですか。 それほどスマートで優れた式だということでしょう。 HLOOKUP関数はエラーが起こったりして難しいということをネットで知りました。 このように使いこなされているなんてすごい。 厚かましいですが、 D8の、現在の達成日数の関数も、よろしければ教えて頂きたいです。 私にとって、分かりそうで分からないです。 ※過去最高記録ではなく、現時点で連続達成の何日目かを表示するものです。

関連するQ&A

  • この関数はどうすればよいでしょうか

    エクセル2007で、毎日数字を入力していき、 基準4を超えたら達成とみなして「あと××日」 とカウントを表示する関数を教えてください。 ※カウントは365日から開始 ※基準は、日曜日だけ2に変更されます。 たとえば、一日目、7だったら基準4より上だから あと364日、二日目、6だったらあと363日、 三日目、8だったら、あと362日、 四日目、1だったら基準未満だからカウントリセットして あと365日、五日目、8だったら、あと364日、 六日目、3だけどこの日は日曜日だから、基準は2に変更されるので、 基準を満たしたものとして、あと363日、などと続いて、 そしていつか、カウントが0になったとき、 つまり365日連続で基準を達成したとき、 達成、と結果が出力される計算式を教えてください

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

    エクセルの関数についてです。 とある目的で、添付画像のようなエクセルの テーブルを作ったのですが、 『E列の値が「"OK"」の行の、「C列の金額」を足し合わせる』  ※画像の例で言えば、「¥30,000+¥20,000+¥10,000」を、   E列の値を判定しながら行う。 こういう計算を行う、何か良い関数をご存知でしたら、教えて下さい。 何卒、宜しくお願い致します。

  • 【Excel】この場合どの関数を使えばよいですか?

    Excelについて質問です。 添付画像の表のE列の対応可否に関数を入れたいです。 E列に入る値は3つです。 以下の条件の場合に3つの値のいずれかが自動的に入る関数を教えてください。 ・「-」…C列のステータスの値が完了の場合 ・「対応可能(色は緑)」…C列のステータスが対応中かつそのレコードより上にD列のIDと同じ値が無い場合 ・「対応不可(色は赤)」…C列のステータスが対応中かつそのレコードより上にD列のIDと同じ値がある場合 どうぞよろしくお願いいたします。

  • Excel この場合の関数 添付画像あります

    日々、ノルマを設け、それを分かりやすく管理するため文字で置き換え、 添付画像のように、1日目を「あ」、2日目を「い」、3日目を「う」というように、50音順に一日一字ずつノルマを課すものとし、50音すべて終了後はローマ字AからZ、それがおわったら小文字のaからzなどというように、日々何かしらのノルマ(文字か記号か数字の1字)があるものと仮定します。 ただし、1度達成したノルマは、復習として、次の間隔で繰り返す必要があります。 最後に達成してから3日後、最後に達成してから4日後、最後に達成してから5日後、最後に達成してから6日後というように、繰り返すスパンが1日ずつ広がる階差数列(?)になります。 たとえば、5月1日に、ノルマ「あ」を達成したとします。 すると、その3日後の5月4日、そして5月4日から4日後の5月8日、さらに5月8日から5日後の5月13日というように、ノルマ「あ」を再び達成する必要があります。 この場合、2018年5月1日から記録を開始するとすると、5月20日には「い、く、す、ち」という、過去達成した4つのノルマを再度繰り返すことになりますが、このようにして記録を続けていくと、2020年5月1日のノルマの個数はいくつになっていますか。 もし、その結果が膨大なようでしたら、繰り返すスパンの最大間隔を30日間とし、以降は30日間おきに繰り返すものとし31日間以上間隔をあけないようにしたいです。 添付画像の「復習列」に、自動でその日に繰り返すべきノルマの文字を出力させたいのですが、その場合の関数を教えていただけますか。 その都度、紙面上のカレンダーにメモしていく労力を考えると気が遠くなります。 質問の主旨にご理解ご協力を頂ける方がおりましたら、何とぞ、よろしくお願い致します。

  • Excel 添付画像つき この場合の関数について

    セルI4に、月の最初から現在までの合計労働時間をリアルタイムで記録したいです 詳細は添付画像をご覧下さい たとえば仮に今日を4月1日として、全部で8時間半の労働をしたとします。 この場合、添付画像のようにセルJ11は8:30と入力します セルJ11を埋めたとき、自動でI4には8:30と記録されるようにしたいのです。 翌日4月2日も労働時間8時間半なら、J12を8時間半と入力します J12の値が入力されたら、前日までの合計時間と合わせた17時間00分の値を、I4に自動で記録させたいです このようなセルI4の関数を教えて頂きたいです。 宜しくお願い致します。

  • EXCEL関数で条件を満たす個数

    EXCEL関数で条件を満たす個数をカウントしたいのですが、どのようにしたらよいのでしょうか?    A列 B列 C列 D列 E列 F列 G列 H列 ----------------------------------------------------------- 1行    目標 1日 2日 3日 4日 5日   目標達成日数 ----------------------------------------------------------- 2行 山田  5  2  4  1  6  3    1 ----------------------------------------------------------- 3行 佐藤  3  1  2  6  5  4    3 ----------------------------------------------------------- 4行 岩本  4  6  2  1  2  5    2 上記のような表を作成し、目標を達成している日数をカウント するには、どのような関数を使用すれば良いのでしょうか? (H列)に目標達成日数を表示したいです。 山田さんの場合、 目標(セルB2)5以上を満たす日は、4日(セルF2)の6だけなので 目標達成日数(セルH2)は1となります。 佐藤さんの場合、 目標(セルB3)3以上を満たす日は、 3日(セルE3)の6と 4日(セルF3)の5と 5日(セルG3)の4と 目標達成日数(セルH3)は3となります。

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

    お世話になります。 NETWORKDAYS関数を使って、土日・祝日を除く日数をカウントするのは、過去の質問から分かったのですが、 その他の条件として、土曜出勤の日が含まれている場合には、 プラスして計算したい場合は、どうすればよろしいでしょうか? エクセル2000のバージョンを使っています。 A列に開始日  B列に終了日  C列に日数 ※E列の日付が含まれていたら除く ※F列の日付が含まれていたら1日プラスする。  A列      B列      C列     E列      F列 1 開始日    終了日    日数    祝日      土曜出勤日 2 2006/08/01  2006/08/11  **     2006/07/17   2006/07/22 3 2006/08/11  2006/08/18  **     2006/08/14   2006/08/19 4 2006/08/14  2006/08/25  **     2006/08/15 5 2006/08/17  2006/08/25  **     2006/09/18 よろしくお願いします。

  • エクセルの関数でダブルカウントを避ける方法

    エクセルの関数機能で回答お願いいたします! _______A_______B_______C_______D_______E_______F 1____品名___値____設定____下限___上限 2_____AA______1______(1)______0______1.6 3_____AB_____1.5_____(2)_____1.4_____2.1 4_____AC______2______(3)_____1.8_____2.2 5_____AD______1______(4)_____2.2_____2.6 6____AE______3____(5)_____2.5_____3.1 このような表があります。   AA~AEまで5つの商品があり、 それぞれに値があります。 それらを 下限(D列)≦ 値 <上限(E列) の範囲に 当てはまる 品数 をカウントしたいのですが これをカウントし、F列に答えを返すと、 (1)0~1.6の間には  3つ (2)1.4~2.1の間には 2つ (3)1.8~2.2の間には 1つ (4)2.2~2.6の間には 0つ (5)2.5~3.1の間には 1つ となり、下限と上限の間にある値をダブッてカウントしてしまうのです。 F列の縦合計が 品名の数と同じようになるように、ダブらずに集計したいのですが ダブらないでカウントする条件を設定したいのです。 たとえば 品名ABの場合、 下限と上限の範囲には 2つヒット(設定(1)と(2))してしまうので この場合、(1)の方にカウントし、(2)にはカウントしない という風にし、絶対にダブルカウントせずに下限と上限の間の設定が2箇所ヒットした場合 常に下限が小さい方にカウントさせる方法はないでしょうか? もしもっとシンプルに以上の解決策を ご存知でしたら是非それも教えてください。 よろしくお願いいたします!!!

  • IF関数条件式について教えてください

    IF関数を使ってどのように計算式を組んだらよいのか悩んでいます。 D列の数字がE列に満たない場合、E列を満たすためにG列を何回増やせばE列を超える数字になるのかをB列に表示させたいです。 どなたか計算方法を教えていただければ大変ありがたいです。 (画像添付を参照してください)

  • EXCELの関数についてご教授ください。

    EXCELの関数についてご教授ください。 【質問内容】 以下エクセルのデータがあるとします。 A       B  C  D   E F 2013/10/1 新 100 2013 10 1 2013/10/1 旧 100 2013/10/1 新 101 2013/10/1 新 102 2013/10/1 旧 102 2013/10/1 新 103 2013/10/1 旧 110 2013/10/1 旧 110 2013/10/1 旧 110 2013/10/2 旧 110 ※D1,E1,F1には任意の日付を入力できるイメージ (1) D1,E1,F1にそれぞれ上記の値(2013年10月1日)を入力した場合、 A列が「2013/10/1」かつ B列が「新」の件数は 「4件」 と出力されるようにしたいです。 ※「100」「101」「102」「103」が集計され計4件 ※この場合(B列が新の場合)はC列は同じ値は入らないので考慮しなくてよい (2) D1,E1,F1にそれぞれ上記の値(2013年10月1日)を入力した場合、 A列が「2013/10/1」かつ B列が「旧」で C列が「重複しているものは1件でカウント」すると 「3件」 と出力されるようにしたいです。 ※「100」「102」「110」が集計され計3件 ---------- (1)は以下自力で解決出来るようなのですが、 =SUMPRODUCT((A1:A$10=DATE(D1,E1,F1))*(B1:B10="新")) (2)が難解すぎて質問させて頂きました。 皆様お忙しいところ、大変申し訳ございませんがお力をお借りしたく思います。

専門家に質問してみよう