- ベストアンサー
エクセルで"=AND(ISNUMBER(B2),ISNUMBER(C3),ISNUMBER(D4))"の簡略化?
エクセル2000です。ワークシート関数での質問です。 特定の複数のセルのすべてに数値が入力されているかどうかの判定は、たとえば以下のような関数で調べられますね? =AND(ISNUMBER(B2),ISNUMBER(C3),ISNUMBER(D4)) このように少ないセルならこれでもいいのですが、多くなってくるといちいち、セルの数だけISNUMBER()を書いていくのが大変になります。 '=ISNUMBER(B2,C3,D4)←これでは当然エラーになりますが、こんな感じで簡単に判定するワークシート関数はないのでしょうか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
=ISNUMBER(SUMPRODUCT(B2,C3,D4)) ならどうでしょう?
その他の回答 (6)
=ISNUMBER(SUMPRODUCT(B2,C3,D4)) だと、 B2,C3,D4:E5 とかは、ダメなのでは? 調べたい数値にゼロが無ければ、配列数式で =PRODUCT(B2*C3*D4:E5) 文字列があればエラー、ブランクがあればゼロになります。 他には、一発で出さないで、これも配列数式で =ISNUMBER(INDEX(($B$2,$C$3,$D$4:$E$5),,,ROW(A1))) 下にコピーして、FALSEが無いか調べるとか。 それから、AREAS関数は、 =AREAS(D4:E5) これは 1 =AREAS((D4,E4,D5,E5)) これは 4 カンマで区切る時はカッコを二重にしなければなりません。 行数・列数を数えるROWS,COLUMNSのように、セルの数を数える関数があれば簡単なのかもしれませんけど、無いみたい・・・
お礼
> =ISNUMBER(SUMPRODUCT(B2,C3,D4)) だと、 > B2,C3,D4:E5 とかは、ダメなのでは? そのようですね。範囲はダメみたいです。 そういうときは =ISNUMBER(SUMPRODUCT(B2,C3,D4,D5,E4,E5)) で対処します。 > =AREAS((D4,E4,D5,E5)) これは 4 > カンマで区切る時はカッコを二重にしなければなりません。 またひとつものを覚えました。 ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。Wendy02です。 >指定したセルの数をいちいち指で数えるのもちょっと・・・。 それは、まあ、指で数えるか、それとも他のもので数えるかは、なんとも言えないものがありますが……。^^;(ちなみに、私がそのような仕事の時は、すべて電卓で数えていました。) 今、#5 さんの数式について、チェックしてみましたが、名前登録で、それぞれが別々な限りは、AREAS 関数で、ひとつとして勘定してくれるようですね。 今、いくつかやってみて、引数が、パラメータ配列 (COUNT がパラメータ配列で、COUNTBLANK は、範囲が引数)になっているものを使わなければ、バラバラの場所については、検索しませんね。あまり、この種のものに、わざとExcelの機能に制限を加えて考えてもクイズではないので、手を掛けてもしょうがないような気がしますね。^^; たぶん、将来に渡って解ける人はいるとは思いますが。 人それぞれですから、私なら、100でも、1,000でも、数えてしまいます。というか、業種とか職種に関わることで、そういう仕事だったし、そういう仕事の仕方を教わってきました。ただ、そういうものには、向き不向きがありますから、無理強いは出来ませんね。 そんな話は的外れでしょうから、パラメータ配列で作ってみました。 '----------------------------------------------------- Public Function FISBLANK(ParamArray arg1() As Variant) As Boolean '引数を複数許すISBLANK関数 Dim v As Variant Dim c As Variant Application.Volatile For Each v In arg1 If TypeName(v) = "Range" Then For Each c In v If IsEmpty(c) = True Then FISBLANK = True Exit Function End If Next c End If Next v End Function '----------------------------------------------------- 使用例: =FISBLANK(hanni) =FISBLANK(hanni,A1)
お礼
引数を複数許すISBLANK関数、すごいですね! 今回は、 =ISNUMBER(SUMPRODUCT(B2,C3,D4)) でやりましたが、今後の参考にさせていただきます。 ありがとうございました。
- mu2011
- ベストアンサー率38% (1910/4994)
NO3です。 他の方を参考に次の方法は如何でしょうか。 =COUNT(aaa)=AREAS(aaa) aaaは対象範囲を名前定義をして下さい。
お礼
なんどもありがとうございます。 名前定義をすれば、OKでしたが、 =COUNT(B2,C3,D4)=AREAS(B2,C3,D4) では不可でした。 また、AREAS()ではセルが接続している場合(不規則なので、こういう場所もあります)、正しく数えてくれないことがありました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >配置に規則性はなく、範囲でもありません。 配置に規則性がないのでしたら、名前-定義(以下の場合は、"hanni")を付けて、COUNT関数とCOUNTA関数で比較すればよいのではありませんか? =COUNT(hanni)=COUNTA(hanni) これには、COUNTBLNAK関数は使えないようですので(引数の型が決められている)、ブランクがある場合は、予め、数を数えて、数で比較する必要があるかもしれません。
お礼
ありがとうございます。 COUNTとCOUNTAだけでは、入力値しか見てくれませんので、指定した複数のセルのすべてに数値が入力されているかどうかの判定には使えません。 =AND(COUNT(B2,C3,D4)=COUNTA(B2,C3,D4),COUNTBLANK(B2,C3,D4)=0) が有効なら、これでも良いのですが、COUNTBLNAK関数は使えないようですのでダメですね。 指定したセルの数をいちいち指で数えるのもちょっと・・・。
- mu2011
- ベストアンサー率38% (1910/4994)
安直ですが、=COUNT(B2,C3,D4)=3では駄目でしょうか。
お礼
ありがとうございます。 これはわたしも考えたのですが、いちいちセルの数を指折り数えなくてはなりませんよね? 3つや4つならいいのですが、不規則な位置に多数あると数え間違いしそうなのです。
- mshr1962
- ベストアンサー率39% (7417/18945)
範囲のセルなら =SUMPRODUCT(ISNUMBER(A1:A10)*1)=10 で判定できます。 特定のだと =NOT(ISERR(B2+C3+D4)) なら文字列(ブランクと数値変換できる文字列を除く)はFALSEとなります。 もっとも配置に規則性があればSUMPRODUCTで確認できますが... B2,C3,D4→行と列が同じ(B=2,C=3,D=4)なら =SUMPRODUCT(ISNUMBER(B2:D4)*(COLUMN(B2:D4)=ROW(B2:D4))=3
お礼
さっそくありがとうございます。 残念ながら、配置に規則性はなく、範囲でもありません。 特定なので、=NOT(ISERR(B2+C3+D4))を試すと、数値が無い場合もOKとなり、判定できませんでした。
お礼
ありがとうございます。 うまく行きました!