ワークシート関数で複数のセル範囲の空白を調べる方法とは?

このQ&Aのポイント
  • ワークシート関数を使用して複数のセル範囲の空白を調べる方法について紹介します。
  • セルの個数を数えるCOUNTA関数や空白セルの数を数えるCOUNTBLANK関数を使用することで、空白がないか確認することができます。
  • また、セル範囲を分けて個別にCOUNTBLANK関数を使用する方法もあります。
回答を見る
  • ベストアンサー

ワークシート関数で複数のセル範囲の空白を調べたい

ワークシート関数でセル範囲、B1:B5,D1:D4,F1:F3,H1:J1 が空白でない場合にTRUEを返すため =COUNTA(B1:B5,D1:D4,F1:F3,H1:J1)=15 という数式を書きました。ただ、これはセルの個数が15であることがわかっていなければなりません。ならば、COUNTBLANKで空白セル数を求め、それが0であればよいと思うのですが、なぜか =COUNTBLANK(B1:B5,D1:D4,F1:F3,H1:J1) という複数のセル範囲指定は、COUNTBLANKでは使えないようです。 やむをえず、セル範囲を分けて =SUM(COUNTBLANK(B1:B5),COUNTBLANK(D1:D4),COUNTBLANK(F1:F3),COUNTBLANK(H1:J1))=0 として対応しましたが、これをもっと簡単にやる方法はないでしょうか?

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.6

アドインは、 *.xlsxのブックに付加するものではなく 利用PCの利用ユーザごとにエクセルへ付加するものです。 他のPCでも利用させるためには アドイン化したエクセルブック(*.xlam)を配布し、 配布を受けた側は、*.xlamを然るべきフォルダーに複写し 有効化する必要があります。 その意味では、 配布する側に若干高めのスキルが求められます。 これらに必要な情報はインターネットにゴロゴロ転がっています。 https://excel-ubara.com/excelvba4/EXCEL297.html この辺りから確認を始めるといいかもしれません。

emaxemax
質問者

お礼

さっそくありがとうございます。 これはとても面白そうですので勉強したいと思います。 ただ、今回の質問としては配布を受けた側にスキルを要求できないのでむりですね。 ありがとうございます。

その他の回答 (5)

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.5

横から失礼します。 ワークシート関数と呼んだ場合、 エクセルが標準で用意している「組み込み関数」だけを指す場合もあれば 利用者がVBAで作成する「オリジナル関数」 (「カスタム関数」)を含む場合もありましょう。 この部分とVBA利用の可否が曖昧なまま質問されることがあり、 答える側とすると少々悩ましいところです。 続いて、 >決定的な違いはマクロを含まないBOOKでは使えないということです。 この行(クダリ)です。 「オリジナル関数」を含んだブックをアドインとして登録すれば *.xlsxのブック内でも「オリジナル関数」が使えますので 今回の課題をVBAで実現することができないわけではないです。 更に、 今回の課題をVBAの関数で実現する場合 =MyCOUNTBLANK(B1:B5,D1:D4,F1:F3,H1:J1) のように、引数が4つの場合もあれば =MyCOUNTBLANK(B1,D1:D4) のように、引数が2つの場合もありますから 引数の数が可変である必要があります。 そこで、興味本位で期待の関数を作成してみました。 よかったら参考にしてみてください。 なお、引数の数は最大5個までです。 不足があるようなら改変してください。 Function MyCOUNTBLANK( _   Rng1 As Range, _   Optional Rng2 As Variant, _   Optional Rng3 As Variant, _   Optional Rng4 As Variant, _   Optional Rng5 As Variant) As Long  Dim MyR As Range  MyCOUNTBLANK = 0      For Each MyR In Rng1   If MyR.Value = "" Then    MyCOUNTBLANK = MyCOUNTBLANK + 1   End If  Next MyR    If IsMissing(Rng2) Then Exit Function  For Each MyR In Rng2   If MyR.Value = "" Then    MyCOUNTBLANK = MyCOUNTBLANK + 1   End If  Next MyR  If IsMissing(Rng3) Then Exit Function  For Each MyR In Rng3   If MyR.Value = "" Then    MyCOUNTBLANK = MyCOUNTBLANK + 1   End If  Next MyR  If IsMissing(Rng4) Then Exit Function  For Each MyR In Rng4   If MyR.Value = "" Then    MyCOUNTBLANK = MyCOUNTBLANK + 1   End If  Next MyR  If IsMissing(Rng5) Then Exit Function  For Each MyR In Rng5   If MyR.Value = "" Then    MyCOUNTBLANK = MyCOUNTBLANK + 1   End If  Next MyR End Function

emaxemax
質問者

お礼

ありがとうございます。 >「オリジナル関数」を含んだブックをアドインとして登録すれば *.xlsxのブック内でも「オリジナル関数」が使えます アドインというのをやったことがなくわからないのですが、ある特定の*.xlsxのブックにアドインを設定すれば、その*.xlsxのブックを配布しても配布先の別な端末でも通常に「オリジナル関数」が使えるのでしょうか?

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

お礼に関して。 #1,#3です。 どちらでもよいですが、私の#3の回答も、ワークシート関数である、と思いますよ。 普通のワークシート関数でも、どういう処理を内部で行なわれているか、みんな知らずに使っている、はずだから。

emaxemax
質問者

お礼

imogasiさん、いつもありがとうございます。 おっしゃるとおりユーザー定義関数もワークシート上であたかも普通の関数のようにふるまいます。でも決定的な違いはマクロを含まないBOOKでは使えないということです。 標準モジュールにFunction~End Functionを記述してもマクロなしBOOKとして保存したら消えちゃいますよね。そして関数は#NAME?エラーになってしまいます。

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

#1です。 名前定義を使うと実現できる関数があったりする’ので、やってみると、 hanni1が質問の範囲名(を定義した)として =COUNTA(hanni1) =MAX(hanni1) =MIN(hanni1) がOKだが =COUNTBLANK(hanni1)は#VALUEエラーになる。 ーー https://excel-fighter.net/countblank.htmlの作者も •とびとびの範囲を数えたい場合は、「=COUNTBLANK(範囲1)+COUNTBLANK(範囲2)」という風に、COUNTBLANKで各範囲を数え、足し算をする と常識的な方法に戻った解説をている。 ーー そこで VBAでユーザー関数を定義する他に方法はないだろう。 標準モジュールに(この部分はユーザーは知る必要がない) Function countblankY(r1, r2, r3, r4) Set myMultipleRange = Union(r1, r2, r3, r4) myMultipleRange.Select 'B1:B5,D1:D4,F1:F3,H1:J1 '--- For Each cl In myMultipleRange ’MsgBox cl If cl = "" Then cnt = cnt + 1 End If Next countblankY = cnt End Function ーーー シートにもどって 空きのセルに、関数 =countblanky(B1:B5,D1:D4,F1:F3,H1:J1) と入れる。 下記データ例の場合で、結果 6 データ例 B列  D列   F列   H列   J列 a   * * p * 12 * * * 5 s u 56 s c *が空白セルの表現とする。

emaxemax
質問者

お礼

ありがとうございます。今回はワークシート関数でという条件があるので =SUM(COUNTBLANK(B1:B5),COUNTBLANK(D1:D4),COUNTBLANK(F1:F3),COUNTBLANK(H1:J1))=0 でいくしかないようですね。

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

 自分の思考したやり方の(普通は失敗例)を記十ツするのはよいが、 肝心のどういう結果を得たいのか、はっきりしない。 (1)空白セル数 (2)空白でない数 (3)数字セルの数 (4)(1)(2)(3()などのセル位置の列挙 などどれを質問しているのか。 実例でもあげて、結果を記せば、読者は類推できる。 ーー 普通はこの手の問題は、VBAの問題かと。 参考 空白セルについて Sub test01() Worksheets("Sheet1").Range("K:K").Clear Dim r1, r2, r3, r4, r5, myMultipleRange As Range 'B1:B5,D1:D4,F1:F3,H1:J1 Set r1 = Sheets("Sheet1").Range("B1:B5") Set r2 = Sheets("Sheet1").Range("D1:D4") Set r3 = Sheets("Sheet1").Range("F1:F3") Set r4 = Sheets("Sheet1").Range("H1:J1") Set myMultipleRange = Union(r1, r2, r3, r4) myMultipleRange.Select '--- For Each cl In Selection If cl = "" Then ’空白か cnt = cnt + 1 Worksheets("Sheet1").Cells(cnt, "K") = cl.Address ’空白セル番地列挙 End If Next MsgBox cnt ’空白セル数 End Sub

emaxemax
質問者

お礼

ありがとうございます。 今回はVBAではなくワークシートでやる必要があるのです。

  • Nobu-W
  • ベストアンサー率39% (725/1832)
回答No.1

=COUNTIF(B1:B5,"")+COUNTIF(D1:D4,"")+COUNTIF(F1:F3,"")+COUNTIF(H1:J1,"") これは?

emaxemax
質問者

お礼

ありがとうございます。 あまり違わないような・・・・

関連するQ&A

  • エクセル/指定範囲のセル数を返すワークシート関数は?

    エクセル2000です。 たとえば、A1:A100の範囲に、空白か否かを問わずセルがいくつあるかを返すワークシート関数はないでしょうか? 空白以外の数+空白の数で求められるかと思いましたが、 =COUNTA(A1:A100)+COUNTBLANK(A1:A100) では、計算の結果 ="" になっているセルが両方にカウントされてだめです。 VBAなら Range("A1:A100").Count で一発なのですが・・・・。

  • エクセル関数で空白および「””」を調べる方法?

    たとえば、式=""が入っているセルは、表面上何も見えませんがCOUNTAやCOUNTBLANKでは空白の扱いにはなりません。 これを空白と見るにはどうすればよいのでしょうか? 今、一定の範囲内で各行に、一箇所でも入力があればTRUE、なにもなければFALSEの判定をしたいのですが、式で「""」が表示されている(つまり表面上表示がない)セルは「空白」として扱いたいのです。 よろしくお願いします。

  • 空白でないセルの個数(Excel)

    エクセルで空白でない個数を調べたいのですが、COUNTA関数を使ってみたのですが出来ませんでした。よく見たら数式が入っていました。表示されているセルの個数を調べる方法ってあるのでしょうか。ありましたら教えてください。

  • COUNTIFで空白表示以外のセル数を取得

    エクセル2010です。 セル範囲A1:A10にはすべて数式が入っています。 計算の結果はすべて文字列が返ります。 その中には、="" で空白に表示されたセルもあります。 セル範囲A1:A10で空白に表示されたセルの数は =COUNTBLANK($A$1:$A$10) で求められます。 空白でないセルの数を求める場合 =COUNTA($A$1:$A$10) では、="" も数式が入っているためすべてカウントされ使えません。 やむを得ず、 =SUMPRODUCT(($A$1:$A$10<>"")*1) や =ROWS($A$1:$A$10)-COUNTBLANK($A$1:$A$10) でしのぎました。 これを、COUNTIFで求めることはできないでしょうか? =COUNTIF($A$1:$A$10,"<>""") とやってみましたが、これも全セル数を返すようです。

  • 数式で空白にしたセルについて

    もともと空白だったセルD1とE1があって、F1に「=D1*E1」と 数式を立てるとF1には0が表示されます。 しかし、D1に例えば「=IF(B1="","",VLOOKUP(B1,$G$1:$N$5,2,FALSE))」 という数式を入れD1を空白にすると「=D1*E1」の数式があるF1には #VALUE!のエラーがでます。 D1に返された""は、通常の空白という意味とは違うのでしょうか? また、通常の空白セルとは0(ゼロ)が設定されているのでしょうか? ご存知の方教えて頂けますでしょうか

  • エクセル/COUNTIF関数で空白以外のセル数取得は?

    エクセル2000のワークシート関数の質問です。 B1~B13には数式が入っており、計算の結果として何らかの文字や数字が表示されたセルと、何も表示されない、つまり=""のセルがあります。 このセル範囲の何かが表示されたセルの個数を取得する関数を探しています。 =COUNTIF(B1:B13,"<>""") としてみましたが全セル数の13が返りました。 やむをえず =ROWS(B1:B13)-COUNTBLANK(B1:B13) とか =SUMPRODUCT((LEN(B1:B13)>0)*1) とか =SUMPRODUCT((B1:B13<>"")*1) として取得しましたが、本来のCOUNTIFでは取得できないのでしょうか?

  • COUNTBLANK関数について

    A1からA16まで数式が入っています。 ただし数式の結果によっては、空欄になっているセルがあります。 COUNTA関数を使ってA1からA16までのデーターが入っている個数を調べた場合、空白のセルにも数式が入っているためカウントされますよね。 では、COUNTBLANK関数を使ってA1からA16までの空白の個数を調べた場合どうなりますか? 実際には空白のセルにも式が入っているのだから、0にならないとおかしくないですか? 実際の結果は空白の個数をちゃんとカウントできます。 なぜでしょうか? 矛盾していると思うのですが・・・

  • EXCEL 数式が入った空白セルを数える

    毎度お世話になっています。 質問の内容ですが、例えば下記のようなシートがあるとします。 セルB1、セルC1、セルD1:手入力セル セルA1:数式「=IF(B1="","",B1+C1)」 セルA2:文字列 セルA3:数式「=IF(D1="","",D1*0.1)」 セルA4:文字列 セルA5:A1+A3の計算結果を表示 (※なお、セルA2、A4は数値が入らない) というような場合において、 ●セルB1、C1、D1になにも入力されていない場合、セルA5が空白となる。 ●セルB1、C1にのみ数値が入力されている場合、セルA5の計算結果がセルA1の値のみ。 ●セルD1にのみ数値が入力されている場合も上記と同様に計算結果が表示される。 以上の条件を満たす数式をセルA5に入力したいのですが、 COUNTBLANKは数式が入っている場合には使えず、COUNTAの場合だとセルA1、A3のどちらにも数値が入った場合に表示される、といった数式になります。 IFをいくつも使えば可能とは思いますが、もう少し単純に数式を作れたらと思い質問をさせて頂きました。 よろしければ御回答宜しくお願い致します。 (内容を訂正したため、いったん質問を削除しました。もし御回答中の方が居ましたら申し訳ありませんでした。)

  • 数式が入った空白のセルを合計するとき

    数式が入った空白のセルを合計するとき WINDOWS XP EXCELL 2003 です。 各セルの数式は C43 =SUM(B36-C36) D36 =SUMPRODUCT((入力!$C$2:$C$50=$A36)*(入力!$A$2:$A$50=D$1),入力!$E$2:$E$50) E36 =SUMPRODUCT((入力!$D$2:$D$50=$A36)*(入力!$A$2:$A$50=D$1),入力!$F$2:$F$50) E43 =SUM(C43+D36-E36) と数式がそれぞれに入っています。 ご教示を仰ぎたいのは D36,E36 に値がない空白のセルですがこの場合、E43 G43 I43 と表示(この場合 50,000)がされますがD36 若しくはE36に値が表示されたときのみにE43 を表示したいのですが可能でしょうか。 目的は見やすくしたいのですが。 ご指導いたたければ幸甚の至りです。

  • 条件付で空白セルの個数を求めるには?

    Excel2003です。 下の表(B3:D10)から、荷姿"A"だけの空白セル(黄色)の個数を求めるには どうしたらいいのでしょうか? 個人的には、COUNTBLANK関数使って求めるのでは?と 四苦八苦しているのですが、良い方法ありましたらアドバイス よろしくお願いします。

専門家に質問してみよう