2013-07-19 73 views
8

すべてのことが好きなので、これを動作させることはできません。私は上記のエラーが発生し続けます。Excel VBA:一致が見つかりません。エラー "WorksheetFunctionクラスのMatchプロパティを取得できません"

私はこのテーブルを持っていますが、コードがそれ自身のサブコードと一致するかどうかを調べようとしていますが、間違っています。あなたの助けが大変ありがとうございます。

enter image description here

Sub testing() 

    Dim m1 As long 
    Dim myrange As Range 

    Set myrange = Worksheets("Sheet1").Range("B2:B23") 

    For e = 2 To 23 
     m1= Application.WorksheetFunction.Match(Cells(e, 1).Value, myrange, 0) 

     If m1 > 0 Then 
      Cells(e, 3).Value = "Yes" 
     Else 
      Cells(e, 3).Value = "No" 
     End If 
    Next e 

MsgBox "Complete!" 

End Sub 
+0

Davidの答えは正しいですが、なぜ列Cに数式を入れるだけではないのですか? –

+0

こんにちはDoug、私は後でやりたいと思っている他の関数と一緒にこれを使う必要があります。私はVBAコードでしかうまく実行できません。 –

答えて

14

したエラーをトラップより良い能力を可能Application.Match機能を使用してください。 WorksheetFunction.Matchを使用すると、一致するものが見つからない場合は、エラーが返されます。これは発生しているものです。これらのアプローチのどちらがm1変数を使用する必要があります

If Application.WorksheetFunction.CountIf(myRange, Cells(e,1).Value) > 0 Then 
    Cells(e,3).Value = "Yes" 
Else: 
    Cells(e,3).Value = "No" 
End If 

、あなたはIf/Then文のTrue一部以内にこの変数を割り当てることができ、場合:あなたはまた、潜在的にCountIf機能を使用することができます

If Not IsError(Application.Match(Cells(e, 1).Value, myrange, 0)) Then 
    'Do stuff when the match is found 
    Cells(e, 3).Value = "Yes" 
Else: 
    Cells(e, 3).Value = "No" 
End If 

を特定する必要があります。が見つかりました。

+0

ありがとう、これはうまくいった!とても有難い。 –

+0

簡単な質問:セル内の値の一部に「一致」させたい場合は、どのような機能を使用しますか? –

+0

部分一致の複雑さによって異なります。たとえば、 "steve"で始まるセルの数を数えたり、 "CountIf"関数の2番目の引数が '' steve * '"のようになるなど、シンプルなものかもしれません。 "steve"という言葉を使うと、 "* steve *" 'などを使うことができます。もっと複雑で、正規表現を使うことができます。 –

2

もう1つのオプションと同じように、セルC2に下の数式を置き、C23までドラッグすることでもこれを行うことができます。

=IF(COUNTIF($A$2:$A$23,B2)>=1,"YES","NO") 
+0

+1、これは、VBAのいくつかの魅力的な理由がない限り、行く方法です。 –

+1

別のコードセットの一部で使用する一致を見つけようとしています。 –

関連する問題