• ベストアンサー

エクセルのIF関数での範囲指定の方法

エクセル2010のIF関数は割と良く使っているのですが、範囲指定して使用したいケースについて教えて頂きたく。 例えば「A1からD5までの範囲のセル全てが空白でない場合」 =IF(A1:D5<>””,0,”合格”)というような指定はできないでしょうか? このような範囲指定が出来ると、範囲の合計が100以上の場合、等々使いやすくなるのですが。 今は1つ1つのセルをIFで指定したり、合計をどこかのセルに出してそれを判定させているのですが、範囲が大きくなるとこのような方法ではさすがに・・・ 宜しくお願い致します。

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

  • ベストアンサー
  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.8

こんにちは 入力表(Sheet2)のA列のA1から最終行まで日付が入っているなら、 =IF(COUNTA(INDEX(Sheet2!B:H,COUNTA(Sheet2!A:A),0))<>7,0,"合格") とかで。

akira0723
質問者

お礼

ushi2015-さん、 1つずつの関数は知っており、朝から種々試行してみたのですが、動かなくて質問させていただきました。 デモシートにこの通りに貼り付けてみたら 何故か完璧に動きます!!!! 時間が限られた中で、思いついた解決策だったので本当に助かりました。 今日中に何とか実際の表に適用できそうです。 最初の質問で肝心の前提が抜けてしまっており、皆様にはご迷惑をお掛けしましたが、丁寧にご回答くださり本当にありがとうございました。 感謝!!

その他の回答 (8)

  • bunjii
  • ベストアンサー率43% (3589/8249)
回答No.9

>例えば「A1からD5までの範囲のセル全てが空白でない場合」 >実は指定したい範囲がエクセルの別の表の最下行のデータ入力範囲です。(回答No.1およびNo.2への補足) 前者が誤りで後者がIF関数の条件判断の対象と言うことですよね? 「別の表」とは「同じファイルの別のSheet」と言うことですか? Sheet名と最下行の行番号を指定しないと数式を組めません。 >範囲が固定なら、ご回答いただいた方法全てで出来るのですが、範囲の指定とブランクの判定の組合せが分かりません。(回答No.4への補足) 最下行の行番号が浮動で自動的に検出させるのでしょうか? >仰る通り、A列にデーターの「入力日」が入りますので、A列のデータの数だけ下(最下行)から横並びに決まった幅、例えばB-H列までに空白セル(入力漏れ)が無いことを別の表(顧客提出用)のセルに「入力漏れ有り」等の表示を出したいのです。(回答No.6への補足) 質問文では「A1からD5までの範囲」となっていますが、「B-H列までに空白セル」と条件判断の範囲が列方向も浮動なのでしょうか? 質問内容が度々変化していますので具体的な数式を提示することが困難です。 >OFFSET+COUNT+IF+CLUNTBLANK(等)になるイメージが有るのですが、当方せいぜい2つの関数の組合せ程度しか実力が無く、4つの関数になるとどう表現するのか分かりません。(回答No.4への補足) IF関数の原理を理解すれば応用だけの問題なので自在に組み立てられるはずです。 =IF([条件],[TRUEのときの処理],[FALSEのときの処理]) [条件]の数式で複数要件を同時に判定するときOR関数やAND関数を使うことができます。また、条件を数値化して合計したとき0以外のときTRUE、0のときFALSEと言う結果を得られるので[条件]の数式を自由に組めます。 [条件]の数式に配列値も使えますが今回の対象では配列値を1つの結果に纏める必要があるでしょう。 更に、条件のチェック範囲が浮動の場合は範囲を検出するシグナルが必要になります。 つまり、最下行を示す値は何か?、再右列を示す値は何か?を提示しないと具体的な手法を提示できません。 チェック範囲が浮動のときはOFFSET関数で基準となるセルからの行の隔たり(行の位置)と幅(列の数)が検出できれば目的に合う数式を組み立てられるでしょう。

akira0723
質問者

お礼

ありがとうございます。 確かにご指摘の通り質問に抜けが多く失礼しました。 IFは良く使うのですが、その他の(あまり使わない)関数と組み合わせると、うまく行かない時には修正が出来ないレベルなので、ご容赦! 次回からは気を付けますので宜しくお願い致します。

回答No.7

#1です 補足ありがとうございます。 なるほど、横並びですね。 その場合はカラム数とカウントを取れば可能です。 =IF(COUNTA(B5:H5)=COLUMNS(B5:H5),"OK","アラート!")

akira0723
質問者

補足

回答をありがとうございます。 質問が悪く、何度もお手数をお掛けしております。 ご回答の場合は5行目に限っての場合ではないでしょうか? 質問の前提は、表が下方向にどんどん更新されていく場合の最新データの入力された行(最下行)のB-H列までのセルの入力漏れのアラームです。 詰まり最下行の特定とその行の横の(B-H列)データの数、もしくは空白セルのCOUNTの関数の組合せの仕方が知りたいのです。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.6

こんにちは 入力表の最下行の判定する条件が必要です。 データの入った最下行なら判定出来ますが、最下行が全て空なら判定出来ない ですよね? 表の下にデータの入っていない行が有るなら、そのシートの一番下の行が最下行 という事になってしまいます。 最下行のA列のセルに何か項目が入っているとか、判定条件は無いのですか?

akira0723
質問者

補足

ありがとうございます。 何度も言葉足らずで申し訳ありません。 仰る通り、A列にデーターの「入力日」が入りますので、A列のデータの数だけ下(最下行)から横並びに決まった幅、例えばB-H列までに空白セル(入力漏れ)が無いことを別の表(顧客提出用)のセルに「入力漏れ有り」等の表示を出したいのです。(漏れ無き場合は空白セル) 実際に入力漏れのまま、顧客に提出して苦情になりましたのでその再発防止策ですので、何とかお知恵をお貸しください。

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

(1)関数でもデータの入力されている最下行は捉えられます。 Googleで「エクセル関数 データ最下行」で照会してください。たくさん記事があります。 http://officetanaka.net/excel/function/tips/tips35.htmなど多数。 しかしVBAでやるのがスムーズです。 (2)セル範囲のデータの調べ方 普通のIFを使って、A1:D5="A”のような調べ方はできません。 エクセル関数のセルの範囲指定は、数値セルの、合計、平均、件数、標準偏差など、結果が1つの数字が返るものが多い。 ISBLANKやCOUNTIFなどでは、調べられるものもあります。 しかし条件がどのセルのデータが適合しているのか調べたい場合が多く、VBAの繰り返し各セルで判別処理やFindメソッドがおすすめです。 場合によると、配列数式というものが、「初心者の思い付きや、考えにぴったり」という場合があるとおもいますが、普通の解説書では、言及程度で、詳しくは解説されない。 IF関数は、「もし何々なら」の連想で初心者にはまず思い付く内容・考えですが、IFは使わないために、それぞれの決まった他の関数が作られていると、私は思ってます。IF的発想になったら、他にその目的のエクセル関数がないか、立ち止まって考えてください。 プログラムでも、考えはIFだらけ(場合分けや判別だらけ)ですが、IF文を使うのは、撲滅する方向に、他の方策が考えられているような気がします。

akira0723
質問者

お礼

ご回答ありがとうございます。 仰る通り、先ずは何でもIFで解決しようと思ってしまう初心者です。 そろそろ関数だけでは限界も有ることから、VBAの必要性は感じているのですが、なかなかとっつきにくく。。。。 教えて頂いたHPに当方には色々役に立ちそうな情報が有りそうなので参考にさせて頂きます。  ありがとうございました。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.4

こんにちは Sheet2のA5~D5が最下行として、 =IF(COUNTA(Sheet2!A5:D5)<>4,0,"合格") とかですか? 入力表の最下行自体も判定させるのですか?

akira0723
質問者

補足

その通りで、入力表の最下行の判定で止まっています。 範囲が固定なら、ご回答いただいた方法全てで出来るのですが、範囲の指定とブランクの判定の組合せが分かりません。 OFFSET+COUNT+IF+CLUNTBLANK(等)になるイメージが有るのですが、当方せいぜい2つの関数の組合せ程度しか実力が無く、4つの関数になるとどう表現するのか分かりません。 一番の質問内容が抜けてしまい、お手数をおかけすることになってしまいました。 済みません。。。。

  • akauntook
  • ベストアンサー率19% (295/1481)
回答No.3

>例えば「A1からD5までの範囲のセル全てが空白でない場合」 =IF(A1:D5<>””,0,”合格”)というような指定はできないでしょうか? できません。 そういう仕様です。 if文で用いる単純な条件式は、特定の一つのセルの値に対して評価します。 セルを1つ選択した場合、参照は値となりますが、セルを複数選択した場合は配列となるため根本的に意味が違います。 >今は1つ1つのセルをIFで指定したり、合計をどこかのセルに出してそれを判定させているのですが、範囲が大きくなるとこのような方法ではさすがに・・・ 前者の方法はExcelを使っている意味がなくなるのでないですね。 後者の合計をどこかのセルに出してと言うのは、どこかのセルに出す必要がないです。 合計を求める式は必ず値を返すので、合計を求める式を条件式で評価すれば、値を評価出来ます。

akira0723
質問者

お礼

ご回答ありがとうございます。 質問内容の重要部分が抜けてしまっていました。 お手数をおかけし申し訳ありませんでした。

回答No.2

以下のような使い方でしょうか? =IF(SUM(B2:B10)<=0,"合格","不合格")

akira0723
質問者

補足

早々のご回答ありがとうございます。 質問した直後に大きな条件が抜けていることに気付きましたが、回答が付かないと補足できないようなのでご回答いただくまで待ってしまいました。 実は指定したい範囲がエクセルの別の表の最下行のデータ入力範囲です。 入力表の一番下の行(横)方向にデータを入力していくのですが、データの入力漏れがあった場合、別の表のセルにアラームの表示がしたいのです。 慌てて質問してしまったために直接のやりたいことだけ質問してしまいました。 申し訳ありません。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは =IF(COUNTA(A1:D5)=0,0,"合格") とか、 =IF(SUM(A1:D5)<100,0,"合格") ですか?

akira0723
質問者

補足

早々のご回答ありがとうございます。 質問した直後に大きな条件が抜けていることに気付きましたが、回答が付かないと補足できないようなのでご回答いただくまで待ってしまいました。 実は指定したい範囲がエクセルの別の表の最下行のデータ入力範囲です。 入力表の一番下の行(横)方向にデータを入力していくのですが、データの入力漏れがあった場合、別の表のセルにアラームの表示がしたいのです。 慌てて質問してしまったために直接のやりたいことだけ質問してしまいました。 申し訳ありません。

関連するQ&A

専門家に質問してみよう