• ベストアンサー

EXCEL 2つの特定の文字列がある行を残して削除

EXCELにて2つの特定の文字列が含まれる行を残して削除したいと思っております。 A列50行にそれぞれ"年賀状""喪中""名刺"がランダムに羅列されていて、その中から"年賀状"と"喪中"の行だけを残して"名刺"の行は削除したいと思ってます。(B列以降は注文番号、枚数、氏名等が入力されています) 以下のコードで1つだけは可能でしたが、色々試しても2つはできませんでした。(コードは拾い物を少しアレンジ) Sub MacroTest1()   Dim keyWord As Variant   Dim FirstAdd As String   Dim UR As Range   Dim c As Range   Const col As Long = 1 '列数   keyWord = "年賀状"   If VarType(keyWord) = vbBoolean Or Len(keyWord) = 0 Then Exit Sub      With ActiveSheet     With .UsedRange       Set c = .Find( _       What:="*" & keyWord & "*", _       LookIn:=xlValues, _       LookAt:=xlPart, _       SearchOrder:=xlByRows)              If Not c Is Nothing Then         FirstAdd = c.Address         Set UR = c         Do           Set c = .FindNext(c)           Set UR = Union(UR, c)           If c.Address = FirstAdd Then Exit Do         Loop Until c Is Nothing       End If     End With     If Not UR Is Nothing Then       UR.EntireRow.Hidden = True       .UsedRange.SpecialCells(xlCellTypeVisible).Delete       .UsedRange.EntireRow.Hidden = False     End If   End With End Sub どうか宜しくお願いします。

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

  • ベストアンサー
  • turuzou
  • ベストアンサー率33% (15/45)
回答No.4

2項目以外を削除なら、こんな感じでも Sub sakujyo()  Dim x, y, z  y = "年賀状"  z = "喪中"  Application.ScreenUpdating = False  For x = 50 To 2 Step -1   If InStr(Cells(x, 1), y) > 0 Then   ElseIf InStr(Cells(x, 1), z) > 0 Then   Else    Rows(x).Delete   End If  Next x  Application.ScreenUpdating = True End Sub

ma_coro
質問者

お礼

見事に思い通りになりました。 有難うございました。 自分の勉強不足を痛感しております。

その他の回答 (3)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

"名刺"の行は削除したいということですから 名刺の行を探して削除したほうが早いと思います。 Sub test() For i = 1 To Range("A" & Rows.Count).End(xlUp).Row If Range("A" & i).Value = "名刺" Then Rows(i).Delete i = i - 1 End If Next i End Sub

ma_coro
質問者

お礼

この方法は思い付きませんでした。 確かにこちらの方がスマートですね。 勉強になります。有難うございました。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

>(コードは拾い物を少しアレンジ) ふ~ん、じゃあ都合よく拾われたり、捨てられても良いコードにしておきます Sub test() Dim i As Integer For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If Cells(i, 1).Value = "名刺" Then Rows(i).Delete Next i End Sub ご自由にどうぞ

ma_coro
質問者

お礼

自分で書ける技量があれば良いのですが、 本等を参考に色々弄ってますが難しいです。申し訳ございません。 回答有難うございました。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

方法が異なりますが。 >"名刺"の行は削除したいと ですので、オートフィルターで名刺のみ表示させて 行を選択、削除すれば如何でしょうか。 VBAでしたら、マクロの記録で大丈夫です。 マクロの記録を開始 1、オートフィルターを設定 2、A列、名刺を表示 3、行をたっぷりと選択(50行目以下まで選択しておきます) 4、行の削除 5、オートフィルターの解除 マクロの記録の終了 の操作をしてみてください。 置換えとジャンプの機能を利用しても出来ると思います。

ma_coro
質問者

お礼

ん~、目から鱗です。 どうしてもコードで、と思うとそちらにだけ目が向いちゃって… マクロの記録でも大丈夫ですね。 有難うございました。

関連するQ&A

専門家に質問してみよう