[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『特定の文字のある行の削除』(shinmaipapa)
よろしくお願いいたします。
どのような文字でしょうか? セルの中の一文字でしょうか? セルの文字でしょうか? こういう場合は、普通作業列を設けて数式で判定し、削除するか 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.