- ベストアンサー
Excel VBAで判定しカウント
Excel VBAで A10、A11、A12、A13、A14、A15、A16まで、すべて数値0、1から9までのどれかが入っています。 各セルの値が0かどうかチェックし、0ならカウントCTにその個数を入れたい。 これをCASE文で書けますか。処理できればIFでもCASEでもかまいません。簡潔なものを教えてください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >簡潔なものを教えてください。 それなら、ループは必要ないでしょうね。 Dim CT As Long CT = WorksheetFunction.CountIf(Range("A10:A16"), 0)
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
#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)
お礼
上式の意味ためしてみて、納得いたしました。 こういう処理もあるんだなと珍しいものを見る気持ちです。 いろいろご指導ありがとうございました。
補足
自分としては解決 下記のような式を最終的に作れうまくいきました。 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)
>更に10のところを変数jをかませて j+10にして使う場合 意味がよく解りませんが・・・。 Range("A" & 10 + j & ":H" & 10 + j) という感じですか?
お礼
カウントした値は、その行のあるセルに格納するわけなのですが。 問題としては、A10、B10、C10、D10、E10、F10、G10、H10まで、ということにすれば、本当に知りたいしきになり、更に処理の中で、FORj=1 to 100により行を1~100までまでみていって、 ある行のセルを条件判定し、充たしていたらその行のA列からH列の0をカウントという意味です。 御回答どうもありがとうございました。
補足
更に10のところを変数jをかませて j+10にして使う場合 意味がよく解りませんが・・・。 処理の中で、FORj=1 to 100により行を1~100までまでみていって、 ある行のセルを条件判定し、充たしていたらその行のA列からH列の0をカウントという意味ですが。おわかりいただけたでしょうか。
- mshr1962
- ベストアンサー率39% (7417/18945)
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
お礼
いろいろ手法がありますね。とても参考になりました。 どうもありがとうございました。
補足
求めるセルの範囲が縦ではなく横 たとえば 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)
わざわざVBAじゃなくてもCOUNTIF関数じゃダメ?
お礼
今マクロを書いていてそういう処理が必要です。 ごめんなさい。
- kazzanov
- ベストアンサー率27% (5/18)
こんな感じ? for i=10 to 16 if range('A'&i)=0 then count=count+1 endif next
お礼
いろいろ手法がありますね。とても参考になりました。 どうもありがとうございました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
簡単に・・・ 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
補足
求めるセルの範囲が縦ではなく横 たとえば A10からH10までなら、 更に10のところを変数jをかませて j+10にして使う場合の書き方はどうなるのでしょうか。
お礼
いろいろ手法がありますね。とても参考になりました。 どうもありがとうございました。