• ベストアンサー

[マクロ]高速な検索方法

以下のマクロを作成しようと思っています。 (1)シート1のセルA1の値を変数に格納 (2)シート2のセルA1~A100の中で変数を等しい値を検索 (3)見つかったセルの右に"成功"を入力 ※(1)~(3)を複数回繰り返す(検索値が毎回変わります。) 現在は、 (1)A1を変数に格納 (2)シート2のセルA1~A100を範囲選択 (3)マクロの自動記録で作成したCtrl+Fの検索を実行 (4)見つかったセルをアクティブにする (5)アクティブセルからの相対指定で成功を記入 としています。 これだとものすっごく時間がかかってしまうのです。。。。 なんとか早くやる方法はありませんでしょうか。 ご教授お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

Sub ニ分探索と関数で() 'Sheet2はA1:A100を基準に昇順で並び替える必要があります 'マクロで実行して、実行後元に戻せば良いと思います。 'VBA不得意なためB1セルを作業セルとします(^^; Dim i As Long Range("B1").Formula = "=MATCH(A1,Sheet2!A1:A100)" i = Range("B1").Value If Worksheets("Sheet2").Cells(i, 1) = Range("A1").Value Then _ Worksheets("Sheet2").Cells(i, 2) = "成功" Range("B1").Clear End Sub 少なくとも順次探索より速いかなあ?

その他の回答 (4)

  • 374649
  • ベストアンサー率38% (203/527)
回答No.4

Sheet1のセル"A1"にデータを入れて実行すればSheet2の該当B列のセルに”成功”と表示されます、変数は使ってません。 Sub 検索() Dim i As Integer Sheets("Sheet2").Select For i = 1 To 100 If Cells(i, 1) = Sheets("Sheet1").Cells(1, 1) Then Cells(i, 2) = "成功" End If Next i Sheets("Sheet1").Select End Sub こんな物でどうでしょうか!!!

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.3

わざわざマクロを使用するまでもなくNo1さんの回答のように関数式を利用すればA1セルの内容を変えると瞬時に実現されます。 マクロの勉強をしたいのならそれほど難しいマクロではないので試行錯誤しながら作成するべきです。 動作は A1セルをアクティブにする A1セル内容を変数に収納 ●OFFSETでアクティブセルの移動 アクティブセル内容と変数が等しければOFFSETで隣のセル内容に"成功"を挿入 ●にループ 上記動作をマクロ化するだけです。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

>※(1)~(3)を複数回繰り返す(検索値が毎回変わります。) ここがどうなっているのかによって、決まってくる物だと思いますが。 例えばSheet1のA列を配列に放り込んで、Sheet2のA1~A100の値を 順次取得し配列内にあるか判断する。 あった場合には取得したデータ行の隣のセルに”成功”と代入する。 と言う事とは違うのでしょうか?

  • ESE_SE
  • ベストアンサー率34% (157/458)
回答No.1

マクロというかExcel関数の使用なので手作業が入りますが。 B1セルに =IF($A$1=A1,"成功","") と記述してセル内容をB列に貼り付ければ良いのではないかと。 さらに完了後、B列の内容をコピーしてC列に値貼り付けすれば 純粋なテキストとして取得できます。

関連するQ&A

専門家に質問してみよう