プロが教える店舗&オフィスのセキュリティ対策術

とても簡単のように思えたのですが、いざやってみると、あれ?、う~ん!、なかなかうまくできません。どなたかご教授ください。たとえば、次のような場合、

   A列  B列  C列
1行  1       小
2行      3
3行
4行  8
5行      5   小

上記の表の意味は、A列・B列のそれぞれ数値の隣接した1行目と2行目、4行目と5行目の数値を比較して、小さい方の数値に"小"をC列に表示させたい(この時、"小"は小さい方の値の行に表示するものとする)。この場合、C列にはどのような関数を設定すればよいのでしょうか?

A 回答 (9件)

A列にデータがある行の1行下のB列には必ず数値があるという前提で、C2には以下の式を入れます。

C列の他の行へはコピーしてください。
ただしデータは2行目以降に入力してください(1行目は空けるか、タイトル行とする。そうしないとエラーが出ます)

=IF(A2<>"",IF(A2<B3,"小",""),IF(B2<>"",IF(B2<=A1,"小",""),""))
    • good
    • 1
この回答へのお礼

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

お礼日時:2006/12/07 18:09

こんばんは。

#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),"小",""))
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/08 02:35

#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の数式だけを下方にフィルコピーする。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/07 22:46

こんばんは。

#5 のWendy02です。

>とても簡単のように思えたのですが、
で、単純ではないことは分かったから書いたものの、未だに、解答に至るまでの情報が足りません。

>データは1万行以上

下手な式を用いると、かなりシートが重くなってしまいますね。
私としては、もう、それは、マクロでもよいのかと思っています。しかし、マクロのコードを書くにしても、関数で書くにしても、今ひとつ、条件(ルール付け)が足りないような気がします。

>空白の行が連続して1行~10行あったり

>A列にデータがある行の1行下のB列には必ず数値があるという前提

一体、どこからどこまで探すのでしょうか?
最初は、1行目から空白まで。次は、空白の行から次の空白の行まで?
同じ数がある場合は、どうするのか、また、同じ行の2列に同時に数字が入るのか、

とか、書かれていないものが多いように思います。実際のデータをある程度に加工して、その望む結果を書いていただければ、もしかしたら分かるかもしれません。

この回答への補足

度重なる説明不足でお手を煩わせて本当に申し訳ありません。表現力の乏しさから、ご指摘されてあらためて気づくこともありました。要するに、私のやりたかったのは下記の表のようなものです(サンプルの表を長くしたもの)。少し言葉で補足しておきますと、
※データは仮に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列の空白セルには関数式が埋め込まれています)

補足日時:2006/12/07 22:24
    • good
    • 0

  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),"小",""))
★下にコピー
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/07 18:50

こんばんは。



>とても簡単のように思えたのですが、いざやってみると、あれ?、う~ん!、なかなかうまくできません。

一つずつするなら簡単ですが、統一式で行うのは、意外にてこずりますね。

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),"小",""))

ただし、同じ場合には、「同」と出すことにしました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/07 18:37

C1=IF(MAX(A1,B2)=A1,"","小")


C2=IF(MAX(A1,B2)=B2,"","小")
でどうでしょうか
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/07 18:21

それぞれのセルに以下のような式を入れたらどうでしょうか。


C1 =IF(A1>B2,"","小")
C2 =IF(B2>A1,"","小")
C4 =IF(A4>B5,"","小")
C5 =IF(B5>A4,"","小")
でどうでしょうか。

この回答への補足

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

補足日時:2006/12/07 17:53
    • good
    • 0

はじめまして



C1に
=IF(A1<B2,"小","")
C2に
=IF(B2<A1,"小","")
C3はなにもいれない。

そしてC1からC3を選択して、右下にカーソルを持って行き、カーソルが十字に変化したらそこで左クリックしたまま必要なだけ下に引き摺り、そこでクリックを放すと数式がコピーされ、目的が達成できるはずです。

的外れでしたらごめんなさい。

この回答への補足

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

補足日時:2006/12/07 17:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!