指定した文字列を含む行を削除する方法

このQ&Aのポイント
  • 指定した文字列が含まれる行を削除する方法を教えてください。データの照合をしています。
  • 指定した文字列がO列に入っていた場合、その行を削除し、行をつめたいです。マクロを組んでいますが、エラーが発生します。
  • マクロの次の行にある「Next」に対応する「For」がないというエラーが発生します。どのように修正すればいいでしょうか。
回答を見る
  • ベストアンサー

指定した文字列が含まれる行を削除する

データの照合をしています。 指定した文字列が、「O列」に入っていたら、その行を削除し、 行をつめる というようなマクロを組みたいのですが、エラーがかかってしまいます。 (下のVBは、ネットで公開されていたのを使用させていただいております。) Sub Macro1() Const col As String = "A" '文字列が入力されている列 Dim idx As Long Dim keyWord keyWord = Application.InputBox("削除対象の文字列は?", Type:=2) If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then   For idx = Cells(65536, col).End(xlUp).Row To 1 Step -1     If InStr(Cells(idx, col).Value, keyWord) > 0 Then '    If Application.CountIf(Rows(idx), "*" & keyWord & "*") > 0 Then       Rows(idx).Delete     End If   Next idx End If End Sub 「下から3行目のNEXTに対応するforがない」とエラーがでます。 ご教授、お願いいたします。

  • choket
  • お礼率78% (264/336)

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

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

Sub DelLines() Dim R As Range Do Set R = ActiveSheet.Range("A:A").Find(What:="XXX", LookAt:=xlWhole) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub

choket
質問者

お礼

ありがとうございます。 さっそくためしてみます。

その他の回答 (1)

  • mar00
  • ベストアンサー率36% (158/430)
回答No.1

>「下から3行目のNEXTに対応するforがない」とエラーがでます。 Next idxの前にEnd Ifが1つ足りないために出るエラーだと思います。

choket
質問者

お礼

ありがとうございます。 エラーはでなくなったのですが、うまく行を消すことができなきなりました。

関連するQ&A

  • エクセルマクロ 特定の文字列を含む行のみを残す (マクロ修正)

    以下のマクロは、EXCEL2003で 「特定の文字列が含まれている列を削除する」動作をするマクロです Sub Macro1() Const col As String = "A" '文字列が入力されている列 Dim idx As Long Dim keyWord keyWord = Application.InputBox("削除対象の文字列は?", Type:=2) If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then   For idx = Cells(65536, col).End(xlUp).Row To 1 Step -1     If InStr(Cells(idx, col).Value, keyWord) > 0 Then '    If Application.CountIf(Rows(idx), "*" & keyWord & "*") > 0 Then       Rows(idx).Delete     End If   Next idx End If End Sub このマクロを、 「特定の文字列が含まれている行のみを残し、それ以外を削除する」 というマクロに変更したいと思っています。 是非ご回答お願いいたします。

  • Excel VBA 起点からの複数行一括削除

    Excel VBAで末端までだと4万行くらいのデータを整理するものを組んで います。初心者ゆえどなたかお詳しい方の知恵を拝借いたしたく。 元となるデータは15行が一塊であるデータブロックで構成されており、 14行目には"END"の文字があり、15行目には必ず空白行があります。 この15行のデータブロックが延々4万行繰り返しの形で存在しています。 どのデータブロックか判別できる数字が入っているのは1行目のE列 です。 データブロック一行目E列に含まれる特定の語句(IDNo.)を検索し、これを 起点として空白行までの15行一塊のデータブロックをまとめて削除でき るものを作成しようと思ったのですが、一行ずつ削除するところまでしか 自力では分からず、これ以降どのように追記すれば良いか見当がつか ない状態です。よろしくお願いします。 元データ     A    B   C    D    E     F   G 1   aaa   bbb  ccc  ddd   (IDNo.)  fff  ggg 2   111  222  333  444   555   666  777 (略) 14 END 15 (空白行) 16  AAA  BBB  CCC DDD  (IDNo.) FFF GGG (略) 29 END 30 (空白行) 以下 検索したもの+自分で追記してみた部分です。 Sub 特定ID削除() With ActiveWorkbook.ActiveSheet Const startrow As String = "1" '開始行を指定 Const col As String = "E" '識別文字が入力されている列 Dim Idx As Long Dim keyWord keyWord = Application.InputBox("削除対象の文字列を指定", Type:=2) If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then For Idx = .Cells(65536, col).End(xlUp).Row To startrow Step -1 If InStr(.Cells(Idx, col).Value, keyWord) > 0 Then ' If Application.CountIf(Rows(Idx), "*" & keyWord & "*") > 0 Then .Rows(Idx).Delete End If Next Idx End If End With End Sub

  • Excel 改ページのマクロ

    同シート内で改ページを設定するマクロを、ここで教えてもらったのですが、改ページを判断するデータの列が関数(vlookup)で持ってきたデータの場合にうまく機能しません。下のマクロに手を加えれば可能でしょうか? Sub Macro4() Const col As String = "A" '改ページを判断するデータの列名 Dim idx As Long Dim sv sv = Cells(1, col).Value For idx = 1 To Cells(65536, col).End(xlUp).Row   If Cells(idx, col).Value <> sv Then     ActiveSheet.HPageBreaks.Add Before:=Rows(idx)     sv = Cells(idx, col).Value   End If Next idx End Sub

  • 指定した範囲で0の行を削除するマクロ

    以下のコードで7列目が0の行を削除するマクロを作ったのですが、 13行目以降を削除するように指定できますでしょうか? 1-12行は別のシートに数式を入れているため、削除したくないのですが、 うまくいきません。よろしくお願いいたします。 Sub 行削除() Dim Rw As Long Dim Cnt As Long Application.ScreenUpdating = False For Rw = Cells(Rows.Count, 7).End(xlUp).Row To 1 Step -1 With Cells(Rw, 7) If .Value = 0 Then .EntireRow.Delete Cnt = Cnt + 1 End If End With Next If Cnt = 0 Then MsgBox "削除対象行は、見つかりません。", vbExclamation Else MsgBox Cnt & " 件見つかり行を削除しました。", vbInformation End If End Sub

  • 文字数を越えた文字列を削除するには?

    いつもお世話になっております。また行き詰ってしまいました。 ご助言頂きたくお願い致します。 A列とB列にデータが入っていて、B列には2つのパターンの文字が入っています。 一つは、前の10文字が必ず半角(英字+9ケタの数字)その後は全角のスペースの後に 全角の文字が並びます。(全角の文字数は不規則) 例1:A123456789 あいうえおかきくけこさしすせそ もう一つは頭からすべて全角文字 例2:あいうえおかきくけこさしすせそたちつてと 問題になっている部分は、このB列に入っているデータを頭から 全角15文字以内、半角なら30文字以内に収める という所です。 例1だと、 A123456789 あいうえおかきくけこさしすせそ →A123456789 あいうえおかきくけ(半角10文字+全角10文字) 例2だと あいうえおかきくけこさしすせそたちつてと →あいうえおかきくけこさしすせそ(全角15文字) 下記のようなマクロを作ってみたのですが2つのパターンに対応する為にはどうすればよいでしょうか? Const col1 As String = "B" Dim idx1 As Long Dim myStr1 As String With ActiveSheet For idx1 = .Cells(65536, col1).End(xlUp).Row To 1 Step -1 myStr1 = Cells(idx1, "B") If .Cells(idx1, "B").Value = "" Then Else Cells(idx1, "B") = Left(myStr1, 15) End If Next idx1 End With 以上、宜しくお願い致します。 環境:windowsXP Excel2003

  • 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

  • 条件によって行削除を繰り返し処理する

    一行目がフィールド名で、Z列まで値の入っているデータがあります。 x列が""の場合はその行を削除する処理を最終行まで続けたいのですが、 ""行が2行以上続いているとFor~によって行を飛ばしてしまいます。 何か良い方法はありませんでしょうか? Sub 削除() Dim last As Long Dim row As Long last = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).row For row = 2 To last If Cells(row, 24).Value <> "" Then Rows(Format(row) + ":" + Format(row)).EntireRow.Deletesift:=xlUp End If Next End Sub

  • エクセルマクロ 複数特定文字を含む行以外の削除

    M列にある特定の文字が含む行以外のものを削除するマクロを教えて下さい。 現在ネット検索で見つかったマクロを使用しています 【現在使用中のマクロ】 Sub Sample1() Dim i As Long For i = Cells(Rows.Count, "M").End(xlUp).Row To 2 Step -1 If InStr(Cells(i, "M"), "検索したい文字") = 0 Then Rows(i).Delete End If Next i End Sub これだと検索したい文字が1つしか利用できません。 「検索したい文字列1」または「検索したい文字列2」を含まない行を削除したいのですが どのようにマクロを組めばよいのでしょうか? こちらまったくの初心者です。 上記の書式にはこだわりませんので、わかる方教えて下さい。

  • 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 どうか宜しくお願いします。

  • エクセル2003のVBAで列を指定

    エクセルで特定の列の2~10行目に対して、ある作業をする場合、列を指定する方法は以下のどれがいいでしょうか?あるいはもっといい方法があれば教えてください。 実際には列は約40列(固定)、行は1~2万行(変動)程度で、作業はもっと複雑です。 Sub test01() Dim col Dim i As Long, n As Long For Each col In Array(1, 3, 7, 8, 11) '列番号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test02() Dim col Dim i As Long, n As Long For Each col In Array("A", "C", "G", "H", "K") '列の記号で指定 For i = 2 To 10 n = n + 1 Cells(i, col).Value = n Next i Next col End Sub Sub test03() Dim col Dim i As Long, n As Long For Each col In Range("A2,C2,G2,H2,K2") 'セルで指定 For i = 2 To 10 n = n + 1 col.Offset(i - 2).Value = n Next i Next col End Sub

専門家に質問してみよう