2016-05-01 2 views
1

私のワークブックに値(バリアント)strCompanyがあります。この値が別のワークブックの列A、tmp_workbookに存在するかどうかを調べたいと思います。存在しない場合は、メッセージボックスが必要です。次のコードは意味がありますか(コードの前半にtmp_workbookとstrCompanyという変数を定義しています)?おそらくあなたはより良い方法を提案できますか?vbaを使用した検索の実行

On Error GoTo ErrorHandler 

    Set value_exists_in_table = tmp_workbook.ActiveSheet.Range("A1:A100000").Find(strCompany) 

    ErrorHandler: 
    Select Case Err.Number 
      Case 9, 91 
       MsgBox "The company " & strCompany & " was not found." 
      Exit Sub 

    End Select 
+0

Arjun、あなたの問題を詳述できますか?どこに問題がありますか?私はドキュメンテーションを使うことをお勧めします。 Range.Findメソッド[状態](https://msdn.microsoft.com/EN-US/library/office/ff839746.aspx)のドキュメントで、一致するものが見つからない場合、Findは 'Nothing'を返します。それ以外の場合は、 "その情報が見つかった最初のセル" – miha

答えて

0

Range.Find methodは、最後に使用されたときから多くのパラメータを継承します。ワークシート上のユーザによって一般に使用されます。 LookAt:xlWholeまたはLookAt:xlPartおよびLookIn:=xlValuesまたはLookIn:=xlFormulasのような一般的に使用されるいくつかのパラメータを明示的に指定する必要があります。

通常は、1行または1列の完全一致を確認します。 Excel ApplicationオブジェクトのネイティブMATCH functionは、値を見つける優れた仕事をします。

dim rw as variant 
with worksheets("Sheet1") 
    rw = application.match(strCompany, .Columns(1), 0) 
    if not iserror(rw) then 
     value_exists_in_table = .cells(rw, 1).value 
     debug.print value_exists_in_table & " found in row " & rw 
    else 
     debug.print "The company " & strCompany & " was not found." 
    end if 
end with