[[20200923002018]] 『VBAで行ごと特定セルを計算してCOUNTIFしたい』(まる) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAで行ごと特定セルを計算してCOUNTIFしたい』(まる)

お世話になっております。

VBAを使用して
?@各行ごと特定のセルをSUMして、それぞれの行が2以上ならCOUNTIFして数値化したい
?A上記?@で出した各行ごとのSUMが2以下で、特定のセルに特定のワードがあった場合にのみCOUNTIFして数値化したい

以下コードを書いたのですがエラー13が出て型が違うと言われたのですが分かりません

Sub count()

Dim i
Dim ii
Dim cnt

For i = 2 To 40

Cells(i, 33).Value = Cells(i, 11) + Cells(i, 12) + Cells(i, 13)
'↑の部分がエラーのようですがわかりません

Next i

cnt = WorksheetFunction.countif(Range("AG2:AG40"), ">2")

Range("H48").Value = cnt

For ii = 2 To 40

        If InStr(Cells(ii, 15).Value, "ワード") And InStr(Cells(ii, 33).Value, "2") > 0 Then
           Range("H49").Value = (Range("H49") + 1)

        Else

        End If

     If InStr(Cells(ii, 17).Value, "ワード") And InStr(Cells(ii, 33).Value, "2") > 0 Then
           Range("H49").Value = (Range("H49") + 1)
        Else

        End If

Next ii

End Sub

よろしくお願いいたします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 >Cells(i, 33).Value = Cells(i, 11) + Cells(i, 12) + Cells(i, 13)
 >'↑の部分がエラーのようですがわかりません

 どこかにエラーか文字が入っているんじゃないですか?

 エラーが含まれてないなら
      ↓
 Cells(i, 33).Value = Application.Sum(Cells(i, 11).Resize(1, 3))

(半平太) 2020/09/23(水) 08:15


ありがとうございました。
どうやらファイルによって40行以内に文字や関数があったことが原因のようでした。
毎回デバッグして行数を変える作業をして対応していますが、何かいいアイデアがあったらご教授頂けますでしょうか?

数値以外になったらループを抜けるなどでしょうか?
また、カウントする場所もファイルによって変わってしまうので(Range("H48").Value = cntがH48に文字が入ってしまったりするため使えないときがある)、固定できる方法がありましたらお願いします。
(まる) 2020/09/23(水) 15:53


 数式で全部計算できそうですけど、マクロがいいんですか?

    Sub count()
        Dim i As Long '変数の型の指定はしてください
        Dim ii As Long
        Dim msg As String
        'Dim cnt As Long

        For i = 2 To 40
            Cells(i, "AG").Value = Application.Sum(Range("K:M").Rows(i))
            '↑エラーの時に0にするなど、処置が必要ならここに記述する
        Next i
        Range("H48").Value = Application.CountIf(Range("AG2:AG40"), ">2")
        Range("H49").Value = 0 '<==ここでH49にリセットかけないと、延々増やし続けることにならないですか?
        For ii = 2 To 40
            If IsError(Cells(ii, "AG").Value) Then
                msg = msg & Cells(ii, "AG").Address(0, 0) & vbCrLf
            Else
                If Cells(ii, "AG").Value > 2 Then '<=AG列は 数値 なので、単純に2より大きいで比較されてはどうですか?
                    '↓1行でO列で+1 Q列で+1 最大で+2されますが、問題ないですか?
                    If InStr(Cells(ii, "O").Value, "ワード") Then
                        Range("H49").Value = Range("H49").Value + 1
                    End If
                    If InStr(Cells(ii, "Q").Value, "ワード") Then
                        Range("H49").Value = Range("H49").Value + 1
                    End If
                End If
            End If
        Next ii
        If msg <> "" Then MsgBox msg & "のセルにエラーがありました"
    End Sub
(稲葉) 2020/09/23(水) 16:50

ありがとうございました!
とても分かりやすいコードでした
(まる) 2020/09/24(木) 17:33

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.