【Excel2003】VBAを使って指定した文字を検索する方法

このQ&Aのポイント
  • Excel2003を使ってVBAを利用して指定した文字を検索する方法について解説します。
  • 具体的な処理として、「あるセル」から見て最も近い、A列の「ある特定の文字が入っているセル」を検索しコピーし、別シートに貼り付ける方法を説明します。A列には複数の特定の文字が存在し、あるセルから最も近いセルを見つける方法を紹介します。
  • 例えば、「あるセル」をJ30とし、A列に存在する「時間」という文字を検索する場合の手順を詳しく説明します。J30から最も近いセルにある「時間」を検索し、それを別のシートのA1に貼り付ける方法です。
回答を見る
  • ベストアンサー

指定した文字を検索

エクセル2003を使っています。 VBAを使って文字を検索したいと思います。 (1)「あるセル」から見て最も近い、A列の「ある特定の文字が入っているセル」を検索しコピーし、別シートに貼り付ける。 (最初の「あるセル」というのはデータによって、セルの場所が変わります。但し、A列には入りません。 また、次の「特定の文字が入っているセル」というのは、データによってA列は変わりませんが、行番号は変わります。そして、特定の文字はA列に数個あります。そこであるセルから最も近いセルを検索するとします。) 例. 最初の「あるセル」をJ30とします。A列に入っている「時間」という文字を探すことにします。但し、「時間」というのはA列に数個あります。 そこで、「J30」から見て、最も近いセルの「時間」を検索してコピーし、別シートのセルA1に貼り付けます。 分かりにくいかもしれませんが、よろしくお願いします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんばんは。 Find メソッドの SearchDirection を xlNext, xlPrevious でそれぞれ 検索する方法でもできますよ。 Sub SampleProc()   Dim r1    As Range   Dim r2    As Range   Dim vKeyword As Variant   Dim n    As Long      ' // 検索文字の問い合わせ   vKeyword = Application.InputBox("ワイルドカードが使えます", _                   Title:="検索キーワード", _                   Type:=2)   If VarType(vKeyword) = vbBoolean Then     Exit Sub   End If      ' // 前方と後方にそれぞれ検索   Set r1 = Columns("A").Find(What:=vKeyword, _                 LookIn:=xlValues, _                 LookAt:=xlWhole, _                 SearchDirection:=xlNext)   Set r2 = Columns("A").Find(What:=vKeyword, _                 SearchDirection:=xlPrevious)      ' // アクティブセルより行番号が近い方をコピーする   If r1 Is Nothing And r2 Is Nothing Then     MsgBox "Not found.", vbInformation   Else     n = ActiveCell.Row     Set r1 = IIf(Abs(n - r1.Row) <= Abs(n - r2.Row), r1, r2)     r1.Copy Destination:=Worksheets("Sheet2").Range("A1")   End If End Sub > VBAを使って文字を検索したいと思います。 仕様の提示のみで、質問点が書かれていない気がしますが...

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

(1)Findを用いる。 たまたま質問の内容から、FindNextは不要でわかりやすいとおもう。下記方法では、第2の発見を求める必要が無い。 (2)この小生の思い付いたロジックの特徴は 中心(質問のJ20の場合はA列の第20行。下記コードではc)から上下プラスマイナスi 行の範囲を検索し、見つからなければ、次は上下とも各1行を増やして検索する。これを順次、限度まで繰り返す。初めて見つかった行が、中心から一番近い検索語所在の行であるといえる(<-ここがポイント)。限度はA列第1行と、データ最下行である。 ーーーーー Sub test01() Dim x As Range Dim st As Integer Dim ed As Integer d = Range("A65536").End(xlUp).Row 'A列データ最下行を求む s = Range("B1") '探索語あるセル 例 時間 t = Range("C1") '中心セル 例J20 c = Worksheets("Sheet1").Range(t).Row '中心セルの行番号を求む 'MsgBox c For i = 1 To 20 '---A列探索最上セル行番号stを求める If c - i > 0 Then st = c - i Else st = 1 End If '---A列探索範囲最下セル行番号edを求める If d > c + i Then ed = c + i Else ed = d End If '-----A列探索範囲指定。st上限セル、edは下限セル行番号 Range(Cells(st, "A"), Cells(ed, "A")).Select '--A列行番号st-edの範囲で検索語sを検索 Set x = Selection.Find(What:=s, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, MatchByte:=False, SearchFormat:=False) If x Is Nothing Then '検索語見つからずー>範囲を上下1行増やして検索 If st = 1 And ed = d Then '上限が第1行、下限がA列データ最下行に達しても '検索語が見つからず MsgBox "見つからず" Exit Sub '処理終了 Else GoTo p1 '範囲を上下1行広げて探索繰り返し End If Else r = x.Row '見つかった行を求める MsgBox r Exit Sub '目的達成終了 End If p1: Next i End Sub

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

こんな感じでしょうか? 一番近い位置を同じ行として、一行上、一行下、二行上、二行下・・・と探していきます。 Sub test1() Dim R As Long Dim Ofs As Long Dim i As Long Dim Pos As Long Dim word As String R = ActiveCell.Row 'どこかのセル word = InputBox("文字は?", "検索文字") Pos = 0 If InStr(Cells(R, 1), word) > 0 Then Pos = R Else For i = 1 To 65536 If R - i > 0 Then If InStr(Cells(R - i, 1), word) > 0 Then Pos = R - i Exit For End If ElseIf R + i <= 65536 Then If InStr(Cells(R + i, 1), word) > 0 Then Pos = R + i Exit For End If End If Next End If If Pos <> 0 Then Cells(Pos, 1).Copy Sheets("別シート").Range("A1") End If End Sub

関連するQ&A

  • EXCEL VBAで文字列の検索とコピー

    検索したい文字をinputboxで入力して、A列を検索して、検索文字を含むセルをコピーして、そのコピーしたデータを、別のシートに貼り付ける、次に該当したセルをさっきコピーしたデータの次の行に貼り付けて・・・。とデータが入力してある最終行までの繰り返し、をやりたいのですが、ご指導の程、説明が下手ですが宜しくお願いします!

  • エクセルVBAでセル結合

    いつもお世話になっています。 エクセル2003でVBAを使って下記をしたいのでその、VBA構文を教えて下さい。 特定の列のあるセルに文字が入っています。 (文字が入っている列は固定ですが、行番号はデータによって変わります。例えば、Aデータの場合は「J30」、Bデータの場合は、「J55」だったりします。) この文字が入っているセルをVBAで検索し、検索したセルを右隣のセルと結合します。(先ほどのAデータの場合、J30:Z30に結合します。) 更に、文字が入っているセルが2以上の複数の場合があります。(先ほどのAデータの場合、「J30」と「J40」と「J45」という感じです。文字が入っているセルの数はデータにより異なります。) 結合が終わり、このシートのデータがあるところだけに罫線を引きます。(このシートのデータというのは、前述の文字とそれ以外は、「数字」と「・」です。 ややこしいですが、よろしくお願いします。

  • VBAの

    VBAで特定の列で文字マッチングをして、ヒットした行をシートAからシートBにコピーしたいと考えています。 単にセルの値を全コピーするだけなら可能です。しかし、このときにシートAが何行、何列あるか分からない場合、可変長なシートAを特定の列で文字マッチングをして、シートBにコピーするためにはどのようにすればよいのでしょうか?

  • 検索した文字のセルを基準に範囲指定コピーのマクロ

    表題のマクロを教えてください。 検索範囲 シート1のA1:K100 検索する文字 ” 成績 ” コピーする範囲 見つかったセルの下の行から5行~10列まで全部。 貼り付ける場所 シート2のB1 宜しくお願いします。

  • エクセルで任意の文字を指定範囲から検索

    お世話になります。 エクセルにて特定のセルに入力した文字を指定してある範囲から検索し、指定した位置に表示をさせると言った事は出来るのでしょうか? 例 シート1:A1に検索したい文字を入力 シート2:A1~A50までの行を検索 シート1:上記検索で該当する行をA2~A50に表示 こういった検索は可能なのでしょうか? Ctrl+Fやフィルタではなく、セルに入力した文字を検索するようにしたいのです。 可否のみでも、こうゆうマクロを使えば出来ると言った事でも構いません。 よろしくお願いします。

  • vba 別シートからの複数検索

    ご教授ください。 エクセルで同じファイルにある別シートからsheet1のI列とJ列を検索する方法を教えてください。条件としては以下になります。 (1)sheet(6)にあるA1からA60に入力されている4桁から6桁の文字(A0000,A1000-2など)をsheet1のJ列から検索する。 (2)見つかったらsheet4にその行をコピーする。 (3)sheet(7)にあるA1からA1000に入力されている10桁の数字をsheet1のI列から検索する。 (4)見つかったらsheet5にその行をコピーする。 以上、よろしくお願い致します。

  • 文字列検索の参照文字列の指定について

    Excelでセルに任意の文字列をペーストします。そのセルは別のブックにリンクしているのでペーストする度にリンク先のセルでは文字列が更新されます。リンク先のブックにはワークシートが10あっていづれかのシートのA列にその文字列がある事になっています。更新された文字列を検索する作業を繰り返すのでマクロで組み込もうと思ったのですがFIND関数にしても、VBでCell.Find(What:=....と書くにも参照する文字列を直接指定してやらないと動きません。参照する文字列が相対的に変化するので「特定のセルの中に入力された文字列」を参照してブック内を検索したいということなのですが、実現するにはどうしたらようでしょうか?

  • Excel で特定の文字を取り出してその文字だけをコピーする方法

    VBAや関数に詳しくないので、というよりもExcelにあまり詳しくないので、とりあえずこうすればできるという方法を具体的に教えていただければと思います。 やりたいことは2つあります。内容はそれぞれこんな感じです。 (1) セルA1に”・・・・・・・○”  (・は任意の文字とします。)   セルA2に”・・・・・・・×”  (抽出したい文字は最後に来ます。) とあったとしたら セルB1に”○” セルB2に”×” というふうに特定の文字をコピーする。 それらの文字が含まれていなかったり、あってもそれが最後でなければ何もしません。 (2) (1)で作ったシートを他のシートにコピーしたとして、そのシートには列2に特定の文字○、×などが入っています(空欄の場合もあります。)。この中から列2の内容が×の行を削除します。 Officeについては詳しくありませんが C、C++やJavaなどは使っていたのでスクリプトについては読んでいるうちに慣れると思うのですが、肝心のExcelを使いこなしていないのでこれをマクロで保存した方がいいのか関数にしたほうがいいのかということもはっきりしていないレベルですのでその辺も交えて教えていただけるとありがたいです。 本来であれば自分である程度の勉強をしなければいけないのはわかっているのですが、急ぎということでよろしくお願いします。

  • EXCEL 検索条件をハイライト

    EXCELでシート1に A行に番号(型番)(A-1、A-2、A-3・・・・・)が入っています。 シート2のA行に検索条件になるリストがあります。 A-3、A-10 などなど この検索条件に合致したシート1のA行のセルをハイライトしたいのですが、良い方法はありますでしょうか? つまり、この場合、例えばVBAなら実行すると、シート1のA-3という文字列が入ったセルと、A-10という文字列が入ったセルがハイライト(背景の色が変わる)される、といった具合の結果を必要としています。 よろしくお願い致します。

  • EXCELで文字検索したセルの行と前後の行の削除の方法

    EXCEL-VBAを使ってワークシートのデータ整形をしています。 ある文字列を検索し、その文字列を含む行とその前後の行を削除するロジックを記述したいのですがうまくできません。 例:検索文字列「合計」、"合計"の入っているセル「B120」のとき、B119~B121の3行分の行削除をしたい。 おそらく検索された文字列を含むセルの行番号を取得してその番号-1と+1の行を選択して削除すればよいのではないかと思ってるのですが、もっと良い方法があるのでしょうか? よろしくお願いします。

専門家に質問してみよう