• ベストアンサー

エクセルで数値の大小を判別する方法について

とても簡単のように思えたのですが、いざやってみると、あれ?、う~ん!、なかなかうまくできません。どなたかご教授ください。たとえば、次のような場合、    A列  B列  C列 1行  1       小 2行      3 3行 4行  8 5行      5   小 上記の表の意味は、A列・B列のそれぞれ数値の隣接した1行目と2行目、4行目と5行目の数値を比較して、小さい方の数値に"小"をC列に表示させたい(この時、"小"は小さい方の値の行に表示するものとする)。この場合、C列にはどのような関数を設定すればよいのでしょうか?

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

A列にデータがある行の1行下のB列には必ず数値があるという前提で、C2には以下の式を入れます。C列の他の行へはコピーしてください。 ただしデータは2行目以降に入力してください(1行目は空けるか、タイトル行とする。そうしないとエラーが出ます) =IF(A2<>"",IF(A2<B3,"小",""),IF(B2<>"",IF(B2<=A1,"小",""),""))

ikatama
質問者

お礼

ご回答どうもありがとうございます。不規則な空白行のある表にも対応でき、こちらの求めていた通りの結果が得られました。本当にどうもありがとうございました。

その他の回答 (8)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.9

こんばんは。#7 のWendy02です。 こんな感じでいかがですか? あくまでも、OFFSET にこだわりを持って作ってみました。 C1: から、フィルダウン・コピーしてください。 * 先にA列にあらわれ、次に必ず1行下のB列にあらわれます。 という条件下です。たぶん、1万行でも、この式自体は、1パターンですから、それほど、ワークシートの負担はないはずです。 =IF(COUNT(A1:B1)=0,"",IF(MIN(OFFSET(A1,ISBLANK(A1)*-1,0,2,2))=MIN(A1:B1),"小",""))

ikatama
質問者

お礼

再三のご回答とてもありがたく思います。確かにその方法でもうまくいきました。私にはちょっとむずかしい数式ですぐには理解できませんが、これから、じっくり勉強させていただきたいと思います。普通はデータの1行目と2行目以降の数式を変えたりすることがよくあるんですが、貴殿のやり方だと最初から1つの関数式で処理できるのはすばらしいと思います。今回は、みなさんからいろいろな方法を教えていただきとても勉強になりました。本当に、どうもありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.8

#4です。下までフィルコピーでやりたいのですか? C1=IF(AND(COUNT(A1),MIN(A1,B2)=A1),"小","") C2=IF(OR(AND(COUNT(A2),MIN(A2,B3)=A2),AND(COUNT(B2),MIN(A1,B2)=B2)),"小","") でC2の数式だけを下方にフィルコピーする。

ikatama
質問者

お礼

なるほど、このやり方でもうまくできました。数式はちょっとむずかしいですけど、数式の考え方自体は理解できましたので参考にさせていただきます。どうも、ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんばんは。#5 のWendy02です。 >とても簡単のように思えたのですが、 で、単純ではないことは分かったから書いたものの、未だに、解答に至るまでの情報が足りません。 >データは1万行以上 下手な式を用いると、かなりシートが重くなってしまいますね。 私としては、もう、それは、マクロでもよいのかと思っています。しかし、マクロのコードを書くにしても、関数で書くにしても、今ひとつ、条件(ルール付け)が足りないような気がします。 >空白の行が連続して1行~10行あったり >A列にデータがある行の1行下のB列には必ず数値があるという前提 一体、どこからどこまで探すのでしょうか? 最初は、1行目から空白まで。次は、空白の行から次の空白の行まで? 同じ数がある場合は、どうするのか、また、同じ行の2列に同時に数字が入るのか、 とか、書かれていないものが多いように思います。実際のデータをある程度に加工して、その望む結果を書いていただければ、もしかしたら分かるかもしれません。

ikatama
質問者

補足

度重なる説明不足でお手を煩わせて本当に申し訳ありません。表現力の乏しさから、ご指摘されてあらためて気づくこともありました。要するに、私のやりたかったのは下記の表のようなものです(サンプルの表を長くしたもの)。少し言葉で補足しておきますと、 ※データは仮に1万行としておきます。 ※数値の出現の仕方は、先にA列にあらわれ、次に必ず1行下のB列にあらわれます。A列とB列に同時に同じ行に同時にあらわれることはありません。また、A列の数値と1行下のB列の数値は同じではありません。 ※調べるのは、データの先頭(1行目)からデータの末尾(10000行目)までを、オートフィルを利用して一気に調べたいというものです。     A列  B列  C列 1行目  1       小 2行目      3 3行目 4行目  8 5行目      5   小 6行目 7行目 8行目  7 9行目      3   小 10行目 11行目 12行目 13行目  5 14行目      2   小 15行目 16行目  1       小 17行目      8 18行目  : (以降も空白行は不規則にあらわれる)  : 10000行目 以上の説明でお分かりいただけましたでしょうか? (ちなみに、A列とB列の空白セルには関数式が埋め込まれています)

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.6

  A   B  C 1 左  右 2  1     小 3     3 4 5  8 6     5  小 ◆1行目にタイトル行を設けて C2=IF((MOD(ROW(A1)+2,3)+1=1)*(A2<B3),"小",IF((MOD(ROW(A1)+2,3)+1=2)*(A1>B2),"小","")) ★下にコピー

ikatama
質問者

お礼

ご回答どうもありがとうございます。この度はこちらの説明不足でご回答者のみなさんにご迷惑をおかけして大変申し訳ありません。(補足内容はNo.1を参照)。空白行のある行は1行とは限らず複数行ある場合もあり不規則なものです(ただし、A列にデータがある行の1行下のB列には必ず数値があるという前提)です。したがいまして、貴殿のやり方でオートフィルを利用した場合、この不規則な空白行のある表ではうまくいきませんでした。ご回答どうもありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 >とても簡単のように思えたのですが、いざやってみると、あれ?、う~ん!、なかなかうまくできません。 一つずつするなら簡単ですが、統一式で行うのは、意外にてこずりますね。 C1の場合:((ROW(A1) はいつでも、A1, 最初のセルは、$A$1) 条件としては、2行の次に、1行空けるという条件、つまり、空白行を含めた3行ずつということです。 =IF(COUNTIF(OFFSET($A$1,INT((ROW(A1)-1)/3)*3,,3,2),MIN(A1:B1))=2,"同",IF(MIN(OFFSET($A$1,INT((ROW(A1)-1)/3)*3,,3,2))=MIN(A1:B1),"小","")) ただし、同じ場合には、「同」と出すことにしました。

ikatama
質問者

お礼

ご回答どうもありがとうございます。これまでのご回答者さんの補足欄にも書きましたが、こちらの説明不足で大変申し訳ありません。(補足内容はNo.1を参照)。空白行のある行は1行とは限らず複数行ある場合もあり不規則なものです(ただし、A列にデータがある行の1行下のB列には必ず数値があるという前提)です。したがいまして、貴殿のやり方でオートフィルを利用した場合、この不規則な空白行のある表ではうまくいきませんでした。貴殿の関数式は今後の参考にさせていただきたいと思います。ご回答どうもありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.4

C1=IF(MAX(A1,B2)=A1,"","小") C2=IF(MAX(A1,B2)=B2,"","小") でどうでしょうか

ikatama
質問者

お礼

ご回答どうもありがとうございます。No.1のご回答者さんの補足欄にも書きましたが、こちらの説明不足もあり大変申し訳ありません。(補足内容はNo.1を参照)。不規則な空白行のある、行数の多い表ではオートフィルを利用した場合うまくいきませんでした。ご回答どうもありがとうございました。

  • akio_myau
  • ベストアンサー率34% (515/1480)
回答No.2

それぞれのセルに以下のような式を入れたらどうでしょうか。 C1 =IF(A1>B2,"","小") C2 =IF(B2>A1,"","小") C4 =IF(A4>B5,"","小") C5 =IF(B5>A4,"","小") でどうでしょうか。

ikatama
質問者

補足

早速のご回答どうもありがとうございました。No.1のご回答者さんの補足欄にも書きましたが、こちらの説明不足もあり大変申し訳ありません。(補足内容はNo.1を参照)。不規則な空白行のある表ではうまくいきませんでした。ご回答どうもありがとうございました。

  • hirorin00
  • ベストアンサー率50% (446/884)
回答No.1

はじめまして C1に =IF(A1<B2,"小","") C2に =IF(B2<A1,"小","") C3はなにもいれない。 そしてC1からC3を選択して、右下にカーソルを持って行き、カーソルが十字に変化したらそこで左クリックしたまま必要なだけ下に引き摺り、そこでクリックを放すと数式がコピーされ、目的が達成できるはずです。 的外れでしたらごめんなさい。

ikatama
質問者

補足

早速のご回答どうもありがとうございました。こちらの説明不足もあり申し訳ありません。質問の補足をすると、例題では、空白だけの行が3行目のみでしたが、現在抱えているデータは1万行以上あり、A列とB列のどちらも空白の行が連続して1行~10行あったりして不規則な並び方のデータ(ただし、A列にデータがある行の1行下のB列には必ず数値があるという前提)です。したがって、貴殿のやり方でオートフィルを利用した場合、この不規則な空白行のある表ではうまくいきませんでした。 せっかくご回答いただきましたのに、こちらの説明不足で大変申し訳ありませんでした。ご回答どうもありがとうございました。