• ベストアンサー

VBAマクロ・・同一セルの検索と検索したセルの操作

VBAマクロ・・同一セルの検索と検索したセルの操作  VBAのほぼ初心者です。  決められたセル(たとえばE100)に入力された文字列と同一の文字列を その列内の上(E1~E99)で検索する。 そして、検索できれば(たとえばE30)そのセルがある行(行30)を削除する。 なお、複数検索されれば、検索されたすべてのセルに対応する行を削除する。  というようなことをVBAのマクロで作成したいです。 FindメソッドとDo..Loop Whileを使って試行錯誤してみたのですが、うまくいきません。。  いい方法があれば、是非教えていただきたいです。  どうぞよろしくお願いいたします。

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

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

完全に寝ぼけた回答ですので前回の回答は無視してください。 (訂正版) Sub 行削除() Dim k As String, r As Range k = [E100]: Set r = [E1:E99] On Error GoTo er Do: r.Find(k, lookat:=xlWhole).EntireRow.Delete: Loop er: End Sub

monsika
質問者

お礼

早速ためしたところ、目的どおりのことができました! こんなに短い命令文でもよいとは驚きです。 本当にありがとうございました。

その他の回答 (3)

回答No.3

VBAでオートフィルタを使えば簡単ですが、Do~LoopとFindでもこれだけでOKです。 Sub 行削除() On Error GoTo er Do: [E1:E99].Find([E100], lookat:=xlWhole).EntireRow.Delete: Loop er: End Sub E100と完全一致の行なら→lookat:=xlWhole (現在のまま) E100と部分一致の行なら→lookat:=xlpart にしてください。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

ヘルプのFINDメソッドの使用例に手を加えて以下のような感じでいかがですか Sub test() Dim mSelectRow As String Dim c As Object With Worksheets(1).Range("E1:E99") Set c = .Find(Range("E100").Value, LookIn:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do mSelectRow = mSelectRow & c.Row & ":" & c.Row & "," Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With mSelectRow = Left(mSelectRow, Len(mSelectRow) - 1) Range(mSelectRow).Delete Shift:=xlUp End Sub

monsika
質問者

お礼

早速ためしたところ、目的どおりのことができました! 本当にありがとうございました。 これからもっと勉強していこうと思います。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> 決められたセル(たとえばE100) これをE1に、 > その列内の上(E1~E99)で これをE2~E100にしたほうがよいですよ。 > 複数検索されれば、検索されたすべてのセルに対応する行を削除する。 ならば、最終行から2行目に戻る方向で実行しないと、どこまで見たかわからなくなりますよ。

関連するQ&A

  • エクセルマクロ非表示セル検索法について

    Findメソッドでセルを検索し、行及び列番号を求めたいのですが、セルを非表示にしておくと検索できず求めることが出来ません。 非表示セルも可能にするにはどうすれば良いのですか? 列番号 = Cells.Find("キー").Column  ' 失敗 列番号 = Rows(1).Find("キー").Column ' 失敗

  • VBAの書き方

    只今VBAで、あるセルで文字を検索して、その文字があるときに、違うセルに文字を出すマクロを作っています。 例えば、エクセルのI列に記入されている文章に"VBA"という文字が入っているとき、M列に"YES"という文字を出したいです。 どのようなマクロの式を書けばこのような操作が出来るのでしょうか。 FINDやInStr関数を使えばよいのかと思いますが… どなたかお分かりのかたは、教えて頂ければと思います。 よろしくお願い致します<m(__)m>

  • VBA Excelのセル検索

    VBAで以下の要領でセルの検索をしています。 ------------------------------------------- dim getCell As String dim inputStr As String Windows("ExcelBook.xls").Activate Sheets("sheet1").Select inputStr = "58" getCell = Columns("C").Find(inputStr) ------------------------------------------- C列にある文字列を検索して、該当するセルの行番号を取得したいのですが、その検索する「文字列」は数字なんです(0~9000までで重複しません)。 上の方法で実行すると、inputStrに代入した数字をgetCellが持ってしまうのですが・・・ 色々考えているのですが分かりません。 どなたか教えて頂けませんか?よろしくお願いします。

  • VBA/FIND関数を使っての先頭文字列の検索方法

    エクセルVBAにてFIND関数を使って、 文字列検索⇒コピー&ペーストのマクロを作成しているのですが、 どうしても、先頭文字列から検索をする方法がわかりません。 たとえば、 あいうえお いうえおあ おあいうえ えおあいう という文字列から「あいう*」を検索したい場合、 1行目だけを抽出したいのですが、 1,3,4行目が抽出されてしまいます。 find関数では先頭文字からの検索はできないのでしょうか? もし、不可能な場合、先頭文字からの検索を行うにはどのように行えばよいでしょうか? アドバイス、よろしくお願いいたします。

  • エクセル マクロ 検索

    お世話になります。 範囲がA2からK221までの表があります。 検索して検索されたセルの左のセルを表示するマクロを組みたいのですが、検索する文字(数値)はE1に、検索結果はK1に表示するようにするにはどのようにしたらいいでしょうか? Sub FIND_DATA1() ' FIND_DATA1 Macro ' マクロ記録日 : 2006/9/1 ユーザー名 : ' Cells.Find(What:=Range("E1").Value, After:=ActiveCell, lookAt:=xlWhole).Activate End Sub Sub Data_Find3() Dim 対象セル As Range Dim 最初のセル番地 As String Dim 検索件数 As Long Cells.Interior.ColorIndex = xlNone If Range("E1").Value = "" Then Exit Sub End If Set 対象セル = Cells.Find(What:=Range("E1").Value, After:=ActiveCell, lookAt:=xlWhole) 最初のセル番地 = 対象セル.Address Do 対象セル.Interior.ColorIndex = 37 検索件数 = 検索件数 + 1 Set 対象セル = Cells.FindNext(対象セル) Loop While 対象セル.Address <> 最初のセル番地 MsgBox "検索件数は" & 検索件数 - 1 & " 件です" End Sub 本を見たり調べたりでここまでできたんですがこれだと検索件数、検索結果が色付きになるだけで使い勝手がいまいちです。 よろしくお願いします。

  • [初心者です]VBAで指定列からAを検索し、発見したら隣のセルに値0を入れるマクロ。

    VBAで指定列からAを検索し、発見したら隣のセルに0を入れるマクロを組みたいのですが、組み方がVBA初心者の為わかりません。 (例) L列に、A、B、C、D、E、Fとランダムに文字が入っていて、 文字Aを検索し、発見したら隣のI列に値0を入れるというマクロです。 Sub Search() Dim A As String Set A = Worksheets("Sheet1").Cells.Find("A") If A Is Nothing Then ActiveCell.Offset(0, 1).Value = 0 End If End Sub と過去の質問で考えてみたのですが、Aがあった時、、、、 とコードが書けないです。 大変困っているので、ご教授頂けないでしょうか? 出来れば、そのままマクロに出来るコードを教えて頂けないでしょうか? 宜しくお願い致します。

  • ある条件を満たすセルに対応する行のセル内容をコピーして・・

    ある条件を満たすセルに対応する行のセル内容をコピーして・・  いつもお世話になっております。エクセルVBAのほぼ初心者です。 ある列の一部(たとえばE100~200)において、ある条件を満たすセル(たとえば<30)を すべて検索して(たとえばE110とE130)、そのセルの行にある別列のセル内容(たとえば A110とB110、およびA130とB130)をコピーして、別のワークシートのとある場所(たとえ ばB2)に貼り付ける。  というようなマクロを作成したいのですが、自分の力量では難しいのです。。  Do~Loopなどを利用すればよいのでしょうか?  いい方法がありましたらどうぞよろしくお願いいたします。

  • VBAについて。セルにあわせてマクロを変更したい。

    VBAを使い、yahooの路線検索を閲覧しています。 出発地 目的地 府中 桜上水 【ボタン】 新宿 御徒町 【ボタン】 日暮里 巣鴨  【ボタン】 A列のセルを出発地 B列のセルを目的地 にそれぞれ入力しています。 C列の【ボタン】を押すとマクロが動くようにしたいと思っています。 下記のマクロの『Range("")』の部分を 3行目の【ボタン】をクリックしたら 『Range("A3")』 『Range("B3")』 に 4行目の【ボタン】をクリックしたら 『Range("A4")』 『Range("B4")』 に・・・ としたいと思っています。 200行近くあるので、ひとつひとつマクロを作成するのはとても大変で、色々と調べたのですが、どうにも解らず、助けを求めにきました。 また… 【ボタン】に関しても、特に意味はなく、使いやすいかなと思った程度ですので、同じような使い方をしている方で、便利にしようする方法などありましたら教えていただければと思います。 ------------------------------------------------------------------- Sub 路線検索() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://transit.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop objIE.Document.all("from").Value = Range("A2").Value objIE.Document.all("to").Value = Range("B2").Value objIE.Document.all.tags("input").Item(17).Click End Sub -------------------------------------------------------------------

  • エクセルのVBAについて質問です。

    エクセル2003のVBAについて質問です。 複数の検索したい文字列があり、複数の検索対象セルがあります。 セルの文字列が検索文字列のいずれかと一致したセルの背景の色を変えたいです。 よろしくおねがいします。 仕事でマクロを組まなけばならなくなってしまったのですが、 初心者のため検索してみたり調べてみたり、参考にして作ってみたのですがうまくいかないばかりかどんどん解らなくなってしまいました。 どうか助けてください。 sheet1のセルが検索対象 (全セル対象でも大丈夫ですが、検索したいセルはB2→J2、B11→J11、B20→J20の範囲です)、 sheet2のA列に検索したい文字列が入力されています。 この検索したい文字列は今後増えていく可能性があるので、増えた場合にも対応できるようにと考えています。 sheet1(検索対象) あ い う え あ お お sheet2(検索文字列) あ う お け き ↑の様に入力されており、sheet1の「あ」と「う」と「お」のセルの背景を変えたいです。 色を変えたいのはsheet1です。 findメソッドや繰り返し処理などを調べて実践してみたのですが、 いきなりマクロを組めといわれた超初心者には難しく質問しています。 自分でやってみたのですが、 sheet1の最初の「あ」のみが変換され、後に出てくる「あ」が変換されません… どうしたらいいのか…どうすることも出来ず困っております。 すみませんが、どなたか優しい方助けてください。 よろしくおねがいします><

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

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

専門家に質問してみよう