• ベストアンサー

セル範囲内いずれかの数値が他のセル範囲に含まれるかを調べたい

EXCEL2003です。 A1~H1にそれぞれ3桁の数値が入っています。(空欄もあります。) これら範囲内の数値のいずれか一つでも他のセル範囲(次のシートのA1~A50まで)に 含まれていれば結果をJ1に表示したいのですが、可能でしょうか。 当初はJ1に、if(A1が含まれるか,"あった",if(B1が含まれるか,"あった",if(~と、 やってましたが、関数のネストレベルに引っかかってできませんでした。 MATCH関数だと一つの数値が含まれるかどうかは調べられるようですが、 検索したい数値が複数ある場合はやはりセルを分けて別々に評価するしかないのでしょうか?

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

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

NO6です。 =COUNT(A1:H1)を =SUM(IF(LEN(A1:H1),1))又は=SUMPRODUCT((LEN(A1:H1)>0)*1) で如何でしょうか。

nozomi300k
質問者

お礼

ありがとうございます! おかげさまでできました。大変助かりました。 これを機に、自分でも組めるように勉強したいです。 ありがとうございました。

その他の回答 (7)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.7

#4>(A1~H1の書式は文字列となっていて、3桁の数値も「111」 だったり、「'111」だったりします。) 数値に統一するつもりは無いのでしょうか? A1:H1 だったらさした労力ではないと思いますが・ 例えば、 空きセルに1といれコピーしてA1:H1を選択して 形式を選択して貼り付けから 値、乗算(空白を無視するにチェック)で '111を111 に変換できます。 #4>「count(A1:H1)」の部分がシングルコーテーションだけのセルもカウントしてしまい、うまくいきません。 count の場合は、シングルコーテーションだけのセルは、カウントしません。 また、「次のシートのA1~A50」の状態も、 ' だけだったり、'111 だったり、空白だったりするのでしょうか?

nozomi300k
質問者

お礼

ありがとうございます。 実は数値と言いながら先頭にゼロがある数値であり、他のアプリで読み取る都合上、文字列で使いたいのです。 また、A1:H1ですが、それが何千行もあります・・・。 「次のシートのA1~A50」についてはどうにでもなりますが、元のシートが文字列で扱うのであれば、 やはり文字列になるかと思います。 お手数お掛けします。なにとぞ、ご教示ください。

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

NO3です。 サイトを見るのが遅れました。次の方法は如何でしょうか。 =IF(SUM(IF(Sheet1!$A$1:$A$50=A1:H1,1))=0,"○",IF(SUM(IF(Sheet1!$A$1:$A$50=A1:H1,1))>=COUNT(A1:H1),"×","△"))

nozomi300k
質問者

お礼

ありがとうございます。A1~H1のセルのデータ格納方法がわかり、 下記のような新たな問題が判明しました。 他の方のお礼にも書きましたが、なにとぞお知恵をご拝借ください。 A1~H1のセルには空白のセルも含まれていますが、よく見ると空白で あってもシングルコーテーションだけが入っていたり、入って なかったりすることがわかりました。 (A1~H1の書式は文字列となっていて、3桁の数値も「111」 だったり、「'111」だったりします。) そのため、「SUMPRODUCT((COUNTIF(Sheet2!$A$1:$A$50,A1:H1)<>0)*1) =COUNT(A1:H1)」の部分がシングルコーテーションだけのセルも カウントしてしまい、うまくいきません。 (文字列セルなので、COUNTはCOUNTAに変更しました。) この状態でも、要件を満たすことは可能でしょうか? (3桁の文字列のあるセルだけでカウントできればいいのですが・・。 あるいは、先にすべてのシングルコーテーションだけを削除する ことは可能でしょうか?)

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

=SUM(IF(ISERROR(MATCH(A1:H1,Sheet3!$A$1:$A$50,0)),0,1)) と入れてSHIFT+CTRL+ENTER同時押しで、A1:H1内でSheet3のA1:H50のどれかと一致するセル個数が出ます。 配列数式です。 一致件数が出るセルをA4として、別のセルに=IF(A4=8,"X",IF(A4=0,"○","△")) 式が長くなるので2段階に分けました。

nozomi300k
質問者

お礼

ありがとうございます。A1~H1のセルには空白も含まれているので、 A4=8と評価することはできないのです。 せっかく考えていただいたのに申し訳ございません。 NO.4の方にも書きましたが、状況は下記の通りですので、なにとぞ お知恵をご拝借ください。 A1~H1のセルには空白のセルも含まれていますが、よく見ると空白で あってもシングルコーテーションだけが入っていたり、入って なかったりすることがわかりました。 (A1~H1の書式は文字列となっていて、3桁の数値も「111」 だったり、「'111」だったりします。) そのため、「SUMPRODUCT((COUNTIF(Sheet2!$A$1:$A$50,A1:H1)<>0)*1) =COUNT(A1:H1)」の部分がシングルコーテーションだけのセルも カウントしてしまい、うまくいきません。 (文字列セルなので、COUNTはCOUNTAに変更しました。) この状態でも、要件を満たすことは可能でしょうか? (3桁の文字列のあるセルだけでカウントできればいいのですが・・。 あるいは、先にすべてのシングルコーテーションだけを削除する ことは可能でしょうか?)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

・一つもなければ「○」 ・一つでもあれば「△」 ・全部あれば「×」 =IF(SUMPRODUCT((COUNTIF(Sheet2!$A$1:$A$50,A1:H1)<>0)*1)=COUNT(A1:H1),"×",IF(SUMPRODUCT((COUNTIF(Sheet2!$A$1:$A$50,A1:H1))),"△","○"))

nozomi300k
質問者

お礼

ありがとうございます。早速やってみたのですが・・、 A1~H1のセルには空白のセルも含まれていますが、よく見ると空白で あってもシングルコーテーションだけが入っていたり、入って なかったりすることがわかりました。 (A1~H1の書式は文字列となっていて、3桁の数値も「111」 だったり、「'111」だったりします。) そのため、「SUMPRODUCT((COUNTIF(Sheet2!$A$1:$A$50,A1:H1)<>0)*1) =COUNT(A1:H1)」の部分がシングルコーテーションだけのセルも カウントしてしまい、うまくいきません。 (文字列セルなので、COUNTはCOUNTAに変更しました。) この状態でも、要件を満たすことは可能でしょうか? (3桁の文字列のあるセルだけでカウントできればいいのですが・・。 あるいは、先にすべてのシングルコーテーションだけを削除する ことは可能でしょうか?)

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

シート1のA1:A50をシート2のA1:H1で評価し、J1セルにその個数を設定します。 =IF(SUM(IF(Sheet1!$A$1:$A$50=A1:H1,1))>0,"あった","なかった")、入力完了時にshift+ctrl+enterして下さい。

nozomi300k
質問者

お礼

ありがとうございました。できました。 無理を承知で、もう少しお教えください。 今まで一つでもあれば「あった」としましたが、  ・一つもなければ「○」  ・一つでもあれば「△」(つまりある数値とない数値が混在している)  ・全部あれば「×」(つまりある数値ばっかりだった) と表示させることは可能でしょうか? VBでも結構です。お知恵をお貸しください。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

J1 =IF(SUMPRODUCT((COUNTIF(Sheet2!$A$1:$A$50,A1:H1))),"有","無")

nozomi300k
質問者

お礼

ありがとうございました。できました。 無理を承知で、もう少しお教えください。 今まで一つでもあれば「あった」としましたが、  ・一つもなければ「○」  ・一つでもあれば「△」(つまりある数値とない数値が混在している)  ・全部あれば「×」(つまりある数値ばっかりだった) と表示させることは可能でしょうか? VBでも結構です。お知恵をお貸しください。

回答No.1

VBを使用せずでしょうか? 関数だけで評価するならば、 A列の個々に対してCOUNTIF関数を使いJ1に合計値を入れるとか。。。

関連するQ&A

  • 数値を桁区切りのセルに分割表示したいのです。

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1420285 上記をみて自分でも考えてみたのですが、ちょっとうまくいきませんでした。 セルA2に入った 123,456,789 という数字を セル C2からK2に1桁ずつ表示させたいのですが、 セルA2は数値が変わるので桁が足りない場合、 例;セルA2が2,209,992 の場合    C2 0→桁なし空欄    D2 0→桁なし空欄 ※できればここに¥マーク    E2 2 2    F2 2 2    G2 0 0    H2 9 9    I2 9 9    J2 9 9    K2 2 2 と表示させたいのです。 桁数はC2~K2までの9桁までで、9桁フルにはいる場合は、B2に¥マークが入るようになるとベストです。 分かりづらい説明で申し訳ないのですが、どなたかいい方法がありましたら教えてください。よろしくお願いします!ifのネストになるのでしょうか・・・。     

  • エクセルで範囲内の条件を満たす数値を返す関数を教えてください。

    エクセルで範囲内の条件を満たす数値を返す関数を教えてください。 100以下なら1111 100超~200以下なら2222 200超~300以下なら3333 300超~400以下なら4444 400超~500以下なら5555 500超~600以下なら6666 600超~700以下なら7777 700超~800以下なら8888 800超~900以下なら9999 900超なら10000 上記のような条件があり、入力した数字が該当する条件の範囲内に該当している数字を抽出したいのですが、それができる関数を教えてください。 例えばA1セルに650と入力するとB1セルに上記の条件で該当する7777を表示する、 A1セルに100と入力するとB1セルに1111、 901とA1に入力するとB1に10000と表示されるなどのようにしたいのです。 IFを使った関数では7つまでしかネストできないので、上記の場合10ネストしなければならないのでIF関数が使えません(使える方法があるかもしれませんが私は知りません)。 ネストせずに「&」を使う方法も考えたのですが、それだと数値として扱われず文字として扱われてしまい表示形式を自在に編集することができなくなってしまいます。 良い解決方法を教えてください。

  • エクセルで範囲内に条件を満たすセルがあった時、他のセルでそれを知らせる

    エクセルでワークシートのどこかに1223と数値が入っていたら セルのA1で「B」と表示させたいと考えています。 自分の知識ではIF関数を使うのかと考えるのですが、うまく行かず その原因も分かりません。 エクセルでワークシートのどこかにと最初に書きましたが、比較的 大きな範囲が対象となっています。 初歩的な質問で既出かもと考えているのですが、探しても見付からず 質問させていただきました。回答お願いいたします。

  • Excel2002でセルへの数値代入

    使用しているのはExcel2002なんですが 関数などを使用して空白セルへ数値及び文字列を 代入することって可能でしょうか? 例を挙げると、 セルA1に7という値を入力すると、 セルC1にある関数が「10-A1」という計算を行って セルB1に3という値を返すようにしたいのです。 また、セルB1に4という値を入力すると、 セルC1で計算を行い、セルA1には6が返る。 このようにセルA1、B1ともに、人の手で数値の 入力が行われる可能性があるので、表示部分のセルに 関数式を記述せず、空白としておく。 C1に入力する関数は IF(B1="",10-A1,10-B1) として、この結果を、またIFなどを使って 空白の方のセルに入力してあげればいいかなー というところまでは考え付いたのですが・・・ どなたか教えてください。

  • 別シートのセルにある数値、+○,○○○ -○,○○○ を参照し表示させ

    別シートのセルにある数値、+○,○○○ -○,○○○ を参照し表示させたい。 2点ほど質問させてください。 1. Sheet1のA1セルに、 Sheet2のA1セルに手入力した、「数字の前に + あるいは - が付く数値」を、桁区切りのカンマ付きで表示させたいのですが、 関数式「=IF(Sheet2!A1="","",Sheet2!A1)」ではうまくいきません。 ちなみに、- の付いた場合には赤字で表示させたいと思います。 2. Sheet1のA1セルが、上記でうまく表示されたとして、 今度はその隣のA2セルに入っている数値を、 Sheet1のA1セルが -○,○○○ の場合には赤字で、 Sheet1のA1セルが +○,○○○ の場合には黒字で表示させるにはどうしたらよいでしょうか? たぶん「条件付き書式」で出来るような気はするのですが、定義をどうしたらよいものか見当が付きません。 ちなみに、Sheet1のA2セルに入っている数値は、Sheet2の別セルからの参照になっています。 以上ですが、お知恵を拝借させてください。 よろしくお願いいたします。

  • 指定した範囲のセル内の数値を検索したい(VBA)

    いつもありがとうございます。 また皆様のお知恵を拝借したいと思い質問をさせて頂きました。 現在VBAを勉強中なのですが、以下の場合、コードはもっと簡単になるでしょうか? 【やりたい事】 プログラムを実行すると、シート2に数値が返されます。  ※数値が返される範囲は「A1~A100」だとします。 シート2の「A1~A100」には「1~4」の数値が返され、それぞれの数値が何個あるかを検索。 検索した結果を、「シート1」の指定したセルに表示する。 【記述したコード】 dim x as integer x = 0 For x = 1 To 101 If Sheets("シート2").Cells(x, 1) = "1" Then 1count = 1count + 1 End If If Sheets("シート2").Cells(x, 1) = "2" Then 2count = 2count + 1 End If If Sheets("シート2").Cells(x, 1) = "3" Then 3count = 3count + 1 End If If Sheets("シート2").Cells(x, 1) = "4" Then 4count = 4count + 1 End If Next x 上記のコードで「"x"count」に数値を加算していき、最終的に以下のように各数値をシート1に表示させています。 Sheets("シート1").Range("A1") = 1count Sheets("シート1").Range("A2") = 2count Sheets("シート1").Range("A3") = 3count Sheets("シート1").Range("A4") = 4count 結果的にはうまくカウントされて、結果も正しく表示されるのですが、 列をまとめて検索してやる方法などがあれば、もっと短く分かりやすく おさまるのではと思い、質問をさせて頂きました。 こうやるともっと簡単にできるよなどがあれば、教えて頂けないでしょうか。 Excelの関数などを使用しても構いません。 以上、よろしくお願いします。

  • Excelで数値を右詰めでセルに一つずつ分割したい

    Excel2007です。 最大10桁の数値をセル毎に分割したい。 その際、1の位を一番右にして、右詰めで表示したい。 関数でする方法は、ありますか? 左詰めなら =MID($A1,COLUMN(A1),1)でできることは 調べてあります

  • 入力した数値を元にその他の数値を効率よく求める方法

    お世話になります。 Excelの関数について質問させていただきます。 図を見て頂ければ早いかとは思いますが、元の量(A2~A5)を基準に、 現在ある量を入力する事でその他の量が自動で計算できる式を作りたいと思っています。 現時点で試しているのは IF関数を使い、数値の入っているセルを見つける →数値が入っていれば割合を求め数量を出す →数値がなければ次のセルに移動、以下繰り返し 具体的にD2のセルには以下のような計算式が入っています。 IF(ISNUMBER($C$2),$C$2/$A$2*A2,IF(ISNUMBER($C$3),$C$3/$A$3*A2, IF(ISNUMBER($C$4),$C$4/$A$4*A2,IF(ISNUMBER($C$5),$C$5/$A$5*A2, IF(ISNUMBER($C$6),$C$6*B2," "))))) 今は5行しか入っていないので動きますが、実際はもっとある為ネストの制限に引っかかりそうです。 なにより計算式が長くて修正するにも一苦労してしまいます。 ここまで来て行き詰ってしまいました。 既出でしたら申し訳ありません。知恵を貸して下さい。よろしくお願いします。

  • Excel 数値の丸め

    Excel2010を使用しておりますが、数値の丸めについて教えて下さい。 ■条件  ・Sheet1のA1セルに「10,000」、A2セルに「20,000」と入力。  ・Sheet2のA1セルに「=Sheet1!A1+Sheet1!A2」の式を入力。 ■結果  ・Sheet2のA1セルには「30,000」と表示される。 ■したいこと  ・この「30,000」という数値を「30」という数値に変更したい。 実際はSheet1には「10,000」や「20,000」の金額がたくさん入力されており、それをSheet2で集計しております。 しかし、Sheet2の合計金額が細かいため千円単位に一括して表示しなおしたいのです。 「ROUNDUP」や「ROUDDOWN」の関数を使用すれば千円単位に変更することはできますが、セル毎に入力しなければならないので、対象範囲を指定して一括で千円単位に変更できないでしょうか? という質問です。 よろしくお願い致します。

  • VLOOKUP関数の範囲をセルで指定したいと思っています。

    VLOOKUP関数の範囲をセルで指定したいと思っています。 B1:参照シート名(VLOOKUP関数で使用する範囲があるシート) C2:範囲の開始位置 E2:範囲の終了位置 B3:G3:列番号(B3の値は、B6:B8の範囲で使用する列番号、 D3の値は、D6:D8の範囲で使用する列番号) これらのセルに入力された情報をもとにB6:G8の範囲にVLOOKUP関数を 反映させたいと思っています。 例えば、 B1に参照シート名「2ケタ」 C2にVLOOKUP関数の範囲の開始位置「A5」 E2にVLOOKUP関数の範囲の終了位置「G7」 B3に範囲の列番号「2」がある場合 B6に「=VLOOKUP(A6,'2ケタ'!A5:G7,2,0)の関数を入力。 B2に参照シート名「3ケタ」 C5にVLOOKUP関数の範囲の開始位置「B5」 E2にVLOOKUP関数の範囲の終了位置「H7」 C3に範囲の列番号「3」がある場合 C6に「=VLOOKUP(A6,'3ケタ'!B5:H7,3,0)の関数を入力。 といった感じです。 現在、B6に「=VLOOKUP($A6,INDIRECT($B$1&"!a5:g7"),INDIRECT("$b$3"),0)」と 関数を入力して、VLOOKUP関数の「範囲の参照シート名」と「列番号」の情報は セルから持ってくることができました。 しかし、「a5:g7」という範囲だけは、INDIRECT関数をうまく入れることができません。 どのように関数を入力したら、上手くいくのか、教えていただけないでしょうか。

専門家に質問してみよう