2013-01-08 21 views
6

excelで特定の行の文字列を検索するにはどうすればよいですか?私はロングタイプの変数に行インデックスを持っています。VBAマクロを使用してExcelの行と完全に一致する文字列を検索する

ここで、特定の値が行に存在するかどうかを調べる必要があります。インデックスはrowIndexです。

一致がある場合は、最初に一致するセルのインデックスを取得する必要があります。

私はMatch関数を使用しようとしましたが、セル範囲の代わりにrowIndex変数を渡す方法はわかりません。

Dim colIndex As Long  
colIndex = Application.Match(colName, Range("B <my rowIndex here>: Z <my rowIndex here>"), 0) 

答えて

11

これを試してみてください。彼らはすでにExcelのオブジェクトライブラリに記載されているよう

Sub GetColumns() 

Dim lnRow As Long, lnCol As Long 

lnRow = 3 'For testing 

lnCol = Sheet1.Cells(lnRow, 1).EntireRow.Find(What:="sds", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column 

End Sub 

は、おそらく最高のは、変数名としてcolIndexおよびrowIndexには使用しません。

+0

Findを使用していると聞いたのが、一般にMatchよりも遅いです。私はマッチの例を探しています。 –

+1

正確に一致するものを見つけるには、 'xlPhot'を' xlWhole'に置き換える必要があります。 – phil652

+0

素晴らしいです。ありがとう。 – fapw

0

worksheet.find(ワークシートはワークシート)を使用し、その範囲オブジェクトにrow-rangeを使用します。 rangeobjectを次のように取得できます:worksheet.rows(rowIndex)as example

次に、必要なパラメータが見つかるはずです。 正しく検索した場合、findはデフォルトの最初の一致を返します。 私は手元にExcelはありませんのでご迷惑をおかけいたします。

for-loopを使用することはお勧めしません。

0

心配しないで、私は答えを見つけました。

これはトリックを行います。

Dim colIndex As Long  
colIndex = Application.Match(colName, Range(Cells(rowIndex, 1), Cells(rowIndex, 100)), 0) 
0

これは既にあなた自身を助けてくれた別のコードではありません。 VBAでExcel機能を使用する場合はののパフォーマンスをご覧ください。

  • Error handling on Match

  • Match() is faster for smaller number of search, but it isn't when it compared to a large number of data. And in that instance you may consider a variant array/dictionary/arrayList approach depending on if you want to sort, you want to have duplicates or not..

    PS:あなたがpattern matchingを行いたい場合 **後者のノートで、あなたはScriptingObject **Regexを考慮することができます。

    関連する問題