Robは、行または列に数式を含むセルの数を数える方法があるかどうか疑問に思いました。答えは、Excelの[移動]機能を使用すると非常に簡単です。次の手順に従ってください:

。カウントするワークシートを表示します。

。数式をカウントする行または列を選択します。

。 F5またはCtrl + Gを押します。 Excelに[移動]ダイアログボックスが表示されます。

。 [特別]ボタンをクリックします。 Excelは、[特別に移動]ダイアログボックスを表示します。

(図1を参照)

。 [数式]ラジオボタンが選択されていることを確認します。

。 [OK]をクリックします。

それでおしまい。 Excelは、数式を含む行または列のすべてのセルを選択します。 (手順2をスキップすると、Excelはワークシート全体のすべての数式を選択します。)画面下部のステータスバーに、選択されたセルの数が表示されます。 (図2を参照)

image

図2.ステータスバーには、選択したセルの数が表示されます。

何らかの理由でステータスバーにカウントが表示されない場合は、ステータスバーがカウントを表示するように構成されていることを確認する必要があります。

ステータスバーの空白部分を右クリックして、結果のオプションから[カウント]を選択するだけです。

Excel 2013以降のバージョンを使用している場合は、数式を使用して、次のようにセルの範囲内にある数式の数を計算することもできます。

=SUMPRODUCT(--ISFORMULA(A:A))

この例では、列Aのすべての数式の数を返します。数式内の異なる範囲のセルを同じように簡単に置き換えることができます。どの範囲を指定する場合でも、この特定の式を配置するセルを含めないでください。循環参照とエラーの可能性があります。

必要に応じて、マクロを使用してカウントを決定することもできます。次の例では、前の手順で手動で説明したのと同じアプローチを使用してカウントを決定します。

Sub CountFormulas1()

Dim Source As Range     Dim iCount As Integer

Set Source = ActiveSheet.Range("A:A")

iCount = Source.SpecialCells(xlCellTypeFormulas, 23).Count     ActiveSheet.Range("D1") = iCount End Sub

このサブルーチンは、列Aの数式を含むすべてのセルの数を非常にすばやく返し、その値をセルD1に詰め込みます。

このアプローチを次のようなユーザー定義関数に変換できると非常に役立ちます。

Function CountFormulas2(Source As Range)

CountFormulas2 = Source.SpecialCells(xlCellTypeFormulas, 23).Count End Function

ただし、これは機能しません。この関数は、数式を含むセルの数ではなく、常にソース範囲内のセルの数を返します。 SpecialCellsが関数で機能しないのは、ExcelのVBAの難解なバグです。サブルーチンでのみ機能します。マイクロソフトはこれ(私が見つけることができる)を文書化していないので、「制限」ではなく「バグ」として言及しています。

ただし、SpecialCellsメソッドで実行できることには実際の制限があります。最大8,192個のセルの範囲しか含めることができません。 (列全体を表示する場合のように)はるかに広い範囲を分析できますが、結果のサブセット(結果の範囲)には最大8,192個のセルしか含めることができません。それ以上含まれている場合、SpecialCellsは「失敗」し、元の範囲内のセルの数に等しい範囲(したがってカウント)を返します。

カウントを決定するためのユーザー定義関数を作成する場合は、SpecialCellsメソッド以外のものに依存する必要があります。

HasFormulaプロパティを使用するアプローチは次のとおりです。

Function CountFormulas3(Source As Range)

Dim c As Range     Dim iCount As Integer

iCount = 0     For Each c In Source         If c.HasFormula Then iCount = iCount + 1     Next     CountFormulas3 = iCount End Function

このマクロで列全体または行全体を評価することを選択した場合は、少し待つ準備をしてください。マクロが列または行の各セルをステップスルーするまでに時間がかかる場合があります。 SpecialCellsメソッドは、各セルをステップスルーするよりも、結果を導き出すのにはるかに高速です。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(13330)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。