• ベストアンサー

エクセルの関数について

エクセルのA列とB列にはランダムな10桁の数値が入力されています。 A列の数値がB列にも有る場合、C列に“OK”と表示させたいのですが、C列にどのような関数を入れたら良いのか分かりません。どなたかご存知の方おしえて下さい。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 ANo.1です。  申し訳御座いません、間違えました。正しくは =IF(COUNTIF($B:$B,INDEX($A:$A,ROW())),"OK,"") になります。 INDEX関数は INDEX(セル範囲, 行番号, [列番号]) の形式で表され、指定したセル範囲の中で、上から「指定した行番号」番目、左から「指定した列番号」番目にあるセルの値を返す関数です。 INDEX($A:$A,ROW()) の場合は、セル範囲は $A:$A になっていますから、A列全体が指定されたセル範囲という事になり、これは列方向の幅は1列だけですから、列番号を指定しなくても良い事になります。  そして、行番号の所には、 ROW() が入力されていて、ROW関数の括弧内には何も入力されていませんから、この部分の数式は、この関数が入力されているセルの行番号が返されます。  A列全体の中から、「関数が入力されているセルの行番号」番目にあるセルの値を取り出すという事は、即ち、「関数が入力されているセルと同じ行」にあるA列のセルの値を返す数式という事になります。  例えば、 =INDEX($A:$A,ROW()) の関数をC1セルに入力しますと、A1セルの値が返されますし、C65535セルに入力しますと、A65535セルの値が返される事になります。  この様に、INDEX関数と、ROW関数を組み合わせて使いますと、入力するセルが何行目のセルであるのかを気にする必要がない上に、参照先であるA列のセルに対して、セルの切取りや削除、挿入等が行われて、セルの位置関係が上下方向にずれた場合でも、間違いなく、「新たに同じ行となったA列のセル」を参照する事が出来ます。  そして、COUNTIF関数は COUNTIF(セル範囲, 検索条件) の形式で表され、指定したセル範囲の中に、検索条件を満たすものが幾つ存在しているのかをカウントする関数です。 COUNTIF($B:$B,INDEX($A:$A,ROW())) の場合は、セル範囲が $B:$B となっていますから、B列全体を対象としている事になります。  又、検索条件が INDEX($A:$A,ROW()) となっていますから、この関数が入力されているセルと同じ行にあるA列のセルの値が検索条件という事になりますので、結局、このCOUNTIF関数の部分は、B列全体の中に「関数が入力されているセルと同じ行にあるA列のセル」と同じ値を持つセルが、幾つ存在しているのかをカウントする数式という事になります。  こちらも、していセル範囲がB列全体となっていますから、A列のセルに対して、セルの切取りや削除、挿入等が行われて、セルの位置関係が上下方向にずれた場合でも、動作上の問題は発生しません。 >A列の数値がB列にも有る場合、 COUNTIF($B:$B,INDEX($A:$A,ROW())) の部分の値は1以上になりますから、B列中におけるA列の数値の有無を判定する事が出来ます。  IF関数では、判定式の所に数値の0が返された場合には、FALSEと同じ扱いとなり、0以外の数値が返された場合にはTRUEと同じ扱いとなりますから、 =IF(COUNTIF($B:$B,INDEX($A:$A,ROW())),"OK,"") では、「関数が入力されているセルと同じ行にあるA列のセル」と同じ値を持つセルが、B列の中に1つでも存在していれば「OK」となり、1つも存在しなければ何も表示されない事になります。

mugi_0201
質問者

お礼

詳しく解説していただきありがとうございました。 色んな関数を組み合わせると複雑になり難しいですね。 もっと勉強します。

その他の回答 (5)

回答No.6

勉強のために回答に使っていない関数を使って C1セルに =REPT("OK",ISNUMBER(MATCH(A1,B:B,0))) 下へオートフィル

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

一例です。 C1に=IF(COUNTIF(B:B,A1),"OK","")を入力、下方向にコピー

回答No.3

A列のデータを基準として、B列と比較する。 A列のデータが数値でなければ回避する。 C1: =IF(COUNT($A1)<>0,IF(COUNTIF($B:$B,$A1),"OK",""),"") 以下、コピー

  • Turbo415
  • ベストアンサー率26% (2631/9774)
回答No.2

例えばA1からA100,B1からB100まで数値があるとしてC1に=IF(ISERROR(VLOOKUP(B1,$A$1:$A$100,1,FALSE)),"","OK") と入れて縦にコピーしてください。 意味はB列の値をA列の1行目から100行目までを検索してエラーだったら空白を入れ、エラーじゃなかったら(数値が一致したら)OKと表示すると言う意味です。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

=IF(COUNTIF($C:$C,INDEX($A:$A,ROW())),"OK,"") です。

mugi_0201
質問者

補足

早速ありがとうございます。 理解力が無くさらに質問させて下さい。 COUNTIFは条件に合うデータの個数を求める関数で、INDEXは行と列が交差した位置のデータを抽出する関数ですよね? あと、ROWの後の()の中には何か入るのでしょうか?

関連するQ&A

専門家に質問してみよう