• ベストアンサー

特定の文字を含まないセルの行を削除するには

いつもお世話になっております。 特定の文字列(下記では"0610")を含まないセルの行を削除するプログラムを組むにはどのようにしたどのようにしたらよいのでしょうか。 以下のようなプログラムを組んでみました。 Sub test() Dim i As Long With Range("C1") For i = .CurrentRegion.Rows.Count To 1 Step -1 If .Offset(i, 0) <> "0610*" Then .Offset(i,0).EntireRow.Delete Next i End With End Sub しかしこれでは先頭行を残し全ての行が削除されてしまいます。 IF文の"<>"がうまくないのだと思いますが、Like演算子の反対のようなものはありませんでしょうか。ご教授いただければ幸いです。 *ちなみに上のプログラムは'06年10月以外のデータは削除するために作ったものです。

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

  • ベストアンサー
  • myCat
  • ベストアンサー率60% (9/15)
回答No.4

こんばんは。 含む等は、Like演算子が汎用性がありますが、 今回のような場合は、あっさりと頭4桁処理でもOKですよね。 If Left(.Offset(i, 0), 4) <> "0610" Then .Offset(i, 0).EntireRow.Delete それから一言。 提示のコードでは最後のセルの次のセルからチェックしているのはお分かりですよね? それについては今回は問題はないですが、Offsetを使う時は特に気をつけないといけない点のひとつだと思います。  

yuichi8
質問者

お礼

myCatさんありがとうございます。 最初Left関数を使ってみたのですがうまくいきませんでした。.Offsetを関数の中で使えばよかったのですね。 .Offsetは最近使い始めたばかりなので、使い方を覚えていきたいと思います。

その他の回答 (3)

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.3

そのまま if NOT A like B then ではダメでしたか?

yuichi8
質問者

お礼

gatyanさんありがとうございます。 A=(i,0)、B="0610*"としましたが、コンパイルエラーになってしまいました。代入のさせ方が間違っているのでしょうか。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

> Like演算子の反対のようなものはありませんでしょうか ようは True か False かですから反転させれば良いのでは? If Not .Offset(i, 0) Like "0610*" Then .Offset(i, 0).EntireRow.Delete

yuichi8
質問者

お礼

papayukaさんありがとうございます。 If Not文にすれば解決するのでしたね。初心者のつたない質問に答えていただきありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

InStrを使ってみてはいかがでしょう if InStr( .Offset(i,0).Value, "0610") = 1 then .Offset(i,0).EntrireRow.Delete といった具合です 0610などが 行頭では場合は =1を修正してください

yuichi8
質問者

お礼

ありがとうございます。If Not文にしたところうまくいきました。 InStrの使い方今後も参考にしたいと思います。

関連するQ&A

  • エクセルのマクロで重複データーを削除する

    Sub Sample() Dim i As Long With Range("B:B") For i = .CurrentRegion.Rows.Count To 1 Step -1 If .Offset(i, 0) = .Offset(i - 1, 0) Then .Offset(i, 0).EntireRow.Delete Next i End With End Sub 上記のマクロを実行するとエラーがでますが、どこを直せばわかりません。 一つのブックのシート全体のB列の重複データーを削除したいのですが、教えて頂けないでしょうか?

  • #N/Aの文字を削除するには

    お世話になっております。 #N/Aの文字を含む行を削除するため以下のようなマクロ(Excel)を組みました。 Dim i As Long With Range("C1") For i = .CurrentRegion.Rows.Count To 1 Step -1 If .Offset(i, 2) = "#N/A" Then .Offset(i, 5).EntireRow.Delete Next i End With 当然かもしれませんが、IF文の ".offset(i,2)="#N/A""のところで「型が一致しません」とエラーが出てしまいます。 シート上で#N/Aは数式でなく値として記録されています。 どのようにすればエラーを回避できるでしょうか。 よろしくお願いします。

  • エクセル 重複する行の削除に加算処理を追加したい

    データの例と、現在使用しているマクロの内容は以下のようになっております。重複行を消すマクロです。EXCEL2003です。 ◇データ例◇ 名前 点数 田中 20 田中 10 鈴木 10 佐藤 10 佐藤 20 佐藤 20 ◇現在のマクロ◇ Sub sakujo() Dim i As long With Range("A2") For i = .CurrentRegion.Rows.Count To 1 Step -1 If .Offset(i,0) = .Offset(i - 1, 0) Then .Offset(i, 0).EntireRow.Delete Next i End With End Sub A2以下を一つ一つ見て行き、重複していれば削除します。 元データはソートされており、途中にスペースなどは存在しません。 これを、重複する行を消したときに、件数を加算する仕様にしたいです。 上記の例ですと、最終的に 田中 30 鈴木 10 佐藤 50 となるようにしたいです。 よろしくお願いします。

  • エクセル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

  • 指定した範囲で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

  • 色のないセルの行削除

    任意の色で塗りつぶされたセルがあって、塗りつぶされたセルが存在する行を削除するマクロ。 Sub 行削除() Dim r As Integer Dim c As Integer For c = ActiveSheet.UsedRange.Columns.Count To 1 Step -1   For r = ActiveSheet.UsedRange.Rows.Count To 1 Step -1     If Cells(r, c).Interior.ColorIndex <> xlNone Then        Rows(r).Delete     End If   Next Next End Sub この逆のことがしたいのですが、わかりません。 ちなみにこのプログラムはそのままC&Pです。 内容もあまり理解できていません。(^_^;) 添付画像の逆に色のついた行だけ残したいです。 よろしくお願いします

  • Excelセル範囲内の値のみ1行空欄にする

    下記コードでは1行づつ挿入により下段までずれてしまいます。 Excelセル範囲内の値のみ1行づつ開けるにはどのようにすれば良いでしょうか。 どなたか解る方よろしくお願いします。 Sub 空欄1行() Dim i As Long If TypeName(Selection) <> "Range" Then Exit Sub With Selection For i = .Rows.Count To 2 Step -1 Intersect(.Cells(i, 1).EntireRow, .Columns).Insert xlDown Next End With 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」を含まない行を削除したいのですが どのようにマクロを組めばよいのでしょうか? こちらまったくの初心者です。 上記の書式にはこだわりませんので、わかる方教えて下さい。

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

    業務で台帳の管理をやることになり。毎日同じような作業だったので マクロで出来るようにしたいと思いネットを漁っていた所、過去ログから 丁度同じ感じのものを発見し、流用したいのですが、このまま使用すると 固定したい行まで削除されてしまいます。勉強がてらどうにか自分で出来ないかと 色々試行錯誤したのですが、わからなかったので教えて下さい。 Sub Sample1() Dim i As Long For i = Cells(Rows.Count, "S").End(xlUp).Row To 2 Step -1 If InStr(Cells(i, "S"), "ABC1002") = 0 Then Rows(i).Delete End If Next i End Sub A16行まではウインドウ枠の固定で使用しています。 なのでA16行以降でこのマクロを実行したいです。 ご指導よろしくお願いいたします。

  • 空白行を削除して上へ詰めたい

    例えば、画像のように 1行目から10行目の間に適当に値が入ってるとします。 その中で、行に何も入っていないのなら、削除して上へ詰めたいのですが どのようなコードを書けばいいでしょうか? 該当の行の1列目から256列目のどの列にも値が入ってないのが条件です。 自分なりに考えたのですが ---------------------------------------- Sub test1() Dim i, gyou As Long For gyou = 1 To 10 '最終行 i = WorksheetFunction.CountA(Rows(gyou)) If i = 0 Then Rows(gyou).Delete gyou = gyou - 1 '削除すると行がずれる End If Next End Sub ---------------------------------------- Sub test2() Dim i, gyou As Long gyou = 1 Do While gyou <> 10 i = WorksheetFunction.CountA(Rows(gyou)) If i = 0 Then Rows(gyou).Delete Else gyou = gyou + 1 End If Loop End Sub ---------------------------------------- どちらも、なぜか無限ループになってしまいます。 どうすればいいか教えてください。

専門家に質問してみよう