• ベストアンサー

Excel VBAで判定しカウント

Excel VBAで  A10、A11、A12、A13、A14、A15、A16まで、すべて数値0、1から9までのどれかが入っています。 各セルの値が0かどうかチェックし、0ならカウントCTにその個数を入れたい。 これをCASE文で書けますか。処理できればIFでもCASEでもかまいません。簡潔なものを教えてください。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >簡潔なものを教えてください。 それなら、ループは必要ないでしょうね。 Dim CT As Long  CT = WorksheetFunction.CountIf(Range("A10:A16"), 0)

taktta
質問者

お礼

いろいろ手法がありますね。とても参考になりました。 どうもありがとうございました。

その他の回答 (6)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

#3です。 範囲を変数で捕らえるなら、始点を決めておいて、Resize で範囲を広げます。 Dim CT1 As Long Dim CT2 As Long Dim i As Integer Dim j As Integer   '縦なら  i = 8 'Hまで 8列  CT1 = WorksheetFunction.CountIf(Range("A10").Resize(i, 1), 0)   '横なら  j = 10 '20行まで  CT2 = WorksheetFunction.CountIf(Range("A10").Resize(1, j), 0)

taktta
質問者

お礼

上式の意味ためしてみて、納得いたしました。 こういう処理もあるんだなと珍しいものを見る気持ちです。 いろいろご指導ありがとうございました。

taktta
質問者

補足

自分としては解決 下記のような式を最終的に作れうまくいきました。 For i = 1 To 81 ATAI = Worksheets("kouho").Cells(i + 11, "K")    If ATAI = 9 Then For j = 1 To 9 CT = WorksheetFunction.CountIf(Range(Cells(i + 11, "L"), Cells(i + 11, "T")), 0) Worksheets("kouho").Cells(i + 11, "K") = 9 - CT Next j Else End If Next i

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.6

>更に10のところを変数jをかませて j+10にして使う場合 意味がよく解りませんが・・・。 Range("A" & 10 + j & ":H" & 10 + j) という感じですか?

taktta
質問者

お礼

カウントした値は、その行のあるセルに格納するわけなのですが。 問題としては、A10、B10、C10、D10、E10、F10、G10、H10まで、ということにすれば、本当に知りたいしきになり、更に処理の中で、FORj=1 to 100により行を1~100までまでみていって、 ある行のセルを条件判定し、充たしていたらその行のA列からH列の0をカウントという意味です。 御回答どうもありがとうございました。

taktta
質問者

補足

更に10のところを変数jをかませて j+10にして使う場合 意味がよく解りませんが・・・。 処理の中で、FORj=1 to 100により行を1~100までまでみていって、 ある行のセルを条件判定し、充たしていたらその行のA列からH列の0をカウントという意味ですが。おわかりいただけたでしょうか。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.5

Dim rc As Range Dim ct As Integer For Each rc In Range("A10:A16") Select Cace rc Case 0 ct = ct + 1 End Select Next rc

taktta
質問者

お礼

いろいろ手法がありますね。とても参考になりました。 どうもありがとうございました。

taktta
質問者

補足

求めるセルの範囲が縦ではなく横 たとえば A10からH10までなら Dim rc As Range Dim ct As Integer For Each rc In Range("A10:H10") 以下略 ですね。 この10のところを変数jをかませて j+10にして使う場合の書き方はどうなるのでしょうか。

  • yuji0401
  • ベストアンサー率9% (28/284)
回答No.4

わざわざVBAじゃなくてもCOUNTIF関数じゃダメ?

taktta
質問者

お礼

今マクロを書いていてそういう処理が必要です。 ごめんなさい。

  • kazzanov
  • ベストアンサー率27% (5/18)
回答No.2

こんな感じ? for i=10 to 16  if range('A'&i)=0 then   count=count+1  endif next

taktta
質問者

お礼

いろいろ手法がありますね。とても参考になりました。 どうもありがとうございました。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

簡単に・・・ Dim c As Range Dim ct As Integer ct = 0 For Each c In Range("A10:A16") If c.Value = 0 Then ct = ct + 1 Next MsgBox ct

taktta
質問者

補足

求めるセルの範囲が縦ではなく横 たとえば A10からH10までなら、 更に10のところを変数jをかませて j+10にして使う場合の書き方はどうなるのでしょうか。

関連するQ&A