- ベストアンサー
エクセルVBAで特定文字以外の行を削除する方法
- エクセルのマクロを利用して特定文字のある行以外を削除する方法を解説します。初心者でもわかりやすい手順を紹介します。
- 具体的な手順としては、(1)特定列を削除、(2)行を挿入、(3)セルを結合、(4)一部のセルを結合、(5)ヘッダー行を作成、(6)特定文字を含まない行を削除します。
- マクロを実行することで、指定した処理を一括で実行することができます。また、保存もしくは別名保存でxlsx形式で保存が可能です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あと少しですね。 (1)~(5)までのマクロ記録が出来たらマクロの記録を一度停止します。 「表示」→「マクロ」から記録されたマクロを選択して「編集」をクリックします。 以下のようなマクロのコードが記録されているとおもいます ___________________ Sub Macro1() ' ' Macro1 Macro ' ' Columns("B:B").Select Selection.Delete Shift:=xlToLeft Rows("1:1").Select (中略) ActiveCell.FormulaR1C1 = "案件" ActiveCell.Characters(1, 2).PhoneticCharacters = "アンケン" Range("I1").Select End Sub  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 上記コードの最終行「End Sub」の手前に以下のコードを追加してください。 ___________________ retu = "D" word = InputBox(retu & "列に指定した文字が含まれていない行を削除します。" _ & vbCrLf & "検索する文字を入力してください。") For i = Range("D" & "65536").End(xlUp).Row To 2 Step -1 If InStr(1, Range(retu & i).Value, word) = 0 Then Rows(i).Delete End If Next i  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 「Microsoft Visual Vasic」のウィンドウを×で閉じてから再度「表示」→「マクロ」よりマクロを実行してください。 入力を求めるダイアログが表示されますので質問の例ですと「ABC」を入力して頂ければ 記録した(1)~(5)までと、対象のD列よりABCが含まれていない行が削除されます。 D列以外を検索対象としたい場合は追加したコードの「retu="D"」の部分を対象の列記号に置き換えてください。 また記録されたコードには不要な部分も含まれている場合が結構ありますので、無駄を省く(実行時間の短縮や効率化等)が適切に行えるようになればなお良いと思います。 記録されたコードを理解(勉強)して内容が把握できるようになればコードをいちから記述することも出来ますので頑張ってください。
その他の回答 (1)
- kuma56
- ベストアンサー率31% (1423/4528)
(1)から(5)までができているんなら、あとは簡単じゃないのかな? (6)は最期じゃなくても、実行前のデータの段階で他のデータを削除しても(1)から(5)の実行には影響はないんじゃないかな? だとしたら、コメントボックスでもどこかのセルでもいいから、残すべき対象の「株式会社 ABC」と入力しておいて、J列などに、それとデータの会社名がイコールなら 1 、違えば 0 のような計算式を入れてやり、それをキーにソートして、J列が 0 のデータだけを削除してから、(1)から(5)の実行・・・・・・だったら、自力でマクロが組めるだろうし解説もいらんのじゃないかなぁ?
お礼
ありがとうございました。 色々勉強したいと思います^^
補足
ご回答ありがとうございます。 >J列などに、それとデータの会社名がイコールなら 1 、違えば >0 のような計算式を入れてやり、それをキーにソートして、J列>が 0 のデータだけを削除してから、(1)から(5)の実行・・・・・・ 丁寧に教えてくださってありがとうございます。 ですが、文章は理解できますが、上記のやり方がわかりません。。 関数でやるんですよね? その関数自体というか、それもわからないので、どうしようもないのです。 お手数お掛けしました。
お礼
丁寧なご回答ありがとうございました。 すごく助かりました。 贅沢を言わせて頂くと入力するのではなく、 決まった文字列をマクロ上に入れておいて削除する方法も知りたいです^^ もしお時間があるようでしたら、ご回答頂けたらなぁと思います。 ありがとうございました。 また回答No1の方もありがとうございました。 知りたい内容は回答No2の方でしたので、 回答No2の方をベストアンサーにさせて頂きます。