- ベストアンサー
エクセルVBAで指定した文字を検索しクリアする方法
- 初心者でもわかるエクセルVBAの使い方を解説します。指定した文字を検索して、それに一致するセルの値をクリアする方法について説明します。
- エクセルVBAを使ってデータを取り込み、表を作成していると、一部のセルに不要な値が入っています。その要素を検索し、クリアする方法について解説します。
- エクセルのVBAを使って、特定の文字列や数値を検索して、それに一致するセルの値をクリアする方法について説明します。初心者でも簡単に使える方法ですので、ぜひ試してみてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>赤色のセルの式は「=IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0)),"",(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0))) &" "& IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)),"",(VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)))&"泊"」 以下でどうでしょう。 どちらか片方に値がある場合に"泊" 「=IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,1,0)),"",IF(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0)="","",VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0)&" ")&IF(VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)="","",VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)&" ")&IF(OR(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0)<>"",VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)<>""),"泊",""))」 両方に値がある場合に"泊" 「=IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,1,0)),"",IF(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0)="","",VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0)&" ")&IF(VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)="","",VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)&" ")&IF(AND(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0)<>"",VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)<>""),"泊",""))」 12も13も同じVLOOKUPなのでISERRORで見つかったか判断、エラーだったら"" そうじゃなかったら表示するIF(3つのIFをつなぐ)としました。 参考にIFの入れ子(ネスト)は次のように考えると楽ですよ。 FIF(条件1,"",式1)・・・一番外側のIF ↓ IF(条件2,"",式2)・・・入れ子にしたいIF ↓ FIF(条件1,IF(条件2,"",式2),式1) ↓ どんどん増やします >2つのデータを返し、それに"泊"を足しています。 すいません。見落としていました。
その他の回答 (3)
- toshi_2010
- ベストアンサー率43% (25/57)
いづれにしても赤色・緑色のセルには関数を使っているということですので >赤色のセルの式は「=IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0)),"",(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0))) &" "& IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)),"",(VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)))&"泊"」 >2つのデータを返し、それに"泊"を足しています。 以下のようにIF文を入れ子(ネスト)にすればできます。 「=IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0)),"",IF(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0)="","",VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)&"泊"))」 vlookupの結果がエラーだったら""、 そうでなかったら さらにvlookupの結果=""の場合に"" そうでなかったらvlookupの結果に"泊"を足す。 >緑色のセルの式は「=IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,6,0)),"",(VLOOKUP($B4,'010問合せDATA'!$A:$W,6,0)))」です。 「=IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,6,0)),"",IF(VLOOKUP($B4,'010問合せDATA'!$A:$W,6,0)="","",VLOOKUP($B4,'010問合せDATA'!$A:$W,6,0)))」 マクロにするとしたら緑色のセル If Cells(ix,iy).Value = "泊" then Cells(ix,iy).Value = "" と考えたのですが 緑色のセルの式はVLOOKで持ってきた結果「0」なのか、 VLOOKで持ってきた値がないので「0」なのか の判断出来ないので削除する前に表示しない方がよいかと思います。
補足
>toshi_2010さん ご回答ありがとうございます! 赤色のセルですが、12番目のセル13番目のセルの2つのデータを返してとお伝えしました。ですが、この2つのセルのデータは どちらか片方に値がある場合、 両方に値がある場合、 両方に値がない場合、があります… ですので、ご教示頂いた式では必ず、"泊"が足されてしまいます… 緑色のセルに関しては、1つの値しかないので、できました!!! ありがとうございますm(__)m これに関してはマクロより関数の方が勝手がいいですね☆ 全部の値がVLOOKで持ってきた値がないので、「0」になってます… ですので、表示しない方がいいですね☆ 勉強になります!ありがとうございました!!! 赤色のセルの方、ご面倒をお掛けいたしますが、引き続きのご教示をお願いいたしますm(__)m
- toshi_2010
- ベストアンサー率43% (25/57)
>その中に、値がなく後ろにつけた"泊"や"名"、「0」が返っているセルが存在します。(数値と文字列) "泊"や"名"・・・どのようにこのセルに表示しているかわからないと答えようがないです。 >やりたいことは、図のG列からK列の青色のセルを残し、赤色と緑色のセルを削除したいです。 画像が粗くて緑色のセルに「0」が返っているとしか見えませんので、緑色のセルについて考えてみました。 >該当文字と数値を検索(完全一致のみ)して、削除。それをLoopして といったイメージです… >※削除とはセル自体を削除するのではなく、入力されているものを消す(クリアってことですかね) VBAというより関数で可能かと思います。削除ではなく表示しなければ良いと思います。 緑色のセルについて vlookupを例にするとIF関数と組み合わせて =if(vlookup(A1,$B$1:$C$10,0,3)<>"","",vlookup(A1,$B$1:$C$10,0,3)) 赤色のセルについて どのようにこのセルに表示しているかわからないですが、恐らく削除ではなく"泊"や"名"を表示 しないようにすれば良いと思います。
補足
>toshi_2010さん 早急なご回答ありがとうございました。 社内PCのみからの作業で、返信が遅くなり申し訳ありませんでした。 >"泊"や"名"・・・どのようにこのセルに表示しているかわからないと答えよう >がないです。 説明不足で申し訳ございません。 別sheetにアクセスからのデータを落としてきて、該当シート内にvlookにて値を持ってきております。 赤色のセルの式は「=IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0)),"",(VLOOKUP($B4,'010問合せDATA'!$A:$W,12,0))) &" "& IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)),"",(VLOOKUP($B4,'010問合せDATA'!$A:$W,13,0)))&"泊"」 2つのデータを返し、それに"泊"を足しています。 緑色のセルの式は「=IF(ISERROR(VLOOKUP($B4,'010問合せDATA'!$A:$W,6,0)),"",(VLOOKUP($B4,'010問合せDATA'!$A:$W,6,0)))」です。 上記共に、値が入っていないものに関して、空白を返しているので、"0"や"泊"が残ってしまいます… Sheet自体を値貼り付けし、別名保存などをして扱います。 他にも沢山のxlsファイルがあり、それらにも対応できるようVBAで、不要な文字や数値をクリアできればと思い、VBAでと質問した次第でございます。 ご面倒をお掛けいたしますが、引き続きご教示をお願い申し上げます。
- bin-chan
- ベストアンサー率33% (1403/4213)
> 該当文字と数値を検索(完全一致のみ)して どこに定義されていますか? 削除すれば解決なのか、そもそも文字化けしないように取り込むことが目的なのか? > sheet内にAccessからデータを取り込み その部分からVBAとして記述してあって、それでおかしいということ? > その中に、値がなく後ろにつけた"泊"や"名"、「0」が返っているセルが存在します。 ACCESS側がクエリで、テキスト型の列を連結して取得している列がありはしませんか? 連結した結果が255文字を越えるデータは、2バイト文字の途中でもぶった切りされますので 文字化けが生じます。
補足
>bin-chanさん 早急なご回答ありがとうございました。 社内PCのみからの作業で、返信が遅くなり申し訳ありませんでした。 >どこに定義されていますか? >削除すれば解決なのか、そもそも文字化けしないように取り込むことが目 >的なのか? 説明不足で申し訳ございません。 No.2さんへの補足にも記載をいたしましたが、 単純に別sheetにアクセスからのデータを落としてきて、該当シート内にvlookにて値を持ってきているだけです… 仕様上、アクセスからはデータをまるまる持ってきている(外部データ取り込みでアクセスのクエリ)だけで、エクセル上で、データを整理しているというものです。 文字化けではなく、2つの値をくっつけて更に"泊"をつけているので、空白になっているセルには、"泊"が残ってしまいます… 関数で何とかとも思ったのですが、使用者がPCに強くない方ばかりなので、自動的に消せる、VBAを組み込んだ方が使い勝手はいいのではと考えたので、VBAでと質問いたしました。 ご面倒をお掛けいたしますが、引き続きよろしくお願いいたします。
お礼
>toshi_2010さん 返信が遅くなり、申し訳ありませんでした! 細かなご指導ありがとうございました! 複合関数は複雑で難しいですね… でも何とかなりそうです!頑張ってやってみます! お忙しい中、何度もご教示下しまして、 本当にありがとうございましたm(__)m