『〜以上っていう数式ありますか?』(けいこ) 例えばA1に8:30,A2に7:00,A3に5:00,A4に7:30,ってあった場合、6:00以上のセルの数を数えるにはどうしたらいいですか?何かいい数式あったら教えて下さい。お願いします。 ---- =COUNTIF(A1:A4,">=6:00") ではいかが? (Hatch) ---- もうひとつ聞いてもいいですか? 以上、未満ってどうやってやるんですか? 初歩的な質問でごめんなさい。 ---- 6:00未満の場合は =COUNTIF(A1:A4,"<6:00") でいかがでしょうか?   以下参考まで・・・ A1セルの値が100以上 A1>=100 A1セルの値が100以下 A1<=100 A1セルの値が100未満 A1<100 A1セルの値が100より大きい A1>100 A1セルの値が100と等しい A1=100 A1セルの値が100と等しくない A1<>100 このような記号を比較演算子とよんでいます。 似たようなのに論理演算子 AND OR NOT 演算子 + - / * ^ = & があります。 何か抜けているかも・・・ (Hatch) [XL2000]比較演算子による比較結果について http://support.microsoft.com/default.aspx?scid=kb;JA;416983    上の回答を一部修正しました。(8/11 23:27) (Hatch) ---- 便乗して質問させて頂いてよろしいでしょうか 100以上200以下とするときはどのような式にすればよいのでしょうか? よろしくお願いします。(y) ---- AND(100<=A1,A1<=200)でしょうか。 (川野鮎太郎) ---- 条件の書き方が異なる場合がありますので、例を示しておきます。 COUNTIF関数で100以上200以下のセル数を数えるときは =COUNTIF(A1:A4,"<=200")-COUNTIF(A1:A4,"<100") として、200以下のセル数から100未満のセル数を差し引くことで 100以上200以下のセル数を数えることができます。   100以上200以下のセルを判定し、隣に"○"、"×"を表示するとき IF関数を使い、 B1セルに「=IF(AND(A1>=100,A1<=200),"○","×")」 と入力し、B4セルまでコピーします。 A B 1 200 ○ 2 100 ○ 3 110 ○ 4 50 ×   (Hatch) ---- 参考までに (Hatchさんへではなく、他の方への参考です(^_^A;) セルを判定するだけなら、=IF(AND(100<=A1,A1<=200),"○","×")でも、同じ結果となりますね。 (川野鮎太郎) ---- あれ〜、なんかボケてました。 B1セルに「=IF(AND(A1>=100,A1<=200),"○","×")」 ですね。 上の方も書き換えておきます。 # 川野さんの式と同じことを書こうとしていたようです。 # サッカーを見ていて寝不足です。   (Hatch) ---- 色々とありがとうございます!! しかし、 =COUNTIF(A1:A4,"<=200")-COUNTIF(A1:A4,"<100") でやろうとしたのですが、数式が多すぎます。と言われてしまいました。 これを簡素化した数式ってありますか?(けいこ) ---- >数式が多すぎます。と言われてしまいました。 >これを簡素化した数式ってありますか? (・_・?)ハテ Give Upです。 どなたかよろしくお願いします。        m(_ _)m (Hatch) ---- 私のほうで検証してみたら=COUNTIF(A1:A4,"<=200")-COUNTIF(A1:A4,"<100") で 上手くいきますよ。 (川野鮎太郎) ---- >数式が多すぎます。 Hatchさん同様??? 何をもって多いと言われるのでしょうか? 答えが出ればどんなんでも良いではないですか。 それとも何かの課題が出ているのかな〜? 関数は、一つですが(↓)これも長いと言えば長いですよ。 =SUMPRODUCT((A1:A4>=100)*(A1:A4<=200)) 良し悪しの結果が出たらまた教えてください。基準も含めて。  (sin) ---- 究極の短い式 =keiko(a1:a4,200,100)でどないでっか? 皆さん、割り込みごめんなはれや。 関数ではこれ以上短い式はムリですワ。 1)[Alt]+[F11] 2)「挿入」→「標準モジュール」 3)下のコードをコピペ それで、結果の欲しいセルに=keiko(範囲,最大値,最小値)と入力(関数と同じ扱い) '-------------------------------- Function keiko(data, data1, data2) Dim cnt As Integer, i As Integer Dim tbl As Range Set tbl = Range(data.Address) For i = 1 To tbl.Rows.Count If tbl.Cells(i, 1) <= data1 And tbl.Cells(i, 1) >= data2 Then cnt = cnt + 1 End If Next i keiko = cnt End Function ------ 説明不足ですみません。 セルの列が連続していればA1:A4とかでもできたのですが、列の一個飛ばしの場合で一つ一つ数式を作っていたのですがそうしたら数式が多すぎます(=COUNTIF(A1:A4,"<=200")-COUNTIF(A1:A4,"<100") を30個くらい)と言われてしまいました。私が悪かったのでしょうか。みなさんにご迷惑かけて申し訳ございません。 ---- 1行おきなのか、1列おきなのか↑からは理解できませんでした (^_^; たとえば、下のような感じであれば、 (sin)さんが回答されている式に奇数行/列の判定を加えてやればよいです。 1行おきの「A1:A8の範囲で100以上200以下のセル数」 A9セル=SUMPRODUCT((MOD(ROW(A1:A8),2)=1)*(A1:A8<=200)*(A1:A8>=100)) 1列おきの「A1:H1の範囲で100以上200以下のセル数」  I1セル=SUMPRODUCT((MOD(COLUMN(A1:H1),2)=1)*(A1:H1<=200)*(A1:H1>=100)) と、なります。   ついでに数値の合計は 1行おきの「A1:A8の範囲で100以上200以下の数値の合計」 A9セル=SUMPRODUCT((MOD(ROW(A1:A8),2)=1)*(A1:A8<=200)*(A1:A8>=100),A1:A8) 1列おきの「A1:H1の範囲で100以上200以下の数値の合計」  I1セル=SUMPRODUCT((MOD(COLUMN(A1:H1),2)=1)*(A1:H1<=200)*(A1:H1>=100),A1:H1) と、なります。  (Hatch) A B C D E F G H I 1 100 200 120 80 3 2 3 200 4 5 120 6 7 80 8 9 3 ---- さあて、データの並んでるシートの仕様がわかりまへんけど、拾い出すデータ以外に 数値が入っていなければその列もひっくるめて指定して貰ても大丈夫ですワ、多分。 例えば=keiko(a1:l200,200,100)といった塩梅に。 一番最初に時間で書いてましたけど、時間でもOKです。ただし=keikoの最大値、最小 値は800,500(←最大値8:00、最小値5:00のばやいでも同じように)っちゅう塩梅に書 きます。 前のコードは消しとってくだはい。     (弥太郎) '-------------------------------- Function keiko(data, data1, data2) Dim cnt As Integer, i As Integer, n As Integer Dim tbl As Range Dim get_data Set tbl = Range(data.Address) For n = 1 To tbl.Columns.Count For i = 1 To tbl.Rows.Count If IsNumeric(tbl.Cells(i, n)) And Not IsEmpty(tbl.Cells(i, n)) Then get_data = tbl.Cells(i, n).Text If get_data Like "*:*" Then sp_data = Split(get_data, ":") get_data = sp_data(0) & sp_data(1) End If If get_data * 1 <= data1 And get_data * 1 >= data2 Then cnt = cnt + 1 End If End If Next i Next n keiko = cnt End Function ---- チョット不具合が出たんで(if isnumericの所)修正しときました。     (弥太郎) ごめん、直したつもりが直ってなかったデス。 ---- 質問者の(けいこ)さんはまだご覧でしょうか? 今、この質問を読み返していたら、一列置きに計算をしたい。とのことかも・・・ 下のような計算であったら、 A5セル:=IF(MOD(COLUMN(A5),2)=1,SUMPRODUCT((A1:A4<=200)*(A1:A4>=100)),"") と入力し、右方向へフィルハンドルをドラッグする。 ということでしょうか?   A B C D E 1 120 50 140 2 100 200 180 3 80 100 210 4 200 150 80 5 3 3 2   >数式が多すぎます。と言われてしまいました。 が、Excelが言っているのでしたら原因はわかりませんけど・・・ どなたか他の方が一列置きに数式を入力するのが大変だ! というのでしたら、こういうことかなと思ったもので・・・(Hatch) ---- もうご覧になってないかも知れませんが、気になって読み返してみました。 それとHatchさんのコメントを参考にし、しかもHatchさんの表をお借りして、 『A1:E4セルの中で100以上200以下の個数は?』でしょうか。 =SUMPRODUCT((A1:E4<=200)*(A1:E4>=100)) こういう事だったのでしょうか? (sin) ---- 私も読み返して、試してみました。 仮にA列、C列、E列・・・・・・と1列飛ばしでカウントさせるものを合計しようとして =COUNTIF(A1:A4,"<=200")-COUNTIF(A1:A4,"<100")+COUNTIF(C1:C4,"<=200")-COUNTIF(C1:C4,"<100")・・・・・とした場合、 確かに20個超えたあたりで、数式が長すぎますと怒られちゃいますね(^_^A; こういうことではないですかね(想像ですが) (川野鮎太郎) ---- あーん、書こうと思っていたのにぃ。 =COUNTIF(A1:A4,"<=200")-COUNTIF(A1:A4,"<100") これが45文字 セルに入力できる数式の文字数は1024文字。 1024/45≒22.76 同じ数式を繰り返しても23組でアウトです。 (KAMIYA) ---- >確かに20個超えたあたりで、数式が長すぎますと怒られちゃいますね えっ、そういうエラーメッセージがあるのですか・・・ ・・・今、試してみて、初めて見ました。 誰が言っているのかな・・・うるさい上司でもいるのか?って思っていました。  また一つ新しいことを学びました(^_^;)  (Hatch) ---- あはっ、やっと意味が分かりました。←遅すぎ〜 あのメッセージの事だったんですね。 私も過去に経験があります。 メッセージが出た時には、それまでの努力がパー! >うるさい上司でもいるのか?って思っていました。 私は、鬼教官だと思っていました。 (sin)  怒られるっていう表現についていけなかった… ---- いろいろ考えて頂いてありがとうございます。 そうなんです。私も言われてしまったのです。 そこでHatchさんの=SUMPRODUCT((MOD(COLUMN(A1:H1),2)=1)*(A1:H1<=6:00)*(A1:H1>=5:30),A1:H1)に改造させてもらい試させて頂いたのですが、 今度は#N/Aという表示が出てきました。 そもそもこの5:30以上6:00未満という条件は無理なのでしょうか?それとも数式が膨大過ぎるのでしょうか? どなたか、教えて下さい。(けいこ) ---- >私も言われてしまったのです。 これが原因でみなさんが困惑されてますので、そのような場合には、はっきりと正確に、 『数式が長すぎますとエラーメッセージが出ます』と表現されたほうが良いですよ(^_^A; (川野鮎太郎) ---- まず式を ↓ のようにして下さい。 =SUMPRODUCT((MOD(COLUMN(A1:H1),2)=1)*(A1:H1<=TIMEVALUE("6:00"))*(A1:H1>=TIMEVALUE("5:30")),A1:H1) これは、A1:H1の範囲の中で奇数列(A,C,E,G列)の時間が、5:30以上6:00以下の時間の合計を算出する式です。 個数を求める場合は、最後の ,A1:H1 を削除してください。 6:00未満を求める場合は、 <=TIMEVALUE("6:00") を