3

これは、「FormulaResultCount」から「3」のカウント戻り変数を返すことを期待して、VBA でカウントしようとしているコードです。各セル内の数式によって視覚的に返されるものを数えることができないのはなぜですか。灰色のボックスから(下の写真を参照)?

 Sub countNonBlanks()

        Worksheets("Sheet1").Select
        Range("C:C").Select


        FormulaResultCount = Selection.SpecialCells(xlCellTypeFormulas).Count


            'SpecialCells options from MSFT            
            '        xlCellTypeAllFormatConditions. Cells of any format -4172
            '        xlCellTypeAllValidation. Cells having validation criteria -4174
            '        xlCellTypeBlanks. Empty cells 4
            '        xlCellTypeComments. Cells containing notes -4144
            '        xlCellTypeConstants. Cells containing constants 2
            '        xlCellTypeFormulas. Cells containing formulas -4123
            '        xlCellTypeLastCell. The last cell in the used range 11
            '        xlCellTypeSameFormatConditions. Cells having the same format -4173
            '        xlCellTypeSameValidation. Cells having the same validation -4175
            '        xlCellTypeVisible. All visible cells
            '

    End Sub

式を参考にしてください:

ここに画像の説明を入力

注: 動的に作業する場合はより多くのセルが存在するため、ループによってプロセスが大幅に遅くなる可能性があります。また、結果なしでCountAを使用してみました。

4

4 に答える 4

4

多分これ:

FormulaResultCount = WorksheetFunction.CountIf(Range("C:C"), "?*")

したがって、任意の文字で始まる範囲内のすべてのセルを数えますか?

于 2014-04-24T10:20:30.997 に答える
3

xlCellTypeFormulas. 数式を含むセル -4123

これは、値に基づいてセルを返すのではなく、数式があるかどうかを示します。ワークシートに従って、取得する必要があります5

また、 INTERESTING READは使用しないでください.Select

コードは次のように書くこともできます

FormulaResultCount = Worksheets("Sheet1").Columns(3).SpecialCells(xlCellTypeFormulas).Count

もう 1 つのヒント: をSpecialCells使用する場合は、適切なエラー処理を使用して、条件に一致するセルがない場合でもSpecialCellsコードが壊れないようにします。この例を参照してください。

Sub Sample()
    Dim ws As Worksheet
    Dim Rng As Range

    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        On Error Resume Next
        Set Rng = .Columns(3).SpecialCells(xlCellTypeFormulas)
        If Err <> 0 Then
            MsgBox "No Cells with formulas were found"
            Exit Sub
        End If
        On Error GoTo 0
    End With

    FormulaResultCount = Rng.Count

    Debug.Print FormulaResultCount
End Sub

コメントからのフォローアップ

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long

    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row

        Debug.Print Evaluate("=COUNTA(C1:C" & lRow & _
                    ")-COUNTIF(C1:C" & lRow & ","""")")
    End With
End Sub
于 2013-10-18T01:33:30.477 に答える
3

あなたが本当に望むかもしれないのは:

FormulaResultCount = Evaluate("CountA(C:C)")

評価コマンドについて学びました。それは素晴らしいです!

そして、それはあなたに3を与えます:)

于 2013-10-18T01:41:21.407 に答える
1

数式のみを使用して、VBA を使用せずにこれを行うことができます。

=ROWS(range)*COLUMNS(range)-COUNTBLANK(range)

VBA でこれを実行しようとしている場合は、次のように使用できます。

Function non_blank_cell_results_count(r As Range) As Long
  non_blank_cell_results_count = r.Cells.Count - WorksheetFunction.CountBlank(r)
End Function
于 2014-05-01T18:38:38.540 に答える