• ベストアンサー

エクセルで最大値を求める

B列の最大値を求めたいのですが、条件が一つあります。 A列の値が10以下の場合はカウントしないようにしたいのです。 例 A  B 6  20 6  58 12 6 11 3 1  100 この場合求めたい最大値は6になります。 これを既存の関数かユーザー定義関数でやりたいのですが、やり方を教えてください。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.6

ちなみに? >{}の表現をユーザー定義関数で書く.. 『表現』? 何がやりたいのですか? 最大値は単独の答えでしょうから、 ユーザー定義関数では単独の値を返すようにコードを書けば良いだけです。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 配列である必要はありません。 ユーザー定義関数のコード内で{}と同じ考え方で処理したいという意味なら 配列変数を使えば良いです。 >{}でくくってもエラーになりました コードを見ないと直しようもありません。 ユーザー定義関数の引数に配列を与えたいならユーザー定義関数をセルに入力して 確定する時に[Ctrl]+[Shift]+[Enter]です。 セルに配列数式をセットする[Ctrl]+[Shift]+[Enter]自体をマクロにするなら Subプロシージャです。FormulaArrayプロパティを使います。

その他の回答 (5)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

例示のデータで =MAX(IF(A1:A5>10,B1:B5,"")) と入れてあるとします。 数式バーの中でマウスを使って 『 A1:A5>10 』 だけを選択して[F9]キーを押してみてください。 {FALSE;FALSE;TRUE;TRUE;FALSE} と表示されます。 確認できたら[Esc]キーで解除してください。 同様に 『 B1:B5 』は {20;58;6;3;100} と表示されます。 『 IF(A1:A5>10,B1:B5,"") 』は {"";"";6;3;""} です。 これが配列です。 この{"";"";6;3;""}のMAXを取り出せばいいわけです。 紹介したページの関連ページ http://pc.nikkeibp.co.jp/pc21/special/hr/hr1.shtml >配列は数式の計算の中で一時的に使われる“作業用セル”みたいなものなんです この配列を使った数式から答えを取り出す時は >配列数式を確定するときは、『Enter』キーだけじゃなく、『Ctrl』キーと『Shift』キーを押しながら、『Enter』キーを押して確定するんです。 >そうすると数式が { } で囲まれて、配列数式だってことがわかるようになっているんです {=MAX(IF(A1:A5>10,B1:B5,""))}

one-eyed
質問者

補足

ありがとうございます。 ちなみに{}の表現をユーザー定義関数で書く場合にはどうしたらよいでしょうか。{}でくくってもエラーになりました

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

掛けずに、普通にMAX(IFの配列数式を使うと良いです。 http://pc.nikkeibp.co.jp/pc21/special/hr/hr3.shtml

one-eyed
質問者

補足

=MAX(IF(A1:A5>=10,B1:B5,"")) と入れてみましたが#VALUE!とでてうまくできません。

  • emaxemax
  • ベストアンサー率35% (43/121)
回答No.3

No1です。 よく考えてみたら、先ほどの回答は対象に必ず正(プラス)の数がある場合のみ有効でした。 必ず正の数があるかどうかわからない場合はかなり厄介な計算になります。 また、ついでなので最大値だけでなく最小値も求めてみました。 整理すると以下のとおりです。 ●A列のセルが10を超える行のB列の最大値 ・対象(A列のセルが10を超える行のB列)に必ず正の数がある場合 =SUMPRODUCT(MAX((A1:A5>10)*(B1:B5))) ・対象に必ず正の数があるとは限らない場合 =SUMPRODUCT(LARGE((A1:A5>10)*(B1:B5),(SUMPRODUCT((A1:A5>10)*(B1:B5>0))=0)*COUNTIF(A1:A5,"<=10")+1)) ●A列のセルが10を超える行のB列の最小値 ・対象に必ず負(マイナス)の数がある場合 =SUMPRODUCT(MIN((A1:A5>10)*(B1:B5))) ・対象に必ず負の数があるとは限らない場合 =SUMPRODUCT(SMALL((A1:A5>10)*(B1:B5),(SUMPRODUCT((A1:A5>10)*(B1:B5<0))=0)*COUNTIF(A1:A5,"<=10")+1))

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

(1)MAXIF関数は無い Googleででも「EXCEL MAXIF」で照会すれば、多数の記事がでて、本質問の答えになっている。 (2)配列数式 (3)SUMPRODUCTで配列数式使用を回避 (4)作業列に条件以外の行は0をだし、その列でMAXをとる。 (5)ユーザー関数 1行ずつ読んで条件以外は読み飛ばし、条件に該当する行のもののみ、「以前の行での最大値」と比べ大きければ 置き換えるコードを作るだけ。 (6)フィルタ操作のオプション指定を使って、A列で「10 より大きい」を表示させておいて A,B列以外のセルで =SUBTOTAL(4,$B$2:$B$100)  第1引数の4がMAXを指定 ーー 単一関数で出来るのでSUMPRODUCTが普通の回答かな。

  • emaxemax
  • ベストアンサー率35% (43/121)
回答No.1

=SUMPRODUCT(MAX((A1:A5>10)*(B1:B5))) では?

関連するQ&A

  • エクセルVBA MATCHをユーザー定義関数で使う

    ユーザー定義関数の質問です。 ある値をB列で探し、見つけたセルの行番号を取得したいのですが分かりません。 条件が一つあってそれはAの値が10以下のものは検索から除外するということです。 例 A  B 6  50 5  45 7  2 12 45 11 9 例えばBが45かつAの値が10以上であるセルの行番号はこの例だと4になります。 ワークシート関数を使うと{=MATCH(45,(A1:A5>=10)*(B1:B5),0)}でできました。しかしユーザー定義関数で.Match(45, Worksheets("Sheet1").Range("A1:A5>=10") * Worksheets("Sheet1").Range("B1:B5"), 0)とやっても#VALUE!となってしまいました。何がおかしいのでしょうか。

  • エクセル2000です。

    エクセル2000です。 「複数の条件をカウント」についての質問です。 例 ____A__B__C 1__あ__い__う 2__え__あ__い 3__あ__い__え 4__あ__う__い 5__い__あ__う 6 7__2 A列が「あ」"かつ"B列が「い」 の場合の個数をA7にカウントしようとしています。 例の場合は1行と3行が条件に合うので A7に「2」と表示したいです。 A7にはどのような関数を入力したら よろしいでしょうか? 過去質問をいくつか試したのですが・・・ なかなか思い通りにいきませんでした。 ご教授お願いします。

  • EXCELで、ある値で検索後、最大値を求める方法について

    EXCELで、ある値での最大値を求める方法がありますでしょうか?数日考えておりましたが結論はでませんでした。 どなたかヒントだけでも結構ですのでご教授頂けないでしょうか? 下記の場合、   A  B  C  D  E  F  G 1       あ  い         2    1  2  2.1    9.6 3    2  3  5.4    5.6    4    3  4  8.2    5.4    5    4  5  1.9    8.2    6    5  1  7.8    4.5    7    6  1  9.6     .    8    7  2  5.6     .    9    8  5  4.5     .    10    9  3  4.8        .    .  .   .         .    .  .   .         .    .  .   .         3000以上 B列の数値をもとにC列の中で検索させ、いくつか該当するとき、その右側のD列の最大値を求めることができるかどうか。 たとえば、B列の1の場合、C列の中で1が2箇所あり、その右側であるD列の値は7.8と9.6となります。そのうちの最大値は9.6ですので、F列の同行に答えとなる値が入ります。そのようなF列の関数等は無いでしょうか? 当方でもいろいろ調べ、DMAX関数が使えそうですが、B列の値が縦(列)となってる場合はうまくいきませんでした。もしB列の値が、縦(列)ではなく横(行)である場合は、OFFSET関数などと併せてうまくいきますが、最大256列(EXCELの制限)までしか扱えません。 何か方法があればヒントだけでも結構ですのでよろしくお願いします。

  • エクセルの関数で最大値に関する表示を教えてください。

    過去ログを調べたのですが一致した物が見あたりませんでしたので質問させていただきます。 たとえばA列とB列に数字が入力されているとします。A列の最大値を求める場合はMAX()関数で処理できます。わからないのはこの先でたとえばA列の最大値がA38の時にB38の値を返すという関数の表示方法が知りたいのですがこのようなことは可能でしょうか? 現在はmax関数でA列の最大値を見つけてその隣の数字を確認して手動で入力していますが自動にしたいのです。 どなたかご存じの方がいらっしゃいましたらご教授願いします。

  • エクセルの関数について教えていただけたらうれしいです。

    エクセルの関数について教えていただけたらうれしいです。 例> A B C 01 70 1 01 20 01 10 02 20 02 50 1 02 30 03 80 1 03 20 04 60 1 04 20 04 20 上記のように、A列内に同じ文字(数字など)がある場合、それぞれのB列にある値の最大値がある、C列へ「1」などのフラグが立つような関数はどうしたらよいのでしょう? 説明が下手ですみません。 A列の「01」が3つあるうち、B列の「70」が最大値なので、C列に「1」が付く。 A列の「02」が3つあるうち、B列の「50」が最大値なので、C列に「1」が付く。 A列の「03」が2つあるうち、B列の「80」が最大値なので、C列に「1」が付く。 A列の「04」が3つあるうち、B列の「60」が最大値なので、C列に「1」が付く。 このようになるようにC列に入れる関数が知りたいです。 よろしくお願いいたします。

  • 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を取得したいのですが・・・

  • 【エクセル】重複を除いたカウント

    例えば以下のようなリストのなかで、BがZである列の 数をカウントしたいのですが、 Aの値が等しい列はダブルカウントしないように集計 したいと考えています。 以下の例ではBがZの列の内、Aが3、6、8の3種類が あるので、答えとしては「3」となります。 A  B ------- 1  X 2  Y 3  Z 3  Z 3  Z 4  Y 5  Y 6  Z 6  Z 7  X 8  Z 9  Y このような場合、どのような計算式(関数)を使えば良いでしょうか?

  • エクセル関数をもちいてセルを検索するには?

    お世話になります。 早速ですが、以下のようなデータがあるとします。     A    B    C 1   1    100 2   0    200 3   1    10 4   1    20 5   0    30 6   0    300 7   0    10 8   1    30 9   0    5 10  0    10 A列には0か1が、B列にはランダムな数字が並んでいるとします。 これに対し、C列にはA列の0の数を数えて、仮に5個目のB列の値を返したいです。 C1ならA1から0の数を数えて5個目、つまりB9(300)の値を返したい。 C2ならA2から0の値を数えて5個目、同じくB9(300)の値、 C3ならC3から0の値を数えて5個目、つまりB10(10)の値を返したい。 最終的には5個めではなく、任意の数字にしたいのですが、 このような値を返すにはどのような関数をもちいたらよろしいでしょうか? COUNTIFやINDEXでできるのではと思いましたが、 カウント数が指定数を満足させる条件がわからず行き詰りました。 どうかご指導お願いいたします。

  • エクセルの任意範囲の最大値最小値の取得について

    エクセルデーター任意範囲の最大値と最小値の取得方法について教えて下さい。 例は以下の形式です。 //////////////////////////////////////////////////////////////// A B C D E G H I O 1 0.51 1.32 0.32 0.34 2 0.59 1.43 0.33 0.35 3 0.62 1.59 0.30 0.36 4 0.60 1.57 0.31 0.30 5 0.59 1.62 0.34 0.39 ←"+1"          6 0.68 1.64 0.34 0.34 7 0.68 1.60 0.33 0.33 8 0.59 1.58 0.31 0.30 9 0.49 1.40 0.33 0.29 10 0.38 1.20 0.29 0.29 . . . . . 11 -1.2 -2.3 -1.3 -1.4 . . . . . E列:昇順に1からの値 G列,H列,I列,O列:完全な規則性はない正負小数点の値。大きく見ると値は増加や減少ではあるが、1行ずつ見ると常に増加や減少とはなっていない。 最終行も未確定で、10回または、5回の同じ様なデーターの繰り返しで、繰り返し点(最大・最小)の値も決まっていない。 10回または、5回の各繰り返し点(最大・最小)を抽出し、以下の値を追記したい。 I列の最初の最大値の同じ行(B列)に"+1"、最小値の同じ行(B列)に "-1"を追記したい。同様に、"+1"~"+10","-1"~"-10"または、 "+1"~"+5","-1"~"-5"を追記したい。 I列が同じ場合、O列→H列→G列の順に最大値と最小値を判断する。 説明不足であるかもしれませんが、エクセル関数の組み合わせや、マクロ、VBAいかなる方法でもかまわないので、早急に処理できる良い方法はないでしょうか? よろしくお願いします。

  • Excelで最大値の求め方

    Excelで、A列とB列の4行目までに下記のように数値が入っています。 A列の最大値はA5セルに =MAX(A1:A4) と入力すれば求められます。 さらにB5セルに「A列最大値の行のB列の数値」を出力するにはどうすればよいのでしょうか?この例ではB5セルは1となります。 5 3 2 8 6 1 4 2 ご存知の方、教えてください。 よろしくお願いします。

専門家に質問してみよう