• ベストアンサー

Excel関数で大きい値を出したいのですがなかなか上手くいきません。

エクセルの関数式で、質問です。    A列   B列   C列 1  番号   版数   結果 2 ○○○×   A     NG     3 ○×○○   A     OK 4 ○○○×   B     OK 表現が難しいので、上手く伝わるか分かりませんが、 A列に同じ番号があり重複するが、 B列の版数が違い尚且つ、最新の版数をC列に表示するようにしたいのです。 上記の場合だと、 3列目は番号と版数が他と重複するものがないので結果はOK。 2列目と4列目は番号は重複してるが版数をみれば、 4列目が新しいので、2列目の結果はNG、4列目の結果はOK。 と、言う感じです。 現在、番号と版数を一緒に入力してた為、 古い版数と新しい版数の判別が付きませんでしたので、 新しい版数のみを表示できるような関数式を教えて頂けないでしょうか? 過去の履歴も検索したのですが、該当するものが見つからなかったので、 質問させて頂きました。 Excelのバージョンは2003になります。 皆様の、知恵をお貸し頂けたら幸いです。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

版数の降順で全体を並べ替えておいてから(つまり最新最大版が表の上に来るように並べ替えてから),必要ならその後A列などで並べ替え,その結果として一番上にあるのをOKとするのが一番数式の簡単なやりかたです。 =IF(MATCH(A2,A:A,0)=ROW(),"OK","NG") なお「版数」の番号付け規則が複雑でこの方法が適用できない場合,どんな数式を使っても単純な計算では求まらない可能性が高くなります。 実際に使用されている「版数」なる記号が本当にご質問に例示されているような単純なモノなのか,具体的にはこんな内容のデータですというのを情報提供なさってみてください。 シンプルに昇順降順を計算できる版数だとしても,並べ替えを絶対にしたくない時は,途端に極端に数式が難しくなりますのでお薦めではありません。 例: C2に =IF(COUNTA(A2:B2)<2,"",IF(SUMPRODUCT(($A$2:$A$100=A2)*($B$2:$B$100>B2)),"NG","OK"))

hiroxe
質問者

お礼

ご回答、有難う御座います! >なお「版数」の番号付け規則が複雑 仰る通り、「版数」の番号は先に最新の番号が入ったりして、 複雑になってます。 ご指摘があります通り、単純な計算式では求めたものが出来ませんでした。 実際に使用している「版数」ですが、シンプルなものになり、 英字や数字(2桁まで)になっております。 また例示で教えて頂きました計算式でやってみたところ、 すんなりと出来ました! 一旦、例示で教えて頂きました計算式でやってみたいと思います! 有難う御座います!

その他の回答 (4)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.5

C2セルに次の式を入力して下方にオートフィルドラッグします。 =IF(A2="","",IF(OR(COUNTIF(A$2:A2,A2)=COUNTIF(A:A,A2),COUNTIF(B$2:B2,B2)=COUNTIF(B:B,B2)),"OK","NG"))

hiroxe
質問者

お礼

ご回答、有難う御座います! 頂いた数式でやってみましたところ、 「版数」に、英字と数字が混ざってる場合は、 英字のみの適用で数字には適用されませんでした。 でも勉強になりました! ご回答頂き、有難う御座いました!

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 外していたらごめんなさい。 A列の番号が何度出現しても一番下の行が最新版となり、その行だけ「OK」と表示すれば良いわけですかね? 一応そういうことだとしての方法になります。 ↓の画像のように作業用の列を使わせてもらっています。 とりあえず、100行目まで対応できるようにしてみました。 作業列D2セルに =IF(A2="","",COUNTIF($A$2:$A$100,A2)) そして、結果のC2セルに =IF(A2="","",IF(COUNTIF($A$2:A2,A2)=D2,"OK","NG")) という数式を入れています。 C2・D2セルを範囲指定し、D2セルのフィルハンドルで下へコピーすると 画像のような感じになります。 これでA列の番号が何度出てきても最終行のみ「OK」となり、その他は「NG」と表示されると思います。 以上、参考になれば良いのですが 的外れなら読み流してくださいね。m(__)m

hiroxe
質問者

お礼

ご回答、有難う御座います! 頂いたご回答で早速試してみました! これはイケる!と思いましたが、肝心な事を質問に入れ忘れてました…。 B列の版数が先に新しい版数が入ってた場合…例えば、 2行目がB、4行目がAの場合だと、 ご回答頂いたものは、4行目のA版が最新と判断されてしまいます。 このような場合の関数は難しくなりますか? 折角ご回答頂きましたのに、すみません…。

  • rukuku
  • ベストアンサー率42% (401/933)
回答No.2

こんばんは 「MAXIF」などという関数が可能でしょうが、残念ながら紹介できません。 マクロ(VBA)を使えば可能です。 多少手作業を含むなら、基本機能と関数で実現する方法はあります。 例えば、以下のような方法です。 1.データ-並べ替え   (最優先されるキー:列 A-昇順,2 番目に優先されるキー:列 B-昇順) 2.C2に  =IF(A2=A3,"NG","OK")  以下オートフィル 後でもとの順番に戻したい場合には、 1.最初に開いた列に行番号を振っておく 2.上記手順を実行 3.C列をコピー&形式を指定して貼り付け-値 4.1で行番号を振った列をキーに並べ替え で出来ます。 

hiroxe
質問者

お礼

ご回答、有難う御座います! マクロ(VBA)はまだ知識不足なので、分かりません。 すみません…。 完成した表でならご回答頂いたもので適応できそうですね! ただ今回の場合は表に後々追加されるので、未完成の状態です。 お客様から頂いた図面が新しいものを送って頂いたり、 古いものが後から送って頂いたりと私も分からなくなってきてますので、 今回の質問をさせて頂いた次第です。 でも参考になりましたので、今後使用させて頂きます! 有難う御座いました(^^)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

>3列目→3行目だね C2に、 =IF(COUNTIF(A2:$A$4,A2)<>1,"NG","OK") でいいんじゃないか。 A2:$A$4の範囲は状況に応じて適当に決める。

hiroxe
質問者

お礼

ご回答、有難う御座います! 早速やってみました。 A列には適応しますが、B列の版数が入らないので、 A列に同じ番号でもB列の版数で、こっちが最新だ!という結果にはなりませんでした。 あと、3列⇒3行の指摘有難う御座います! 焦ってたせいか、気付きませんでした;;

関連するQ&A