|
▼えくせーる さん:
おはようございます。
間違いがあったので、再送です。
>ForやLoop等を使用しないで、A列のあるデータを検索し、
>なおかつその行番号を取得したいのですが、何か良い方法があったらおしえてください。
>
>●理由
>For文を使用しているのですが、VBAの実行速度が遅い。
>
>例)
>A列の「いちご」を検索して
>
>4と7の行番号を取得したい。(合致するデータが複数ある場合にも対応)
>
>行 | A列
>−−−−−−−−
>1 | りんご
>2 | みかん
>3 | すいか
><4>| <いちご>
>5 | メロン
>6 | なし
><7>| <いちご>
>8 | レモン
>9 | ぶどう
>10 | メロン
例のようにA1からデータが入っているとして、
コードは、「いちご」を検索し、その行番号をC列に表示します。
尚、B列は、作業列として使用しています。
'============================================================
Sub test()
moji = "いちご"
Set rng = Range("a1", Cells(Rows.Count, 1).End(xlUp))
With rng
.Offset(0, 1).Formula = "=if(rc[-1]=""" & moji _
& """,row(),"""")"
' 数式は 「=if(rc[-1]="いちご",row(),"")」がはいる
On Error Resume Next
Set ans = .Resize(, 2).SpecialCells(xlCellTypeFormulas, xlNumbers)
If Err.Number = 0 Then
ans.Copy
Range("c1").PasteSpecial xlPasteValues
Application.CutCopyMode = False
End If
On Error GoTo 0
.Offset(0, 1).Value = ""
End With
End Sub
こんな方法だとループコードを書かなくてもOKですが、
上記のコードはアルファベットの大文字と小文字の区別はしませんから
これの区別も必要なら、コード中の数式を変更しなければなりません。
尚、Findメソッドも有効な方法だと思いますが、
文字列の検索の場合、
例えば、A列に「苺」というデータが入力されていた場合、
「いちご」で検索しても「苺」を検索してしまうので注意が必要です。
(これで都合の良い場合もありますし、逆もあると思います)
Findは、フリガナも検索してしまうから・・・。
|
|