• ベストアンサー

エクセルで特定の行をマクロで削除したい。

Sub DelLines() Dim R As Range Do Set R = ActiveSheet.Range("A:A").Find(What:="ここにキーワード", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub 上記のソースだと一つのキーワードだけなのですが、複数のキーワードを追加したいのとブック全体(複数のシートから検索)で実行させたいのですが教えていただけませんか?

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

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

例えば、a,b,cを探すなら Sub try() Dim ws As Worksheet Dim r As Range Dim v For Each ws In Worksheets For Each v In Array("a", "b", "c") Do Set r = ws.Range("A:A").Find(What:=v, LookAt:=xlPart) If r Is Nothing Then Exit Do r.EntireRow.Delete Loop Next Next End Sub とか?

goo0607
質問者

お礼

ありがとうございました。思っていたのと違うかったので、もう一度マクロ勉強しなおします・・・

その他の回答 (4)

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

質問のコードでは、そのキーワードが複数出現するデータなら、最初しか削除できないのでは。FindNextお勉強のこと。 ーー >ブック全体 1つのブックの全シートの意味か。 フォルダのエクセルブックの全体とかの意味か。 プログラマは表現に敏感であれ。 ーー >複数のシート これもあるブックで、10有るシートのうちの3つとかの意味か。全シートの意味か。 前者は Sub test01() Dim sh As Worksheet For Each sh In Worksheets(Array("Sheet1", "Sheet3", "Sheet4")) MsgBox sh.Name '本来は各1シート分の処理のコードを入れる Next End Sub 後者は Sub test02() Dim sh As Worksheet For Each sh In Worksheets MsgBox sh.Name '本来は各1シート分の処理のコードを入れる Next End Sub ーー フォルダの全ブックは、VBSを使う場合(他にDir関数を使うなどもある) Sub test03() infolderName = CurDir Set objfs = CreateObject("Scripting.FileSystemObject") Set fsoFolder = objfs.GetFolder(infolderName) For Each file In fsoFolder.Files 'Foler内のファイルを列挙する Fname = file.Name MsgBox file.Name If objfs.GetExtensionName(Fname) = "xls" Then '拡張子xlsを判定 MsgBox fsoFolder & "\" & Fname End If Next End Sub ーー 指定ブックを開く場合 CurDirの中のファイル2つとして Sub test04() For Each bn In Array("01化.xls", "book1.xls") MsgBox bn Workbooks.Open bn MsgBox Workbooks(bn).Worksheets(1).Range("A1") Workbooks(bn).Close Next End Sub ーー それぞれを適当に入れ子にしてコードを作る。

goo0607
質問者

お礼

表現が微妙であったことをお詫びいたします。 一つのブックの全てのシートに適用でした。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.4

>もちろんもっと簡潔な方法もあるとおもいます。 てn-junさんがすでに提示されてますね。 失礼しました。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.3

Or検索ですね。 私は、こういう場合はLike演算子を使います。 If A Like "*AA*" Then で、変数Aに"AA"が含まれていたら、という意味になります。 これを検索キーワードの分だけ繰り返します。 最初はFalseにしておき全て含まれていたら、Trueとすればいいです。 もちろんもっと簡潔な方法もあるとおもいます。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

>複数のキーワード たとえば、 AA BB というキーワードだとしたら、AA、BBとも含まれているのか、 AA、BBいずれかが含まれていたら、なのか不明です。

goo0607
質問者

補足

AA,BBいずれかが含まれていたらです。説明不足ですいませんでした。

関連するQ&A

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

    すみませんどなたか教えてください。 エクセルで商品の在庫管理をしておりまして、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

  • エクセルで特定の行を削除(特定文字が複数)

    http://okwave.jp/qa/q2692757.html に後述のマクロが紹介されていますが、 特定の文字が、"XXX"以外に、複数ある場合はどのようにすればよいか教えてください。 "XXX" and/or "YYY" and/or "ZZZ" の例で教えていただけませんか。 Sub DelLines()   Dim R As Range   Do     Set R = ActiveSheet.Range("B:B").Find(What:="XXX", LookAt:=xlPart)     If R Is Nothing Then Exit Sub     R.EntireRow.Delete   Loop End Sub

  • 特定文がある行を削除

    特定分がある行を削除しようと思い、以下のように設定いたしました。 Sub DelLines() Dim R As Range Do Set R = ActiveSheet.Range("A:A").Find(What:="指定文", LookAt:=xlWhole) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub これを、全てのシートに適用するにはどのように書けばよろしいのでしょうか?

  • 行の削除

    列Kに、削除という文字が入っている場合は、その行を削除するということで、3000行くらいあるなかで3分の2程度は削除する行に該当します。 下のマクロで試してみましたが、このマクロではとっても時間がかかってしまうんですが、どうしたら早く処理できるのか教えて下さい。 Dim R As Range Do Set R = ActiveSheet.Range("K:K").Find(What:="削除", LookAt:=xlWhole) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop

  • エクセルについて

    ある表より特定の文字が入力されている行を削除したいと考えております。過去を参照し下記のようなマクロを取り入れたいと思いました。 Sub macro1() Dim R As Range Do Set R = ActiveSheet.Range("F:F").Find(What:="削除したい文字列", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub ここで質問です。F列に削除したい文字列がいくつかある場合上記をどのように改良すればよいでしょうか。ご教示の程よろしくお願い致します。

  • EXCEL 2つの特定の文字列がある行を残して削除

    EXCELにて2つの特定の文字列が含まれる行を残して削除したいと思っております。 A列50行にそれぞれ"年賀状""喪中""名刺"がランダムに羅列されていて、その中から"年賀状"と"喪中"の行だけを残して"名刺"の行は削除したいと思ってます。(B列以降は注文番号、枚数、氏名等が入力されています) 以下のコードで1つだけは可能でしたが、色々試しても2つはできませんでした。(コードは拾い物を少しアレンジ) Sub MacroTest1()   Dim keyWord As Variant   Dim FirstAdd As String   Dim UR As Range   Dim c As Range   Const col As Long = 1 '列数   keyWord = "年賀状"   If VarType(keyWord) = vbBoolean Or Len(keyWord) = 0 Then Exit Sub      With ActiveSheet     With .UsedRange       Set c = .Find( _       What:="*" & keyWord & "*", _       LookIn:=xlValues, _       LookAt:=xlPart, _       SearchOrder:=xlByRows)              If Not c Is Nothing Then         FirstAdd = c.Address         Set UR = c         Do           Set c = .FindNext(c)           Set UR = Union(UR, c)           If c.Address = FirstAdd Then Exit Do         Loop Until c Is Nothing       End If     End With     If Not UR Is Nothing Then       UR.EntireRow.Hidden = True       .UsedRange.SpecialCells(xlCellTypeVisible).Delete       .UsedRange.EntireRow.Hidden = False     End If   End With End Sub どうか宜しくお願いします。

  • マクロでキーワードを抽出して別のシートに貼り付けする

    セルA列にキーワードCCCが含まれていた場合に その行を削除してSheet2に貼り付けをしたく、下記のソースを 書いてみましたがエラーがでてしまいます。 どこが間違っているか添削していただけないでしょうか? Sub キーワード切取貼付() Dim r As Range For Each r In Range("A1", Range("A65536").End(xlUp)) Do Set r = Range("A:A").Find(What:=CCC, LookAt:=xlPart) If r Is Nothing Then Exit Do r.Worksheets("Sheet1").Range("A:A").Cut r.Worksheets("Sheet2").Range("A1").PasteSpecial Loop Next End Sub

  • タイトル名で複数列を取得し、その列を削除するマクロ

    1行目にタイトル名があり、タイトル名で複数列を取得し、その列を削除するマクロを作成したいです。 いろいろ調べ、下記のコードを試し、1つの列は削除可能でしたが、 複数となるとどのようになるのか分からず・・どなたかお教えいただければ助かります。 以下は「たんぽぽ」のみですが、1行目に花の名前が多数並んでおり、「たんぽぽ」「バラ」「百合」…を一緒に削除したいです。 Dim R As Range Do Set R = ActiveSheet.Range("A:ZZ").Find(What:="たんぽぽ", LookAt:=xlWhole) If R Is Nothing Then Exit Sub R.EntireColumn.Delete Shift:=xlToLeft Loop

  • VB 特定の文字列が入っている行を削除したい

    職場で、データの照合をしているのですが、毎回かわるキーワードが入っている 文字列が含まれる行を削除したいと考えています。 下のものは、ネットサーフィンで拾ってきたものです。 こちらでは、「文字列が含まれている行以外のものを残す」もので、 私が目的としているものと逆になっています。 アプリケーションボックスを利用して、「特定の文字列が含まれている行を削除」 できるのが理想です。 下のものを利用して(作成された方、ごめんなさい)、なんとかできるようにしたいと考えています。 どなたか助けてただけないでしょうか? 当方は、まったくの素人です。 Sub MacroTest1()   Dim keyWord As Variant   Dim FirstAdd As String   Dim UR As Range   Dim c As Range   Const col As Long = 1 '列数   keyWord = Application.InputBox("除外対象の文字列は?", Type:=2)   If VarType(keyWord) = vbBoolean Or Len(keyWord) = 0 Then Exit Sub      With ActiveSheet     With .UsedRange       Set c = .Find( _       What:="*" & keyWord & "*", _       LookIn:=xlValues, _       LookAt:=xlPart, _       SearchOrder:=xlByRows)              If Not c Is Nothing Then         FirstAdd = c.Address         Set UR = c         Do           Set c = .FindNext(c)           Set UR = Union(UR, c)           If c.Address = FirstAdd Then Exit Do         Loop Until c Is Nothing       End If     End With     If Not UR Is Nothing Then       UR.EntireRow.Hidden = True       .UsedRange.SpecialCells(xlCellTypeVisible).Delete       .UsedRange.EntireRow.Hidden = False     End If   End With End Sub

  • エクセルについて教えて下さい。

    エクセルについて教えて下さい。 列のいずれかに、特定の文字列が含まれる行を削除したいと考えています。 1つの文字列であれば、過去のQAからその解決策を見つけることができました↓ Sub test01() Dim x As String, c As Range x = InputBox("削除する文字を入力") With ActiveSheet.UsedRange Do While (1) Set c = .Find(What:=x, LookIn:=xlValues, LookAt:=xlPart) If c Is Nothing Then Exit Do c.EntireRow.Delete Loop End With End Sub 上記の場合だと、例えば削除対象の文字列は1種類しか記入できません。できたら、半角スペースや半角カンマなどで区切って、複数の文字列を対象に行いたいです。 どなたかご教授下さい。

専門家に質問してみよう