こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA 空白以外のセルをカウントして数値を返す

エクセルVBAについて、初心者です。
例えば、A1からA5までに何か入力されている場合は、別シートのA1セルに個数を返す、というVBAを教えてください。
(A1からA5の5セルに3セルだけ文字列データが入っている場合は、別シートA1に3と入力される)

困っております。ご回答よろしくお願いいたします。

投稿日時 - 2007-05-15 18:26:27

QNo.3002569

すぐに回答ほしいです

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

das101さん、こんにちは。

> VI列までこれを繰り返す処理もできますでしょうか。

IV列でしょ?
以下のようにFor nextで繰り返せます。

Sub test02()
Dim Rng As Range
For i = 1 To 256 '1列から256列まで繰り返す
Set Rng = Sheets("Sheet1").Range(Cells(1, i), Cells(5, i))
Sheets("Sheet2").Cells(1, i) = Application.WorksheetFunction.CountA(Rng)
Set Rng = Nothing
Next i
End Sub

ただ、CountA関数できをつけなければならないのは、式の答えで空白(="") となっていてもカウントされます。式が入っているので空白ではないからです。
計算結果が空白の場合は空白としたいなら、

Sub test03()
Dim Rng As Range
For i = 1 To 256 '1列から256列まで繰り返す
Set Rng = Sheets("Sheet1").Range(Cells(1, i), Cells(5, i))
Sheets("Sheet2").Cells(1, i) = Rng.Count - Application.WorksheetFunction.CountBlank(Rng)
Set Rng = Nothing
Next i
End Sub

のようにしてください。

投稿日時 - 2007-05-16 11:11:26

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

> Dim i As Integer
> を追加すれば大丈夫でした。

失礼しました、漏れてましたね。

> ちゃんと動きましたが、行がずれてしまいましたので、

Sheet2の1行目に返すようにしたつもりですが、どうずれましたか?

投稿日時 - 2007-05-16 14:23:34

お礼

Sheet2の1行目に返すようにちゃんと動作しました。
いただいたプログラムに間違いがあったのではなく、実際は、5行目に返す必要がありましたので、私の方での訂正が必要でした。
思ったとおりのものが出来上がり、感謝しております!
また是非相談にのってください!ありがとうざいました。

投稿日時 - 2007-05-16 16:42:34

ANo.3

merlionXXです。
すみません、少し修正させてください。
先ほど#2で書いたコードはSheet1をアクティブにしていないとエラーになってしまいます。
検索範囲であいまいな書き方しちゃったせいです。
すっかり悪い書き方の見本になってしまいました。 (*/∇\*) キャ

それぞれ、以下のようにしてください。

Sub test02()
Dim Rng As Range
For i = 1 To 256 '1列から256列まで繰り返す
With Sheets("Sheet1")
Set Rng = .Range(.Cells(1, i), .Cells(5, i))
End With
Sheets("Sheet2").Cells(1, i) = Application.WorksheetFunction.CountA(Rng)
Set Rng = Nothing
Next i
End Sub

Sub test03()
Dim Rng As Range
For i = 1 To 256 '1列から256列まで繰り返す
With Sheets("Sheet1")
Set Rng = .Range(.Cells(1, i), .Cells(5, i))
End With
Sheets("Sheet2").Cells(1, i) = Rng.Count - Application.WorksheetFunction.CountBlank(Rng)
Set Rng = Nothing
Next i
End Sub

投稿日時 - 2007-05-16 11:21:14

補足

すみません!ちゃんと調べたら分かりました。
Dim i As Integer
を追加すれば大丈夫でした。
ちゃんと動きましたが、行がずれてしまいましたので、修正して再度実行してみます。

投稿日時 - 2007-05-16 13:38:49

お礼

早速にありがとうございます!すぐに実行してみましたが、iの定数が定義されていないというコンパイルエラーが出てしまいました。

iを使った別のサンプルを実行してみたときにも同じようにエラーが出てしまい、どのサンプルを見ても定義していないので、なぜだろう??と先に進めなかったのですが・・・。

投稿日時 - 2007-05-16 13:34:22

ANo.1

Sheet1のA1:A5の空白以外のセル個数をSheet2のA1に返します。

Sub test01()
Dim Rng As Range
Set Rng = Sheets("Sheet1").Range("A1:A5")
Sheets("Sheet2").Range("A1") = Application.WorksheetFunction.CountA(Rng)
Set Rng = Nothing
End Sub

投稿日時 - 2007-05-15 19:03:32

お礼

大変助かりました!本当にありがとうございます。
相談できる人がおらず、書籍を見たりと、1週間悩んでいましたので、回答いただいたときは感激しました。
空白セルをTrueで返す、などのサンプルは見つけたのですが、COUNTAのサンプルがなかなか見つかりませんでしたので・・・。
(ずうずうしいのですが、VI列までこれを繰り返す処理もできますでしょうか。これ以上考える時間がないので、とりあえず、同じ処理をコピーしたのですが・・・。)
とにかく、ありがとうございました。

投稿日時 - 2007-05-16 10:39:46

あなたにオススメの質問