解決済み

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

  • すぐに回答を!
  • 質問No.3002569
  • 閲覧数25794
  • ありがとう数7
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 73% (17/23)

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

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

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

  • 回答No.2

ベストアンサー率 48% (1930/4007)

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

のようにしてください。
感謝経済

その他の回答 (全3件)

  • 回答No.4

ベストアンサー率 48% (1930/4007)

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

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

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

Sheet2の1行目に返すようにしたつもりですが、どうずれましたか?
お礼コメント
das101

お礼率 73% (17/23)

Sheet2の1行目に返すようにちゃんと動作しました。
いただいたプログラムに間違いがあったのではなく、実際は、5行目に返す必要がありましたので、私の方での訂正が必要でした。
思ったとおりのものが出来上がり、感謝しております!
また是非相談にのってください!ありがとうざいました。
投稿日時 - 2007-05-16 16:42:34
  • 回答No.3

ベストアンサー率 48% (1930/4007)

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
補足コメント
das101

お礼率 73% (17/23)

すみません!ちゃんと調べたら分かりました。
Dim i As Integer
を追加すれば大丈夫でした。
ちゃんと動きましたが、行がずれてしまいましたので、修正して再度実行してみます。
投稿日時 - 2007-05-16 13:38:49
お礼コメント
das101

お礼率 73% (17/23)

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

iを使った別のサンプルを実行してみたときにも同じようにエラーが出てしまい、どのサンプルを見ても定義していないので、なぜだろう??と先に進めなかったのですが・・・。
投稿日時 - 2007-05-16 13:34:22
  • 回答No.1

ベストアンサー率 48% (1930/4007)

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
お礼コメント
das101

お礼率 73% (17/23)

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

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


感謝指数をマイページで確認!

ピックアップ

ページ先頭へ