[[20071217212210]] 『特定の文字のある行の削除』(shinmaipapa) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定の文字のある行の削除』(shinmaipapa)
 またまたお世話になります。
 C列に、ある特定の文字(1つではありません)が入っていた場合,行ごと削除するマクロを組みたいです。
 ある文字が入っているセルは消すことができるのですが、行ごと削除ができません。

 よろしくお願いいたします。


 どのような文字でしょうか?
 セルの中の一文字でしょうか?
 セルの文字でしょうか?
 こういう場合は、普通作業列を設けて数式で判定し、削除するか
 for next で下から一致したら削除していくかのどちらかです。
 過去ログにもあったと思います。
 EntireRowをヘルプで調べてみましょう。
    (SHIOJII)


 分かりづらくてすみません。
 30種類ぐらいある文字列です。一部ではありません。
 EntireRowがhelpで出ません。2000だからでしょうか?

 >文字が入っているセルは消すことができるのですが、行ごと削除ができません。 
 ということは、特定の文字があるセル削除のマクロはできているわけですよね。
 それならば、
 Range(特定の文字のあるセル番地).EntireRow.Delete
 で、できると思います。

 EntireRow プロパティのヘルプ
 オブジェクトを返すプロパティです。
 指定されたセル範囲を含む 1 行または複数の行全体 (Range オブジェクト) を返します。
 値の取得のみ可能です。
              (SHIOJII)


 やはり上手くいきません。
 自分の組んだマクロは下です。

 If Cells(i, 3) = "AAA" Then Range(i, 3).EntireRow.Delete 
 ElseIf Cells(i, 3) = "BBB" Then Range(i, 3).EntireRow.Delete
 End If

 削除したい行の文字列は全部で30種類ぐらいあります。

 根本から違ったりしますか?

 Select Case で判断したほうがよいかも?

 Select Case Cells(i,3).Value
     Case "AAA","BBB","CCC","DDD","EEE","FFF"
         Cells(i,3).EntireRow.Delete
 End Select
 (seiya)

 早速ありがとうございます。
 確かに、Select Caseの方が使い方として正しいと思います。

 ありがとうございました。


 もし、上記である一文字を含む場合はどのようになるのですか?(tomo)

 Like演算子を使います。
 ただ、Select Caseの中で使えるかは未検証です。
 (MARBIN)

 > もし、上記である一文字を含む場合はどのようになるのですか?
 AdvancedFilter(フィルターオプション)で抽出したほうが早いでしょう...
 C 列に対象文字列のリストがあるとして
 こんな感じになるかと?

 Sub teset()
 Range("b2").Formula = "=countif(c:c,"*"&a2&"*")"
 With Range("a1", Range("a" & Rows.Count).End(xlUp))
    .AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("B1:B2"), Unique:=False
    .Offset(1).SpecialCells(12).EntireRow.Delete
 End With
 ActiveSheet.ShowAllData
 End Sub
 (seiya)

 まだ、続いていてびっくりです。(笑)

 便乗させてもらい、いろいろやってみました。

 例えば、下記のように決まった文字(例えばabcとdef)が含まれるもののみ削除はできますか?

 1245
 14abc11
 754def22
 shinmai
 abckg
 papa
   ↓
 1245
 shinmai
 papa

 自分で組んだマクロ(全く何も消してくれません)

  行数 = Range("A1").CurrentRegion.Rows.Count 
 For i = 行数 To 1 Step -1

 Select Case Cells(i, 3)
     Case "*abc*", "*def*"
        Cells(i, 3).EntireRow.Delete
 End Select

 (shinmaipapa)

 Next

 Select Caseの中でLike演算子はつかえまへんから

    行数 = Range("A1").CurrentRegion.Rows.Count
    For i = 行数 To 1 Step -1
        If Cells(i, 3) Like "*abc*" Or Cells(i, 3) Like "*def*" Then
            Rows(i).Delete
        End If
    Next i
 こんな塩梅になりますワ。

 また正規表現を使うと
    行数 = Range("A1").CurrentRegion.Rows.Count
    With CreateObject("vbscript.regexp")
        .Pattern = "abc|def"
        For i = 行数 To 1 Step -1
            If .test(Cells(i, 3)) Then
                Rows(i).Delete
            End If
        Next i
    End With
 こんな塩梅になりますかな。
        (弥太郎)

 弥太郎さんできました!
 ありとうございました。
 ついでに、もうひとついいでしょうか?
 検索文字が増えていく場合(abc,def,acd・・・)は、単純に
 .Pattern = "abc|def|acd"
 とすればよろしいでしょうか?
 (shinmaipapa)

 あい、その通りです。
     (弥太郎)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.