次のコードは、2010年より前のExcelで機能します。
myRange = Range("A:A")
NumRows = Application.CountA(myRange)
列Aにテキスト/値を含むセルが38個あります。Excel2007でコードを実行すると、NumRowsは38と正しく評価されますが、Excel 2010では(間違って)65,536と評価されます。
セル内にCountA
関数を入力すると、両方のバージョンで正常に機能します。
同様のスレッドは question 16696891 ですが、答えはなく、提案は赤いニシンだったと思います...
何か案は?
あなたのコードが書かれた通りに動作することができないので、私はあなたの問題が何であるか正確にはわかりません。次の2つのことが明らかです。
Range
の型をmyRange
に割り当てる必要があります。 Range
型はVBAのオブジェクトであるため、次のようにSet
である必要があります:Set myRange = Range("A:A")
CountA()
の使用は、.WorksheetFunction
で呼び出す必要がありますまだ行っていない場合は、モジュールの上部でOption Explicitオプションを使用し、以下で行ったように、Dim
ステートメントで変数を入力することを検討してください。
次のコードは2010年に私のために機能します。うまくいけばそれもあなたのために機能します:
Dim myRange As Range
Dim NumRows As Integer
Set myRange = Range("A:A")
NumRows = Application.WorksheetFunction.CountA(myRange)
がんばろう。
別のフォーラムからのこの回答は問題を解決しました。
(ここに表示されている「I:I」を独自の範囲に置き換えてください)
再:CountAはVBAで動作していません
Should be:
Nonblank = Application.WorksheetFunction.CountA(Range("I:I"))
You have to refer to ranges in the vba format, not the in-Excel format.
このコードは私のために働く:
Sub test()
Dim myRange As Range
Dim NumRows As Integer
Set myRange = Range("A:A")
NumRows = Application.WorksheetFunction.CountA(myRange)
MsgBox NumRows
End Sub
Application.COUNTAがVB7とVB6で動作する方法に変更があるようです。 VBの両方のバージョンで次を試しました。
ReDim allData(0 To 1, 0 To 15)
Debug.Print Application.WorksheetFunction.CountA(allData)
VB6では、これは0を返します。
インVB7 32を返します
VB7はもうCOUNTAをCOUNTAと見なしていないようです。
明らかな場合もありますが、範囲を指定し、どのワークブックまたはワークシートも含めない場合、別のシートでCountA()を実行しようとする場合があります。これらのことを完全に解決することで、頭痛の種を大幅に減らすことができます。