• 締切済み

文字列の逆検索

VBAを勉強中の初心者です。 アから始まる文字があったら、逆から連続で検索して その都度、セルをselectしたいのですが どのように書いたらよいでしょうか? Dim a1 As string  Set a1 = Range("B3:B8").Find(What:="ア*", SearchDirection:=xlPrevious) Do  If Not a1 Is Nothing Then Set a1 = Range("B3:B8").FindPrevious(After:=a1) ・・・? お手数ですが、よろしくお願いいたします。

  • mmegg
  • お礼率86% (573/662)

みんなの回答

回答No.1

まずFind メソッドをヘルプなどで調べましたか。 このメソッドはRange オブジェクトを返します。なので Dim a1 As string これはアウトですね。 それとヘルプには最初のセルが見つかった後、 次のセルを検索しに行くといったサンプルも書かれていますよ。

mmegg
質問者

お礼

ヘルプは真っ先に見て、参考にしてみたのですがわかりませんでした。 Rangeを返すから、当然変数もRangeになりますね。 そうだよなぁと気づきました。再度考えます。 ご回答、ありがとうございます。

関連するQ&A

  • マクロ findを使用しての列番号検索

    いつも回答して頂き、とても感謝しています。 質問内容ですが、 FINDを使用して列番号を検索する時、FINDでセル位置を取り出し、そのセル位置を元に列番号を取り出しています。FINDの記述部分で列番号を検索するにはどうしたらよろしいのでしょうか?宜しくお願い致します。 Dim 項目1 As Range Dim c1 As Long If Application.CountIf(Rows(4), "みかん") = 1 Then Set 項目1 = ws2.Rows(4).Find(what:="みかん", LookIn:=xlValues, lookat:=xlWhole, _ SearchOrder:=xlByColumns, searchdirection:=xlPrevious) c1 = 項目1.Column End If

  • Selectした範囲の最終セルの1つ下を選択

    よろしくお願いします。 Dim R As Range Dim rr As Range Set R = Columns("H").Find("○", After:=Range("H" & Rows.Count)) Set rr = Columns("H").Find("○", After:=R, SearchDirection:=2) Range(R, rr).Select で、Selectした範囲内の最終セルの1つ下を選択したいのですが ご存知の方、ご教示をお願いします。

  • EXCELマクロのこの記述の意味を教えてください。

    こんにちは。 以前、教えてもらったマクロですが もう少し深く勉強したいので、記述の 意味(翻訳?)を教えてください。 Sub Test5() Dim FR1 As Range, FR2 As Range With ActiveSheet Set FR1 = .Cells.Find( _ "*", , xlValues, xlWhole, xlByRows, xlPrevious) Set FR2 = .Cells.Find( _ "*", , xlValues, xlWhole, xlByColumns, xlPrevious) End With Range("A1", Cells(FR1.Row, FR2.Column)).Select Set FR1 = Nothing: Set FR2 = Nothing End Sub また、この範囲をA列だけを見る場合、つまりA列の最終行を範囲とする場合は、どう記述すればよいのでしょうか? ぜひ、教えてください。

  • 文字ではなく数字で比較

    下のマクロで列を比較しますが,2358と12358が同じ文字になります. 下の文字を数字に変えたいです. Sub 比較して色を付ける() '比較部分 Dim RetRange As Range Range("D2:D35323").Select For i = 1 To 35323 Set RetRange = Selection.Find(What:=Cells(i, 4).Value, _ after:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, _ SearchDirection:=xlNext) If Not RetRange Is Nothing Then If RetRange.Address <> Cells(i, 4).Address Then RetRange.Interior.ColorIndex = 6 Cells(i, 4).Interior.ColorIndex = 6 End If End If Next END Sub マクロは全然知らない初心者です. よろしくお願いします.

  • エクセルVBAの実行スピードが落ちます

    エクセルで検索を行うVBAを使用していますが、エクセル立ち上げ時はサクサク動きますが、検索を繰り返し使っていくと、実行速度が落ちてしまいます。 エクセルを再起動すれば、元どおりの速さに戻ります。 何が原因でしょうか?どうすれば防ぐことはできるでしょうか? よろしくお願い申し上げます。 実行環境 WindowsXPproSP3 Pen4 3.0Ghz メモリ1GB HDD80GB Office2003 VBAの検索部分 Function Kensaku3(Key1 As String, Range1 As String) As Long '縦方向の検索   Dim myRng As Range   Dim Job1 As String   Dim Col1 As Long   Dim Row1 As Long   Col1 = Range(Range1).Column   Row1 = Range(Range1).row   Cells(Row1, Col1).Select   Set myRng = Range(Range1).Find(what:=Key1, _     After:=ActiveCell, LookIn:=xlValues, _     LookAt:=xlPart, SearchOrder:=xlByRows, _     SearchDirection:=xlNext, MatchCase:=False)   If myRng Is Nothing Then     Kensaku3 = 0   Else     Kensaku3 = myRng.row   End If   Set myRng = Nothing End Function

  • エクセルVBAの連続検索

    エクセルVBAで、textbox内に入力した参加者の名前を検索しチェックを入れる作業を行いたいです(集会の受付名簿用)。findnextを使っても無限にループするか、同姓の最初の一人しか検索できずに困っています。 Dim 検索セル As Range Dim 最初のセル As String Dim 次の候補 As Range 検索対象文字 = Range("h2").Value Set 検索セル = Range("a5:B100").Find(検索対象文字) If Not 検索セル Is Nothing Then 最初のセル = 検索セル.address Do 検索セル.Select Set 次の候補 = Range("a5:b100").FindNext(after:=検索セル) Loop Until 次の候補.address = 最初のセル End If 手直しをお願いしますTT

  • 完全に一致する文字列を検索するマクロ文

    For Each rng In Range("B1:B21200") If rng.Value <> "" Then Set out = Range("A1:A2100").Find(rng.Value) If Not out Is Nothing Then igo = out.Address End If Do While Not out Is Nothing out.Font.ColorIndex = 3 Set out = Range("A1:A2100").FindNext(out) If igo = out.Address Then Exit Do End If Loop End If Next このマクロはRange("B1:B21200")でRange("A1:A2100")を検索し一致する文字列を赤文字(A列の文字)にするのですが このマクロだと、あいまいな検索になってしまいます。 完全に一致する文字列のみ赤文字にするマクロ文を知りたいのですが。

  • エクセル VBA

    Dim h As Range If Application.CountIf(Range("p:p"), 5) = 0 Then Exit Sub Set h = Range("p:p").Find(what:=5, LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious) Range(Range("p2"), h).EntireRow.Delete Shift:=xlShiftUp 上記のマクロは、「2行目から、P列の数値が5の最下の行までを削除する」という内容です。 この5の部分を、<0(0未満)に変えたいのですがわかりません。 どうぞ教えてください。

  • 検索のループについて

    いつもお世話になっております。 F列に”s”という値がついたセルがあれば、インプットボックスでAかBを入力したいです。 下記は、1つのセルだけなら機能するのですが、複数になると2つ目から動きません。 よろしくお願いいたします。 Sub 検索() Dim Rng Sheets("全愛知県").Select Columns("F:F").Select Selection.Find(What:="s", After:=Range("F1"), LookIn:=xlValues, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext).Activate Rng = Application.InputBox(Prompt:="「A」か「B」を入力してください。") ActiveCell.Offset(0, -4).Select ActiveCell = Rng End Sub

  • 特定文字列を含む行を削除するマクロ

    すみませんどなたか教えてください。 エクセルで商品の在庫管理をしておりまして、AP列に製品メーカー名が入っているのですが、 いくつかの(数十個)メーカーを省き削除したく思い、以下のようなマクロをググって作ってみましたが、 上手く動きませんでした。 1つのメーカーだけ記載した場合はうまく動きました。 やりたいことは1つのマクロの中に、数十個のメーカー名を記入しておき、そのメーカーを全件 検索して、AP列に文字列が含まれる場合は、その行を削除したいです。 宜しくお願い致します。 ~~~~~~ Sub DelLines1() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="softbank", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop Sub DelLines2() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="docomo", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop Sub DelLines3() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="au", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub

専門家に質問してみよう