- ベストアンサー
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 どうか宜しくお願いします。
- ma_coro
- お礼率100% (5/5)
- オフィス系ソフト
- 回答数4
- ありがとう数4
- みんなの回答 (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
その他の回答 (3)
- kmetu
- ベストアンサー率41% (562/1346)
"名刺"の行は削除したいということですから 名刺の行を探して削除したほうが早いと思います。 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
お礼
この方法は思い付きませんでした。 確かにこちらの方がスマートですね。 勉強になります。有難うございました。
- hige_082
- ベストアンサー率50% (379/747)
>(コードは拾い物を少しアレンジ) ふ~ん、じゃあ都合よく拾われたり、捨てられても良いコードにしておきます 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 ご自由にどうぞ
お礼
自分で書ける技量があれば良いのですが、 本等を参考に色々弄ってますが難しいです。申し訳ございません。 回答有難うございました。
- hallo-2007
- ベストアンサー率41% (888/2115)
方法が異なりますが。 >"名刺"の行は削除したいと ですので、オートフィルターで名刺のみ表示させて 行を選択、削除すれば如何でしょうか。 VBAでしたら、マクロの記録で大丈夫です。 マクロの記録を開始 1、オートフィルターを設定 2、A列、名刺を表示 3、行をたっぷりと選択(50行目以下まで選択しておきます) 4、行の削除 5、オートフィルターの解除 マクロの記録の終了 の操作をしてみてください。 置換えとジャンプの機能を利用しても出来ると思います。
お礼
ん~、目から鱗です。 どうしてもコードで、と思うとそちらにだけ目が向いちゃって… マクロの記録でも大丈夫ですね。 有難うございました。
関連するQ&A
- VB 特定の文字列が入っている行を削除したい
職場で、データの照合をしているのですが、毎回かわるキーワードが入っている 文字列が含まれる行を削除したいと考えています。 下のものは、ネットサーフィンで拾ってきたものです。 こちらでは、「文字列が含まれている行以外のものを残す」もので、 私が目的としているものと逆になっています。 アプリケーションボックスを利用して、「特定の文字列が含まれている行を削除」 できるのが理想です。 下のものを利用して(作成された方、ごめんなさい)、なんとかできるようにしたいと考えています。 どなたか助けてただけないでしょうか? 当方は、まったくの素人です。 Sub MacroTest1() Dim keyWord As Variant Dim FirstAdd As String Dim UR As Range Dim c As Range Const col As Long = 1 '列数 keyWord = Application.InputBox("除外対象の文字列は?", Type:=2) 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
- ベストアンサー
- オフィス系ソフト
- エクセルで特定の行をマクロで削除したい。
Sub DelLines() Dim R As Range Do Set R = ActiveSheet.Range("A:A").Find(What:="ここにキーワード", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub 上記のソースだと一つのキーワードだけなのですが、複数のキーワードを追加したいのとブック全体(複数のシートから検索)で実行させたいのですが教えていただけませんか?
- ベストアンサー
- オフィス系ソフト
- 特定文字列を含む行を削除するマクロ
すみませんどなたか教えてください。 エクセルで商品の在庫管理をしておりまして、AP列に製品メーカー名が入っているのですが、 いくつかの(数十個)メーカーを省き削除したく思い、以下のようなマクロをググって作ってみましたが、 上手く動きませんでした。 1つのメーカーだけ記載した場合はうまく動きました。 やりたいことは1つのマクロの中に、数十個のメーカー名を記入しておき、そのメーカーを全件 検索して、AP列に文字列が含まれる場合は、その行を削除したいです。 宜しくお願い致します。 ~~~~~~ Sub DelLines1() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="softbank", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop Sub DelLines2() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="docomo", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop Sub DelLines3() Dim R As Range Do Set R = ActiveSheet.Range("AP:AP").Find(What:="au", LookAt:=xlPart) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub
- ベストアンサー
- Excel(エクセル)
- 特定列を削除したい
以下の同じフォルダに入った条件の合致したセルがある行を削除したいのです が色々検索しても下の処理にあてはまるようなものが見つかりませんでした。 どなたかお助けしていただけないでしょうか? お願いします。 特定条件合致行削除() Dim path$, wb As Workbook, wbName$ Dim ws As Worksheet, I& path = ThisWorkbook.path & "\" wbName = Dir(path & "*.xls") Do Until wbName = "" If wbName <> ThisWorkbook.Name Then Set wb = Workbooks.Open(path & wbName) = 2 For Each ws In wb.Worksheets ##################################################################### With ws この部分に特定範囲の中に条件(3つ)が含まれる行を削除する処理 を実行させたい。 I = I + 1 End With ###################################################################### Next DoEvents wb.Save End If wbName = Dir Loop Set wb = Nothing Set ws = Nothing MsgBox "第三処理が完了しました。処理完了です。", vbInformation, "処理確認" End Sub
- ベストアンサー
- オフィス系ソフト
- 特定文がある行を削除
特定分がある行を削除しようと思い、以下のように設定いたしました。 Sub DelLines() Dim R As Range Do Set R = ActiveSheet.Range("A:A").Find(What:="指定文", LookAt:=xlWhole) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop End Sub これを、全てのシートに適用するにはどのように書けばよろしいのでしょうか?
- ベストアンサー
- Excel(エクセル)
- 特定の文字を含まないセルの行を削除するには
いつもお世話になっております。 特定の文字列(下記では"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月以外のデータは削除するために作ったものです。
- ベストアンサー
- Visual Basic
- 指定した文字列が含まれる行を削除する
データの照合をしています。 指定した文字列が、「O列」に入っていたら、その行を削除し、 行をつめる というようなマクロを組みたいのですが、エラーがかかってしまいます。 (下のVBは、ネットで公開されていたのを使用させていただいております。) Sub Macro1() Const col As String = "A" '文字列が入力されている列 Dim idx As Long Dim keyWord keyWord = Application.InputBox("削除対象の文字列は?", Type:=2) If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then For idx = Cells(65536, col).End(xlUp).Row To 1 Step -1 If InStr(Cells(idx, col).Value, keyWord) > 0 Then ' If Application.CountIf(Rows(idx), "*" & keyWord & "*") > 0 Then Rows(idx).Delete End If Next idx End If End Sub 「下から3行目のNEXTに対応するforがない」とエラーがでます。 ご教授、お願いいたします。
- ベストアンサー
- オフィス系ソフト
- エクセル 最終行からの連続コピー
* すぐに回答を! エクセルC20からI51までデータを1日1行ずつ入力します。 データが入力されている最終行から上に連続する10行(最終行含む)をコピーしたいのですが、最終行から10行上をどのように認識させたらいいのか、わかりません。Offsetなど試してみましたがダメでした。 よろしくお願いします。 Sub dataコピー() Dim i As Long Dim j As Integer Dim rng As Range '最後尾から10行前までを選択 With Worksheets("月").Range(Cells(20, 3), Cells(51, 10)) For i = Cells(Rows.Count, 1).End(xlUp).Row To -10? If rng Is Nothing Then Set rng = .Rows(i) End If j = j + 1 If j >= 10 Then Exit For Next i 'コピー If Not rng Is Nothing Then rng.Copy Range("M1") Beep Else MsgBox "該当行は存在しません。", 48 End If End With Set rng = Nothing End Sub コードはこちらを参考にしました http://questionbox.jp.msn.com/qa5440189.html
- 締切済み
- オフィス系ソフト
- エクセル 最終行からの連続コピー
エクセルで最終行から上に連続する10行(最終行含む)をコピーしたいです。 途中、空白行が含まれている場合でも、最終行を特定し、コピーできるようにするには、下記のコードにどう手を加えたらよいでしょうか? どなたかアドバイスをお願いします。 Sub Test() Dim i As Long Dim j As Integer Dim rng As Range With ActiveSheet 'フィルタ .Range("A1").CurrentRegion.AutoFilter Field:=1 '行選択 With .AutoFilter.Range For i = .Cells(.Cells.Count).Row To 2 Step -1 If .Rows(i).Hidden = False Then If rng Is Nothing Then Set rng = .Rows(i) Else Set rng = Union(rng, .Rows(i)) End If j = j + 1 End If If j >= 10 Then Exit For Next i 'コピー If Not rng Is Nothing Then rng.Copy Worksheets("Sheet2").Range("A1") Beep Else MsgBox "該当行は存在しません。", 48 End If End With End With Set rng = Nothing なお、コードはこちらを参考にさせていただきました。 http://okwave.jp/qa3552420.html?ans_count_asc=1
- 締切済み
- その他MS Office製品
- VBA 特定の文字列を含む行を削除する方法
特定の文字列を含む行を削除する方法が知りたいです。 行を削除する方法はWebで見つけたのですが↓ ---------------------------------------------------- Sub 特定の文字列を含む行を削除() Dim c As Range Dim myRow As Long With Range("A:A") Set c = .Find("特定の文字列") Do While Not c Is Nothing Rows(c.Row).Delete shift:=xlUp Set c = .Find("特定の文字列") Loop End With End Sub ---------------------------------------------------- ↑行を指定している箇所のRowsを Columns RowをColomn に変更して以下の様にしてみました、 Columns(Colomn,c).Delete shift:=xlUp だめでした、、、。 VBAの知識が乏しく、組み立て方について理解が無いため、どうすればよいかさっぱりわからず、、 こちらで質問させて頂きました。。。 何卒宜しくお願い致します。
- ベストアンサー
- オフィス系ソフト
お礼
見事に思い通りになりました。 有難うございました。 自分の勉強不足を痛感しております。