Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


55866 / 76736 ←次へ | 前へ→

【25636】Re:データ検索について
発言  ichinose  - 05/6/9(木) 7:38 -

引用なし
パスワード
   ▼えくせーる さん:
おはようございます。
間違いがあったので、再送です。


>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は、フリガナも検索してしまうから・・・。

0 hits

【25611】データ検索について えくせーる 05/6/8(水) 9:52 質問
【25612】Re:データ検索について IROC 05/6/8(水) 10:06 回答
【25613】Re:データ検索について えくせーる 05/6/8(水) 10:13 発言
【25632】Re:データ検索について ちゃっぴ 05/6/8(水) 23:09 回答
【25634】Re:データ検索について ちゃっぴ 05/6/9(木) 0:08 発言
【25635】Re:データ検索について ちゃっぴ 05/6/9(木) 0:19 発言
【25630】Re:データ検索について MokoMoko 05/6/8(水) 19:57 回答
【25636】Re:データ検索について ichinose 05/6/9(木) 7:38 発言

55866 / 76736 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free