• ベストアンサー

Excelで、任意の言葉で始まる行のみを、行ごと一括で削除する方法を教

Excelで、任意の言葉で始まる行のみを、行ごと一括で削除する方法を教えて下さい! 頭から湯気が出そうです... 例えば、下記の場合 A... B... C... B... A... C... A... B... ↓このようにBで始まる行のみ一括で削除したいです A... C... A... C... A... マクロでも関数でも良いので、なるべく簡単な方法を教えてくださいませ よろしくお願い致します

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.7

補足情報です。 複雑な条件でフィルタ操作を行う場合のもう1つの基本操作である、数式を使ったフィルタオプションの設定の方法を提示していませんでしたが、数式1つで抽出できるので、こちらの方法の方が場合によれば簡単かもしれません。 No5の添付画像のレイアウトならC1セルを空白セル、C2セルに以下の式を入力し検索条件をC1:C2にしたフィルタオプションの設定を行ってみてください。 =AND(LEFT(A2,1)<>"★",LEFT(A2,1)<>"※") もしこの操作をマクロを使って実行したいなら、上記の操作を「マクロの記録」で記録すれば良いと思います。 このとき先頭の検索文字をセルに入力し、上記の数式をそのセルを参照する数式にしておけば、セルに除外文字を入力して上記のマクロを実行すれば該当データを抽出することができます(必要の応じて検索条件範囲は非表示にする)。

xsr
質問者

お礼

MackyNo1様 お礼が遅くなり、申し訳ございませんでした 今回も有用な方法を教えて頂き、誠にありがとうございました 前回の <>△*、<>※* に引き続き 今回の =AND(LEFT(A2,1)<>"★",LEFT(A2,1)<>"※") に関しても 自力では、まず考えも及びませんでした またも 応用とは基本の上に成り立っている事を再認識致しました どうもありがとうございました m(_ _)m

その他の回答 (6)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

No.4です! たびたびごめんなさい。 No.1さんの補足に >(実際は、※や★等の任意語が滅入るほどあります...) とありましたので似たような方法ですが、↓の画像のように任意語を1行目に入力しておいて、その語が1文字目にある行を削除する方法にしてみました。 Sub test() Dim i As Long Dim str As String For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 str = Left(Cells(i, 1), 1) If WorksheetFunction.CountIf(Range(Cells(1, 3), Cells(1, 4)), str) Then Rows(i).Delete (xlUp) End If Next i End Sub コード内のCOUNTIF部分の  Range(Cells(1, 3), Cells(1, 4)) は画像ではC1・D1セルにだけ任意語が入っていますので、そこだけを範囲指定しています。 もし仮に任意語が10個あるのであればL1セルまで任意語が入りますので、 Range(Cells(1, 3), Cells(1, 12)) となります。 この部分だけを変更すればいくら任意語が増えても対応できると思います。 (もし空白セルを範囲指定してしまうと、空白行も削除されます) 以上、何度も失礼しました。m(__)m

xsr
質問者

お礼

tom04様 ご回答頂き、ありがとうございます お礼が遅れてしまい申し訳ございませんでしたm(_ _)m さっそく試させて頂きました 任意語が複数あるとの補足にまで、お答え頂き本当にありがとうございました! 正にカルチャーショックとしか言いようがありません こんな魔法のような事を、こんな素人な私でさえ再現させて頂けるとは またまたモチベーションが高まりました! シート右クリックでコードを直接書けることさえ知りませんでしたし コードの意味すら、正直全然解りませんが (たくさんの任意語にまで対応出来る方法まで、詳細を教えて頂いたお陰で出来ました!) 同じソフトを使ってても、こうも奥は深いんだと痛感させられました 自分のちっぽけさが際立ち悲しい位でもあります(ToT) 暗号のようなコードをどれだけ見よう見まねで改造できるかは 今後の勉強次第だと思ってます たいへん貴重な方法を教えて頂きありがとうございます!m(_ _)m おかげさまで助かりました!

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.5

マクロを利用される場合も、まず基本はフィルタ操作をマスターすることです。 先頭文字が「★」または「※」から始まるデータを除外したいなら、以下のようなフィルタ操作をします。 バージョンが明記されていませんので2007の操作で説明すると、「データ」「フィルタ」「テキストフィルタ」「ユーザー設定フィルタ」(2003は「オプション」)でオートフィルタオプションのダイアログを出して、「★」「から始まらない」AND「※」から「始まらない」にします。 除外条件をなどをセルに入力して、フィルタを実行するにはフィルタオプションの設定を利用します。 添付画像のように1行目が項目名で2行目以下にデータがある場合、E1、F1セルに項目名をコピーし、E2セルに「="<>★*"」、F2セルに「="<>※*"」と抽出条件を入力します。 次に、2007の場合の操作で説明すると、「データ」タブの「並べ替えとフィルタ」の「詳細設定」でリスト範囲をA列全体を指定し、検索条件範囲に「E1:F2」セルを選択し、抽出先を「指定した範囲」にチェックを入れ「抽出範囲」に例えばC1セルを指定し「OK」すれば、添付画像のようになります。 これらの操作をマクロの記録で登録すれば、ボタン1つクリックするだけでE2セルとF2セルに入力した条件のデータを抽出することができます。

xsr
質問者

お礼

MackyNo1様 ご回答頂き、ありがとうございます お礼が遅れてしまい申し訳ございませんでしたm(_ _)m さっそく試させて頂きました 私は2003を使っていますが、だいぶ前にフィルタオプションの設定は現在も利用しています だいぶ前に自作した物に自分なりには、結構凝って多用してたつもりですが (見よう見まねで、修正に修正を重ねた結果なので 正直今、それと同じようなものを直ぐに作ることは出来ません と、言うより、詳しい事、記憶喪失のように、からっきし憶えていないのです...) 今回の事で、なんとなく思い出せました 検索条件範囲の、<>△*、<>※*等は、自分では考えも付かなかったです (自作の物は、一致する物だけを抽出してましたので、こんな方法もあろうとは!) またも、奥の深さを感じずにはいられません このたびは、貴重なご回答、どうもありがとうございました! "マクロを利用される場合も、まず基本はフィルタ操作を..." 奥の深いお言葉も、身に染みております お陰さまで、今の私の実力での出発点を見つけた思いでございます どうもありがとうございましたm(_ _)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんにちは! 一例です。 A列のセル内の文字で「B」から始まるものがあればその行を削除するようにしてみました。 操作したいSheet見出し上で右クリック → コードの表示 を選択し、↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test() Dim i As Long For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If Cells(i, 1) Like "B*" Then '「B」から始まる文字の場合は・・・ Rows(i).Delete (xlUp) End If Next i End Sub 他に良いコードがあればごめんなさい。m(__)m

noname#118989
noname#118989
回答No.3

わざわざ説明ありがとうございます。 私だったら別の列に連番をふって、 並び替えて、削除後、連番順に元に戻します。 マクロ勉強のためと言うことでしたら、 マクロの記述例は別の方に回答を委ねます。 すみません。

xsr
質問者

お礼

erlv様 ご回答頂きありがとうございます 教えて頂いた通り、別の列に連番をふってやってみましたら 今度はうまいこといきました! お陰さまで、このような方法もある事に気付けました どこかで必ず役に立ちそうな気がします! どうもありがとうございましたm(_ _)m

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

A列の2行目から、すなわちA2セルから下方に文字列があるとしてB1セルには削除したい文字列の先頭の文字を入力します。例えばBと入力します。 B2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(AND(A2<>"",LEFT(A2,1)<>B$1),MAX(B$1:B1)+1,"") 例えばC1セルから下方にに削除した後の文字列を並べて表示するとしたらC1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(ROW(A1)>MAX(B:B),"",INDEX(A:A,MATCH(ROW(A1),B:B,0))) なお、C列は式を使って表示されたものです。A列などが削除されますと消えてしまいます。それをなくすためにはC列を選択してコピーし、お望みのセルの位置で右クリックして「形式を選択して貼り付け」で「値」にチェックをしてOKします。

xsr
質問者

お礼

KURUMITO様 ご回答頂き、ありがとうございます。 みようみまねで試させていただきました 面白い位、簡単にサクっと出来たので驚きました 努力された結果である事はわかりますが このような応用技を即、思いつけるなんて、とっても羨ましい限りです! 別のモチベーションが上がってきてしまいました この方法も、大変、応用度の高い素晴らしい方法だと思います どうもありがとうございましたm(_ _)m

noname#118989
noname#118989
回答No.1

言葉と言うのは、文字ということでしょうか? 「ミカン」と「みかん」など表記の違いの混在はあるのでしょうか? あと、「みかん」や「み かん」などスペースの有無や半角全角など。 お聞きした限りでは、 私だったらフィルターで集めて削除します。

xsr
質問者

補足

さっそくのご回答、どうもありがとうございますm(_ _)m さっそくですが 全て★●※などの全角1文字の記号で区別したいです。 実際は、EXCEL外のデータを整形したいが為にコピペしている状態なので 下記のように、空行や線等も混じっております (元に戻さなくて済むように削除はしたくありません) 例 ○あああ ★みかん ●りんご ○あああ ━━━━ ※かめら ※あああ ○あああ ※りんご -------- ●あああ ○かめら ★りんご △あああ ○かめら ★かめら ■■■■ ○あああ △りんご ○あああ ※あああ ○りんご ★あああ 上記から、※と★から始まる行を一括で削除した場合は下記のようになります ●りんご ○あああ ━━━━ ○あああ -------- ●あああ ○かめら △あああ ○かめら ■■■■ ○あああ △りんご ○あああ ○りんご 現状は、下記のように段階を踏んでいますが、これらを一括で行ないたいです。 (実際は、※や★等の任意語が滅入るほどあります...) 1 すべて検索を実行 ※ 2 結果を全選択 3 編集>削除>行ごと 4 すべて検索を実行 ★ 5 結果を全選択 6 編集>削除>行ごと たぶん、上記等の幾つかのパターンをマクロで作ってしまえばよいのではないかとも思いましたが マクロ自体、きっちりは理解しておらず、見よう見まねなのが原因だと思いますが かれこれ数時間、いくらやってももうまくいきません... こんな状態ですが、簡単に教えて頂けましたら、幸いです。 よろしくお願い致しますm(_ _)m

関連するQ&A