• ベストアンサー

指定した文字があった場合、その行を削除するマクロが欲しいです

指定した文字があった場合、その行を削除するマクロが欲しいです Sheet1(Sheet1以外は対象外)のB列に XYZ という文字があった場合、その行をすべて削除する というマクロはどのように作ればいいでしょうか? お時間ある方アドバイスいただければ幸いです。

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

手抜きですがこんな感じでどうでしょう。 削除する行が多いなら画面更新を停止した方が良いでしょう。 Sub Sample()  Sheets("Sheet1").Select  Do While (True)   Columns("B:B").Select   Set mySelect = Selection.Find(What:="XYZ")   If mySelect Is Nothing Then Exit Do   Rows(mySelect.Row).Select   Selection.Delete Shift:=xlUp  Loop End Sub

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

一例です。 半角、全角問わずxyzの文字列があれば行削除します。 シータタブ上で右クリック→コード表示→以下のコードを貼り付けてお試しください。 Sub 行削除() For i = Cells(Rows.Count, "B").End(xlUp).Row To 1 Step -1 If InStr(1, Cells(i, "b"), "XYZ", vbTextCompare) > 0 Then Rows(i).Delete End If Next End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

一例です。 Sheet1のB列に、大文字でも小文字でもXYZを含む文字列があれば、その行を削除します。 Sub test()   Dim i As Long, x As Long   With Sheets("Sheet1")   x = .Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得   For i = x To 1 Step -1 '下から順に     If InStr("xyz", StrConv(.Cells(i, "B").Value, vbLowerCase)) > 0 Then 'xyzを含んでいれば       .Cells(i, "B").EntireRow.Delete '行削除     End If   Next i   End With End Sub 対象が何万行もあるならもっと別の方法で高速化も図れますが、お勉強でしょうから一応オーソドックスで方法を書きました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • マクロで特定の文字を含む行を削除の方法

    マクロについて教えてください。(初心者です) B列にある、特定の文字(ランダムに複数の文字あります)がある場合、その行ごと削除 するマクロを教えてください。 例えば、 <B列> 2015-001 2015-002 2015-003 2015-004 と、数値があります。 2015-0002 2015-0003 の行を削除したいです。 削除対象の文字はランダムに40こほどあります。 宜しくお願いします。

  • エクセルマクロ 特定の文字列を含む行を削除

    エクセルマクロ 特定の文字列を含む行を削除 エクセルのマクロについて教えてください。 下の中から列を限定せず、すべての行でAAA、CCCのいずれかがある場合、 その行ごと、すべて削除したいのです。 時に削除したい特定の文字列が数十種類になるため、 マクロ起動時に削除したい特定の文字を記述したファイルを読み込み、それから 削除できるようにしたいのです。場合によってはそのファイルを編集し、 削除したい文字列を変更したいのです。 ご教示いただだけないでしょうか A列 B列 C列 1 AAA BBB CCC 2 BBB CCC FFF 3 DDD BBB FFF 4 AAA CCC DDD 5 GGG RRR UUU 行中にAAA、BBBがある場合、削除したい ↓ A列 B列 C列 5 GGG RRR UUU マクロを実行し、上記の結果にしたい。

  • ExcelのVBAで複数行削除を行う場合

    Excel2007のVBAで複数行を削除する方法を教えて下さい。 Excel2003で使用していたマクロが使えなくなってしまいました・・・。 下記のようなExcelシートに対して複数行ずつ行を削除し、削除対象が無くなるまで 削除処理を行うか、指定した行まで削除処理を行うという事をしたいのですが うまく動きません。 例      A列   B列   C列   D列   E列 1行目 aaa1   bbb1  ccc1 2行目             ccc2 3行目             ccc3 4行目             ccc4 5行目 aaa2   bbb2  ccc1 6行目             ccc2 7行目             ccc3 8行目             ccc4 例に対しての結果      A列   B列   C列   D列   E列 1行目 aaa1   bbb1  ccc4 2行目 aaa2   bbb2  ccc4 例に対して、複数行(指定した行数ここでは3行)の削除を行いたいのですが、 単純に複数行(3行)ずつ削除していくのではなく。 1行目や5行目にあるように文字や情報が入力されているA列とB列の情報は 残しつつ、4行目のC列以降の列の情報はすべて活かしていくという事をしたいのです。 Excel2003の時に使用していたVBAは以下のものです。 Sub 行を削除するマクロ() Workbooks("xxxx.xlsx").Activate '処理を行いたいExcel ※1 n = n + 0 LastRow = 2138           '処理を終了させたい行 ※2 Sheets("Sheet1").Select '処理を行いたいシート ※3 Do Until (n > LastRow) Rows(n + 4).Delete Shift:=xlsiftUp '削除したい行指定 ※4 n = n + 3 Loop End Sub 皆様の良いアドバイスやお知恵をお貸しください。 よろしくお願いします。

  • 【マクロ】データが1つもない行を削除する

    添付した画像のようなファイルがあります。 この表の中で、データが一つもない行は削除して、上詰めにするマクロを実行したいです。 また、このシートの表は11行で終わっていますが、 他のシートは25行目で終わっていたりとバラバラです。 すべてのシートでこの処理を行いたいと思っていますので、 他のシートで処理を行ってもエラーのでないマクロを教えていただけたら幸いです。 ちなみに、 ・各シートに表はひとつづつ。 ・各シートの表の開始セルは同じ。 ・全シートに対して一気に処理を行いたい。←指定した処理をすべてのシートで行うマクロは作成済なので大丈夫です。

  • EmEditorでマクロ? 選択文字列を含む行の一括削除

    テキストエディタとしてEmEditorを使用しています。 「ある文字列」を全て削除する場合は置換を使えばできますが、 「ある文字列を含む行」を全て削除するにはどうすればよいのでしょうか。 マクロ機能を使用すればできるのではないかと思いましたが、 私は、マクロの記録/停止で実際に行った操作を記憶させる方法しか使ったことがなく、 この方法では上手くできませんでした。 文章中から任意の文字列を選択し、マクロの実行で文字列が含まれる行を一括削除 ということを行いたいです。 このようなマクロをご存じでしたら教えて頂けないでしょうか。 あるいは、これらのことは置換のみでもできるのでしょうか。

  • 行削除のマクロ

    B列~F列にデータが入っていてB列の最終行の下セルを選択しクリップボードのデータを貼り付けた後、貼り付けたデータの最初の3行を削除するマクロを作っています。 Sub Macro1() ''Worksheets("Sheet1").Activate ' addrw = Range("b65536").End(xlUp).Offset(1).Row Cells(addrw, 2).PasteSpecial end sub これでB列の最終行の下にデータを貼り付けることまで出来たのですが貼り付けた最初の3行の削除の仕方がわかりません。 いい方法があれば教えていただけないでしょうか。  例えばB列の10行目まで既に入力されていた場合、11行目からクリップボードのデータを貼り付け(ここまでは上のプログラムで出来ました。)、11行目から13行目を削除したいのですがどうしたらいいでしょうか?

  • 行を削除するマクロ2

    a列には0から2の数値が入っています。 2行目から、a列の数値が2かつ最下の行(この画像の場合は12行目)までを削除するマクロのvbaの構文を教えてください。 ただし、a列の数値がすべて2未満の場合、行は削除しないようにしてください。 削除するのは行全体で、a列だけではありません。 エクセル2010です。 どうぞよろしくお願いします。

  • Excelマクロ、特定行の削除

    A列に日付か文字のどちらかが入力してある表があります。  A列(日付文字) B列(時刻) C列以下(その他データ ) 日付は全て同じ日付(11月11日なら全部これ)で、文字も全て同じ文字です。 日付またはB列が時刻(さまざまな数値)の行を削除して、A列が文字の行だけ残したいのです。 Range("2:2").Select Selection.Delete Shift:=xlUp これを表範囲で繰り返すのはわかります。 "2:2"の所に変数を用いると思いますが、変数に日付の行を指定したりするコードが分かりません。 A列が文字の行を検索し、それ以外の行を削除でもよいのですよね。 よろしくお願いします。

  • マクロによる条件での行の入力と削除

     初めまして、よろしくお願いします。  次のような二枚のシートがあります  シート1      A  B  C   1     2       ・      99      100 23    101 25   102 31   103 34  104 43  105 44  106 49  107 50  108 55  109 60  110  111  ・  ・  シート2      A  B  C   1     2       ・      99      100 23  1 2 3   101 25  4 5 6 102 31  7 8 9     103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 55  5 6 7 109 60  8 9 0 110  111  ・  ・ シート1とシート2のA列に入っている数字が通し番号です。シート2では加えてその通し番号のデーター数字がB列、C列、D列に入っています。 のこシート1の通し番号31が削除、代わりに通し番5番と51番を追加し、  シート1      A  B  C   1     2       ・      99      100  5 101 23    102 25     103 34  104 43  105 44  106 49  107 50  108 51 109 55  110 60  111  112  ・  ・ マクロを実行すると  シート2      A  B  C   1     2       ・      99      100  5 101 23  1 2 3   102 25  4 5 6    103 34  0 1 2  104 43  3 4 5     105 44  6 7 8 106 49  9 0 1 107 50  2 3 4 108 51 109 55  5 6 7 110 60  8 9 0 111  112  ・  ・ シート2がこように通し番号31が入っていた行番102行が削除され、新たに通し番5番が行番100に、51番が行番108に挿入追加されるマクロを教えていただきたく、よろしくお願いします。

  • セルの値が指定条件なら対象行を削除するマクロ

    ボタンクリックでプロシージャーが起動します。 そのマクロの中で以下の2つの処理を追加させたいです。 マクロの記述を教えてください。 A~F列までデータが有ります。 1行目は項目で2行目からデータがあります。 行数は都度相違しますが10,000行はあります。 (1) F列の値は標準で、ここが0の場合その行全体を削除します。 入っている値の例 -1234→削除しない 345→削除しない 12346→削除しない 0→削除する セルの空白はぜったいありません。 (2)-1 E列の値は標準で英数字3ケタです。ところどころ空白があります。 E列の値が先頭7B以外は行全体を削除します。 7B1→削除しない 7B2→削除しない 7BW→削除しない 77C→削除 47B→削除 空白→削除 F列を優先なのでE列が7Bで始まっている行でも F列が0なら削除となります。 (2)-2 (2)-1と同じでE列の値は標準で英数字3ケタです。 ところどころ空白があります。 E列の値が 先頭 7Bと72以外 又は CとDと7B以外は 行全体を削除します。 のように(2)-1のように1条件ではなく2~複数になる。 それが1文字の場合、2文字の場合、3文字全部の場合がある F列を優先なのは(2)-1と同じです。 条件例 ・Cと73以外 ・CとFと72以外 ・Gと7Vと8D以外 ・Gと88と8D5以外 以下の記述ですが、(1)は思ったとうり動作しましたが ●の部分が分かりません。 現在の記述では7BB以外は全部行削除されてしまいます。 (2)-1と(2)-2の対応のために 記述内で(2)-1と(2)-2を 書き換える事が出来るような記述にしたいです。 あと凄く処理が遅いので高速化もしたいです。 よろしくお願いします。 Sub test01() 'A~K列のデータにて 'E,F,H,I,K列を列削除する Columns("E:F").Select Selection.Delete Shift:=xlToLeft Columns("F:G").Select Selection.Delete Shift:=xlToLeft Columns("G:G").Select Selection.Delete Shift:=xlToLeft 'データがA~F列になりました。 With ActiveSheet 'アクティブなシートについて x = .UsedRange.Cells(.UsedRange.Count).Row 'xに最終行を取得 For i = x To 2 Step -1 '最終行から2行目まで下から順に 'F列が"0"だったらその行を削除 If .Cells(i, 6) = 0 Then .Rows(i).Delete Next '繰り返し End With With ActiveSheet 'アクティブなシートについて x = .UsedRange.Cells(.UsedRange.Count).Row 'xに最終行を取得 For i = x To 2 Step -1 '最終行から2行目まで下から順に 'E列の値の先頭文字が"7B"でなかったら削除(空白の場合も削除) ●If .Cells(i, 5) <> "7BB" Then .Rows(i).Delete Next '繰り返し End With End Sub

このQ&Aのポイント
  • 5/27土曜日、メールの使用時に受信も送信も、アドレス、仕訳ルールなどがほぼすべて消えました。
  • 可能性として、5/26にOneDriveにデスクトップ、ドキュメントもバックアップする設定をしたかもしれませんが、確証はありません。
  • 一部を別のPCに移管しても同じ問題が発生し、システムのクリカバリもエラーで失敗しました。解決策が見つかっていません。
回答を見る

専門家に質問してみよう