• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBA 起点からの複数行一括削除)

Excel VBAで複数行一括削除の方法

heno-_-の回答

  • ベストアンサー
  • heno-_-
  • ベストアンサー率100% (6/6)
回答No.3

再三すみません。 1点勘違いしておりましたので、修正させてください。 > 3.TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 > 空白の入力や、キャンセルボタンが押された場合を除く分岐だと思いますが、 > シンプルに、戻り値が空白か否か判断すれば大丈夫です。 と書きましたが、キャンセルボタンが押された場合の処理を 除外するのを忘れておりました。 ご質問者様の書き方でも大丈夫ですし、 keyWord <> "" And keyWord <> "False" のように書いてもOKです。 大変失礼致しました。 -------------------------------------------------- Sub 特定ID削除() Const blockNum As Integer = 15 ' 1ブロックの行数 Const col As String = "E" ' 識別文字が入力されている列 Const startRow As Long = 1 ' 開始行 Dim endRow As Long ' 終了行 Dim Idx As Long Dim keyWord ' 最終データブロックの先頭行を取得 endRow = Cells.SpecialCells(xlLastCell).Row - blockNum + 2 ' 削除対象文字列を取得 keyWord = Application.InputBox("削除対象の文字列を指定", Type:=2) ' 検索&削除処理 If keyWord <> "" And keyWord <> "False" Then For Idx = endRow To startRow Step -blockNum If InStr(Cells(Idx, col).Value, keyWord) > 0 Then Range(Idx & ":" & Idx + blockNum - 1).Delete Exit For '削除するブロックが1つだけの場合 End If Next Idx End If End Sub --------------------------------------------------

AKI2480
質問者

お礼

一日悩んだ結果が一瞬で解決、思った通りの動作となり感動しました。 Excellentです! 色々やり方があるものですね、大変参考になりました。 このVBAだけでなく、仕事でもScriptを組めるようになる必要があり、 書籍等で色々調べたのですが、ばっちりこれ!といったコードがある わけなく、途方にくれていました。自分でひとしきり悩んだ後、詳しい 方にかくも丁寧に回答頂いたため、素直に理解できました。 何度も丁寧に解説頂き、本当にありがとうございました。

関連するQ&A

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

    データの照合をしています。 指定した文字列が、「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がない」とエラーがでます。 ご教授、お願いいたします。

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

    以下のマクロは、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 このマクロを、 「特定の文字列が含まれている行のみを残し、それ以外を削除する」 というマクロに変更したいと思っています。 是非ご回答お願いいたします。

  • エクセル2010 VBA 行削除

    特定列が空白であれば行削除をしたいのですが、下記コードでうまく削除は出来るのですが、応答なしになったり、とても遅いのですが、もう少し早く処理出来る方法はありますか? E列が空白であれば行削除をしたいのですが・・ With Range("E13", Cells(Rows.Count, 5).End(xlUp)) .AutoFilter Field:=1, Criteria1:="" On Error Resume Next Set rng = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) If Err.Number = 0 Then rng.EntireRow.Delete On Error GoTo 0 .AutoFilter End With

  • エクセル VBA Rowsプロパティ?

    エクセル VBAにて ある列の空白セルを調べて空白があった場合 行全体を選択して削除したいため、下記のように書き込みました。 Dim idx As Integer For idx = 5 To 2204 If ActiveSheet.Cells(idx, 2) = "" Then Rows("idx:idx").Select Selection.Delete Shift:=xlUp End If Next idx Rows("idx:idx").Selectが間違っていると思うのですが 変数を使用しての行指定がわかりません。 どなたかご教示お願いいたします。

  • 【Excel VBA】複数の条件を満たすデータを行削除

    Excel2003を使用しています。 ある表の中のデータで、次の4つの条件を満たすデータを行削除したいのですが、マクロではどのように書いたらいいのでしょうか?  E列…データが入力されている  F列…空白  G列…空白  H列…空白 よろしくお願いします。

  • エクセルVBAで表から行の削除

    添付画像のような表があります。 表はB列の名前でソートされています。 D列の比率をみて、100でないものは、必ず同じ名前で複数行にわかれ合計で100になります。この例では名前CとEとHがそうです。 同じ名前が複数行にわかれている場合、最大の比率の行を残し、他の行(例では、埼玉、栃木、長野、新潟の行)を削除したいのです。 複数行にわかれるのが名前CやEのように2行なら、以下のコードで出来ました。 しかし、めったにはありませんが名前Hのような3行以上に分かれるものには対応できません。 どうすればよいでしょうか? Sub test01()   Dim c As Range   Dim Rng As Range   Set Rng = Range(Cells(2, "D"), Cells(Rows.Count, "D").End(xlUp))   For Each c In Rng '2地区の分担の場合、分担比率高い方を残す。(3地区以上は未対応)2012/08/29     If c.Value <> 100 And c.Offset(1).Value <> 100 Then       If c.Offset(, -2).Value = c.Offset(1, -2).Value Then         If c.Value >= c.Offset(1).Value Then           c.Offset(1).Value = False         Else           c.Value = False         End If       End If     End If   Next   If Application.WorksheetFunction.CountIf(Rng, False) > 0 Then     Rng.SpecialCells(xlCellTypeConstants, xlLogical).EntireRow.Delete   End If End Sub

  • 空白行削除

    宜しくお願いします。 1枚のファイルシートに14ブロックのデータが貼り付けてあります。各ブロック行の長さは違く、ランダムに貼り付けてあります。例えば、データ 何百行の空白 データ…と繰り返されており、約3万5千行ぐらいあります。 空白行削除で多分半分近くまで上に詰められれば良いのですが、たくさんあるのでマクロで教えていただければと思います。ネットでころがってるデータ試してみたのですが(1部) ENDLESSに実行されて、出来てるのかどうかも確認はとれてません。ちなみに自分のシートに貼ってあるデータはA列からAS列まであり数字、文字混在です。また各ブロックの終わりは集計行となっており、空白セルがまじってます。宜しくお願いします。

  • VBAで行の削除

    お世話になります。 下記の様に行を削除しようとしていますが、 行を削除していくと、1行ずつずれていく為、 結果全部削除されません。 どのようにしたらうまく(空白のセルの行のみ) 削除出来ますでしょうか。 ご教示頂きたく宜しくお願い致します。          記 For k = 2 To r If Sheets("sheet1").Cells(k, 9) = "" Then Rows(k).Select Selection.Delete Shift:=xlUp End If Next k

  • 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

  • VBAの行削除について

    VBAで行を削除したいです。 データが何百行かあって、その下から空白行が最終行までできています。 その空白行部分を削除したいのですが。 どのようにコーディングすればいいのですか?