1

私がやろうとしているのは、ワークシート名を含む範囲を反復処理し、セルが空でない場合は、CountA関数の結果をカウント変数に追加することです。

したがって、count変数は、反復しているワークシートの範囲内の非空白セルの数と等しくなければなりませんB9:B28が、奇妙なことに、値は、私が通過している範囲内の非空のセルの数と等しくなります(sheet1!d5:d24)。

私は何が間違っているのですか?これが私が使用しているコードです:

For Each c In Worksheets("Sheet1").Range("d5:d24").Cells
    If Not IsEmpty(c) Then
        count = count + WorksheetFunction.CountA(c & "!b9:b28")
    End If
Next

2番目の範囲をループする別の方法を試しました。セルが空でない場合は、変数を1インクリメントしますが、実行時エラー13タイプの不一致エラーが発生します。これは私が今していることです:

    For Each c In Worksheets("Sheet1").Range("d5:d24")
    If Not IsEmpty(c) Then
        For Each c2 In Worksheets(c).Range("b9:b28")
            If Not IsEmpty(c2) Then
                'count = count + WorksheetFunction.CountA(c & "!b9:b28")
                count = count + 1
            End If
        Next
    End If
Next

私を助けてください。返信に時間を割いてくださった皆様、本当にありがとうございました。

4

2 に答える 2

4

@Peter Albert と @Peter L. のコメントに基づいて、最終的に機能するようになりました。正しいコードは次のとおりです。

For Each c In Worksheets("Sheet1").Range("d5:d24").Cells
If Not IsEmpty(c.Value) Then
    count = count + WorksheetFunction.CountA(c.Value & "!b9:b28")
End If
Next

どうもありがとう:)

于 2013-02-15T15:27:34.697 に答える
1

これを試して:

Sub CountColBForColD()
Dim c As Range
Dim r As Long   'row counter
Dim rngB As Range
Dim rngD As Range
Dim lookSheet As Worksheet

Set rngD = Sheets("Sheet1").Range("D5:D24")
Set rngB = Range("B9:B28")
r = 1

For Each c In rngD
    If Not IsEmpty(c) Then
        On Error GoTo InvalidSheetName
        Set lookSheet = Sheets(rngB(r).Value)
        On Error GoTo 0
        Count = Count + WorksheetFunction.CountA( _
            lookSheet.Range(rngB.Address))
            c.Offset(0, 1).Value = Count
            r = r + 1
    End If
NxtC:
Next

Exit Sub

InvalidSheetName:
Err.Clear
MsgBox "Sheet named in  " & rngB(r).Address & " does not exist.", vbInformation
Resume NxtC

End Sub
于 2013-02-15T15:22:35.793 に答える