エクセルVBAで指定した文字を検索しクリアする方法

このQ&Aのポイント
  • 初心者でもわかるエクセルVBAの使い方を解説します。指定した文字を検索して、それに一致するセルの値をクリアする方法について説明します。
  • エクセルVBAを使ってデータを取り込み、表を作成していると、一部のセルに不要な値が入っています。その要素を検索し、クリアする方法について解説します。
  • エクセルのVBAを使って、特定の文字列や数値を検索して、それに一致するセルの値をクリアする方法について説明します。初心者でも簡単に使える方法ですので、ぜひ試してみてください。
回答を見る
  • ベストアンサー

エクセルVBA 指定した文字を検索クリア

こんにちは! 過去記事を見てもわからず、質問させて頂きます。 VBAは初心者ですが、猛勉強しているので、ほんの少しは理解できます。 sheet内にAccessからデータを取り込み、Vlookなどの関数を使い、表を作成しています。 その中に、値がなく後ろにつけた"泊"や"名"、「0」が返っているセルが存在します。(数値と文字列) (図の色がついたセル) 例えば"泊"を置換などで処理すると、H;I列の青色のセルまで置き換わってしまいます… やりたいことは、図のG列からK列の青色のセルを残し、赤色と緑色のセルを削除したいです。 該当文字と数値を検索(完全一致のみ)して、削除。それをLoopして といったイメージです… ※削除とはセル自体を削除するのではなく、入力されているものを消す(クリアってことですかね) 表現が下手で申し訳ございません! 非常に行き詰っております… ご教示をお願い申し上げます。

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

  • ベストアンサー
回答No.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つのデータを返し、それに"泊"を足しています。 すいません。見落としていました。

et9985ap
質問者

お礼

>toshi_2010さん 返信が遅くなり、申し訳ありませんでした! 細かなご指導ありがとうございました! 複合関数は複雑で難しいですね… でも何とかなりそうです!頑張ってやってみます! お忙しい中、何度もご教示下しまして、 本当にありがとうございましたm(__)m

その他の回答 (3)

回答No.3

いづれにしても赤色・緑色のセルには関数を使っているということですので >赤色のセルの式は「=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」なのか の判断出来ないので削除する前に表示しない方がよいかと思います。

et9985ap
質問者

補足

>toshi_2010さん ご回答ありがとうございます! 赤色のセルですが、12番目のセル13番目のセルの2つのデータを返してとお伝えしました。ですが、この2つのセルのデータは どちらか片方に値がある場合、 両方に値がある場合、 両方に値がない場合、があります… ですので、ご教示頂いた式では必ず、"泊"が足されてしまいます… 緑色のセルに関しては、1つの値しかないので、できました!!! ありがとうございますm(__)m これに関してはマクロより関数の方が勝手がいいですね☆ 全部の値がVLOOKで持ってきた値がないので、「0」になってます… ですので、表示しない方がいいですね☆ 勉強になります!ありがとうございました!!! 赤色のセルの方、ご面倒をお掛けいたしますが、引き続きのご教示をお願いいたしますm(__)m

回答No.2

>その中に、値がなく後ろにつけた"泊"や"名"、「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)) 赤色のセルについて  どのようにこのセルに表示しているかわからないですが、恐らく削除ではなく"泊"や"名"を表示  しないようにすれば良いと思います。

et9985ap
質問者

補足

>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)
回答No.1

> 該当文字と数値を検索(完全一致のみ)して どこに定義されていますか? 削除すれば解決なのか、そもそも文字化けしないように取り込むことが目的なのか? > sheet内にAccessからデータを取り込み その部分からVBAとして記述してあって、それでおかしいということ? > その中に、値がなく後ろにつけた"泊"や"名"、「0」が返っているセルが存在します。 ACCESS側がクエリで、テキスト型の列を連結して取得している列がありはしませんか? 連結した結果が255文字を越えるデータは、2バイト文字の途中でもぶった切りされますので 文字化けが生じます。

et9985ap
質問者

補足

>bin-chanさん 早急なご回答ありがとうございました。 社内PCのみからの作業で、返信が遅くなり申し訳ありませんでした。 >どこに定義されていますか? >削除すれば解決なのか、そもそも文字化けしないように取り込むことが目 >的なのか? 説明不足で申し訳ございません。 No.2さんへの補足にも記載をいたしましたが、 単純に別sheetにアクセスからのデータを落としてきて、該当シート内にvlookにて値を持ってきているだけです… 仕様上、アクセスからはデータをまるまる持ってきている(外部データ取り込みでアクセスのクエリ)だけで、エクセル上で、データを整理しているというものです。 文字化けではなく、2つの値をくっつけて更に"泊"をつけているので、空白になっているセルには、"泊"が残ってしまいます… 関数で何とかとも思ったのですが、使用者がPCに強くない方ばかりなので、自動的に消せる、VBAを組み込んだ方が使い勝手はいいのではと考えたので、VBAでと質問いたしました。 ご面倒をお掛けいたしますが、引き続きよろしくお願いいたします。

関連するQ&A

  • EXCEL セル内の一部文字色を太字にしたい。

    EXCEL2003を使用しています。 アンケートの集計を行っています。 C・D・E列にコメントが入力されています。 その列それぞれのセル内の一部が、赤・青・緑と色分けされているので、その色の付いた文字を太字に変えたいのですが、どうしたらいいのでしょうか? 使用している色は、黒・赤・青・緑です。 VBAで変えられそうですが、全くわかりませんので、ご回答の程、どうぞよろしくお願いいたします。 また、色の数値の出し方も併せて教えてください。

  • Excelのセル内の文字列の文字色変更について

    申し訳ございません、どなたか教えていただけないでしょうか。 エクセルのセル内の文字列を、ある特定の文字列の時に文字色を変えたい。 例えば、赤、青、黄、桃、緑という文字列をセルの中に入れた時、 その文字の色がそれぞれ、 「赤」の時:赤色の文字色 「青」の時:青色の文字色 「黄」の時:黄色の文字色 「桃」の時:桃色の文字色 「緑」の時:緑色の文字色 というように自動的に設定をしたいのです。 条件付き書式では、3種類までならできますが、4種類以上だとダメですよね。 できればマクロではなく、セルの書式設定「ユーザー定義」で設定したいのですが、 公式はございますでしょうか。 数値によって色を変更する方法は、いろいろなサイトで確認しましたが、 文字列で色を変えるという方法がなかったもので質問をいたしました。 よろしくお願いいたします。

  • EXCEL VBA 別シートの文字をシート内で検索

    excel2003 VBAで SHEET2に格納されているセルの文字をSHEET1のB列1~9000程度までの文字列の中で一致または部分一致するものがあればそのセル(B列のセル)をSHEET3に順次A列に出力したいのですが、うまくできません。SHEET2に格納されている場所はA列で(SHEET1、SHEET2の文字とも増える可能性あり) 宜しくお願いします。

  • エクセル(VBA) 検索条件に文字色を含める

    エクセルについて質問です。 エクセルのバージョンは2007を使用しています。 基本的にはCOUNTIFS関数やSUMPRODUCT関数の考え方で複数条件を満たすセルの個数を数えたいのですが その検索条件のうちのいくつか(正確には3つの列)において、特定文字が何色かを見たいのです。 具体的には下の添付ファイルの備考A~備考Cの列のように、その3つの列のセルの中にそれぞれ黒文字(自動)、黒文字(自動)太字、赤文字、青文字が混在しており、その文字列の羅列の規則性としては 1.セル内の文字列は必ず、上で挙げた4種のフォントスタイルのうちのいずれかの # で始まる。 2.#A #B #C (#D) のように、セル内の文字列は一連の小文字列が半角スペースで区切られているとともにその一連の小文字列の最初の文字は必ず # もしくは (# であり、またその一連の小文字列は同一色同一の太さである。 3.(#A) のような、() で囲んだ一連の小文字列は黒文字(自動)スタイルだけであり、また1.でも述べたようにセル中の文字列の最初に来ることはない。 となっております。 そこでそれぞれの列について、黒文字(自動)もしくは黒文字(自動)太字もしくは青文字の # で始まるセルを検索し(つまり赤文字の # で始まるセルと何も記述のない空白のセルを除く)、 その3列を and もしくは or 条件で組み合わせ、更に1、2個条件を加えて該当する行の数をCOUNTIFS関数やSUMPRODUCT関数のように数え、返したいと思っております。 恐らくVBAを利用することとなると思います。まだまだVBAを自分で一から構築することは難しいのですが、ある程度VBAを読み解き理解していくことは可能なレベルですので、どうか大まかな構文の枠組みだけでもご教授いただけると幸いです。 よろしくお願いいたします。

  • エクセルで、文字の完全一致ではなく、文字の一部が含まれているかをチェックする方法

    質問させてください。 エクセルのA列の文字の一部に、B列の文字が含まれているかどうか、 をチェックする数式を教えて頂けないでしょうか。 例えば、 A列:「赤 青」、「白 黄」、「緑 黒」 B列:「赤」「青」「黒」 この場合、A列の「赤 青」と「緑 黒」のセルの横に○、 というようにしたいのですが。。 VLOOKやCOUNTIFでは、“文字の一部”というのはチェックできないようで、 かつ、LEFTやRIGHTも使いづらい場合です。 きっと簡単な数式があるのでは、と思いお尋ねしました。 どうぞ宜しくお願い致します。

  • VBAマクロ・・同一セルの検索と検索したセルの操作

    VBAマクロ・・同一セルの検索と検索したセルの操作  VBAのほぼ初心者です。  決められたセル(たとえばE100)に入力された文字列と同一の文字列を その列内の上(E1~E99)で検索する。 そして、検索できれば(たとえばE30)そのセルがある行(行30)を削除する。 なお、複数検索されれば、検索されたすべてのセルに対応する行を削除する。  というようなことをVBAのマクロで作成したいです。 FindメソッドとDo..Loop Whileを使って試行錯誤してみたのですが、うまくいきません。。  いい方法があれば、是非教えていただきたいです。  どうぞよろしくお願いいたします。

  • VBA 文字列→検索→置き換え

    Excel 2007です。 VBAで、特定のレンジのセルから、特定のセルに入った文字列を検索して削除するにはどうしたらよいでしょうか? 具体的にはB2:B100の中にあるA1セル内の文字列を削除する。といった感じです。 よろしくお願い致します。

  • vbaで文字列の件

    お世話になります。 エクセルVBAで、文字列の右から何文字列目以降を 緑色に着色したいのですが、どうしたら良いか分かりません。 offsetで隣のセルに切り出してから着色とかは出来たのですが・・、 どなたかご教授下さい。 宜しくお願い申し上げます。

  • エクセルVBAで、文字列の検索方法について

    先日、こちらで教えていただいたVBAがあります。 E列のセルの文字列の末尾が「計」のものを検索し、その行に色をつけるものです。 Sub iroiro() Dim x, y x = 1 Do If Right(Cells(x, 5), 1) = "計" Then For i = 2 To 5 Cells(x, i).Interior.ColorIndex = 3 Next End If x = x + 1 Loop Until Right(Cells(x, 5), 1) = "" End Sub これはばっちりで、助かっているのですが、今度は末尾ではなく、文字列中に「営業」という文字があるのを検索し、色をつけたいのです。 If Right(Cells(x, 5), 1) = "計" Thenを どう変えればいいのでしょうか?

  • エクセルVBA 検索クリア

    こんにちは! なかなか思うようには行かず… ご教示頂けませんでしょうか? エクセルのSheet内の様々なセルに文字や数値が混在しているものがあります。    A  B  C  D  E 1  35  〇  0  3名  30 2  20      0  0名  25 3  25  〇  3   名    5 4  13  〇  1  10名  10 5  20  ×  0   名   6 このような表の中のB5の"×"だけクリアする C1、C2、C5の"0"だけクリアする D3、D5の"名"だけクリアする というように該当文字or数字を完全一致したもののみクリア Sheet内を検索し、終了したら次の条件を検索というように、 複数の条件で行いたいのですが、どのようにすれば良いかがわかりません… 関数でもできるような気がしますが、他にも沢山のファイルがあり、毎回同じように整理をしなければならないので、VBAでできればと考えております。 どなたかお分かりの方、お教え下さいm(__)m よろしくお願いします!

専門家に質問してみよう