アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、よろしくお願いします

エクセルのWorksheetFunction.CountBlankのエラーについて教えてください


WorksheetFunction.CountBlank(Range("D17:I17,D19:I19"))はエラーになります
エラーメッセージは
WorksheetFunctionクラスのCountBlankプロパティーを取得できません
と表示されます


WorksheetFunction.CountBlank(Range("D17:I17"))はOKです
やはり、1のように離れた複数セルのCountBlankはサポートしてないということでしょうか?
それとも、私の範囲指定が間違ってますか?

A 回答 (3件)

こんにちは



半分推測ですが・・・

WorksheetFunctionは文字通りエクセルの組み込み関数を利用しているものと推測します。
試しに、通常の関数で
 =CountBlank(D17:I17,D19:I19)
としてみると、「引数が多すぎる」として受け付けられません。
VBAから利用する場合は、上記のエラーがご質問のようなエラーとなって処理されているのではないかと思います。
    • good
    • 0
この回答へのお礼

こんにちは
ありがとうございます
範囲を二つに分けて、その足し算でやってみます

お礼日時:2017/10/03 16:58

> 私の範囲指定が間違ってますか?


どこかのセルに「=COUNTBLANK(D17:I17,D19:I19)」と入力して
みれば 数式として成立するかどうかはすぐ分かると思います。

COUNTBLANK関数を使うのが目的なのかもしれませんが

Dim r As Range, cnt As Long
cnt = 0
For Each r In Range("D17:I17,D19:I19")
If r.Value = vbNullString Then cnt = cnt + 1
Next r
MsgBox cnt & "個です。"
    • good
    • 1
この回答へのお礼

ありがとうございます
For Each r Next rがちょっと難しいですがうまくできました

お礼日時:2017/10/03 17:25

こんにちは!




VBAでなく通常のワークシート関数のCountBlank関数を使って離れた範囲をしてしてみてください。
やはりエラーになります。
VBAのWorksheetFunctionはそのままワークシート関数を使うコトですので、
数式によるエラーはVBAでも使えません。

やり方としては
① 範囲を指定してループさせる方法
② 二つの範囲の空白セルをプラスする方法

といった感じになると思います。
↓のSample1が① でSample2 が②になります。

Sub Sample1()
Dim cnt As Long, c As Range, myRng As Range
Set myRng = Range("D17:I17, D19:I19")
For Each c In myRng
If c = "" Then
cnt = cnt + 1
End If
Next c
MsgBox cnt
End Sub

Sub Sample2()
Dim myRng1 As Range, myRng2 As Range
Set myRng1 = Range("D17:I17")
Set myRng2 = Range("D19:I19")
MsgBox WorksheetFunction.CountBlank(myRng1) + WorksheetFunction.CountBlank(myRng2)
End Sub

※ 他にも色々やり方はあると思います。m(_ _)m
    • good
    • 0
この回答へのお礼

こんにちは、ありがとうございます
アドバイスいただいたように、二つの範囲を足し算したらちゃんと計算してくれました
Setを覚えました
ありがとうございました

お礼日時:2017/10/03 17:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています