2012-05-11 7 views
0

次の実装を試行しているときに、タイプミスマッチエラーまたはゼロ除算が常に表示されます。範囲内の一意のエントリの数を数えたいだけで、クラス "テキスト:範囲内のユニークなエントリ数VBA

startRow = 3 
startColumn = 1 
col = "A" 
Set topCell = Cells(startRow, startColumn) 
Set bottomCell = Cells(Rows.Count, startColumn) 
If IsEmpty(bottomCell) Then Set bottomCell = bottomCell.End(xlUp) 
Set selectRows = Range(col & topCell.Row & ":" & col & bottomCell.Row) 
nRows = WorksheetFunction.CountA(selectRows) 

test = WorksheetFunction.SumProduct(WorksheetFunction.IsText(selectRows)/WorksheetFunction.CountIf(selectRows, selectRows)) 

私はテストのための計算にバグがありますが、私はそれを取得しません。いくつかのヘルプは非常にあなたの最初の問題は、あなたのtest計算のWorksheetFunction.CountIf(selectRows, selectRows)一部である

どうもありがとう

BR マーティン

+0

の数を数えることですVBAで?私はそれを使用して遊んできたし、VBA内のワークシート関数の同じ動作を得ることができませんでした – psubsee2003

答えて

0

を高く評価しました。重複がない場合は、ゼロ除算が行われます。これはワークシートに入力したときにも発生しますので、ロジックを変更するか、まずこのケースをテストする必要があります。

お客様のType Mismatch問題は、WorksheetFunction.IsText(selectRows)セグメントによって発生していると私は考えています。私はそれを引き起こしている何かを把握することができませんでしたが、私は私のコメントで述べたように、私はIsText()関数は、セルに入力されたときのようにVBAで範囲を取ることができないと思う。

おそらく、この問題は別の方法で解決します。ここに私が他に見つけた例がありますCount unique values in Excel これは主にワークシートの公式ですが、あなたがおそらく適応できるVBAコードで1つの答えがあります。

別のオプションは、 `IsText`は、ワークシート関数で` Range`オブジェクトを取りますが、私はそれが `Range`を受け入れるとは思わないコレクションを作成し、要素

Sub CountUnique() 
Dim Col As New Collection 
Dim i As Integer 

On Error Resume Next 

For i = 3 To 10 
    Col.Add Sheet1.Cells(i, 1).Value, Sheet1.Cells(i, 1).Value 
Next 

MsgBox Col.Count 

On Error GoTo 0 
End Sub