• ベストアンサー

VBAで文字列検索の方法

エクセルで実現したいVBAです。 セル内に入力されている文字列に任意の文字が含まれているかどうかを判定したいのです。 例えば, 「特別値引対応商品」と入力されているセルに 「値引」という文字が含まれているかどうか のチェックをしたいのです。 検索する文字列(上記の場合なら「値引」)は固定でかまわないのですが,どのようにすれば実現できるでしょうか。 関数を探してみたのですが,ないように思います・・・。

  • elwin
  • お礼率10% (1/10)

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

  • ベストアンサー
  • bubebube
  • ベストアンサー率55% (11/20)
回答No.3

Like関数もお勧めですよ。 「値引」がA1セルに存在した場合、メッセージを表示します。 If Sheet1.Range("A1").Value Like "*値引*" = True Then MsgBox "「値引」が含まれています" End If

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

既回答は、関数やセル総なめ法ですがVBAらしくFindを使ってみました。これは参考にしてください。 Sub test01() Range("a1").Select Range("a1:a10").Find(What:="中央", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _ .Activate a = ActiveCell.Row MsgBox ActiveCell.Row p01: If n = a Then GoTo p02 Range("a1:a10").FindNext(After:=ActiveCell).Activate '見つかった時の処理 MsgBox ActiveCell.Row n = ActiveCell.Row GoTo p01 p02: End Sub テストデータはA1:A7で 大阪市城東区 大阪市中央区 東京都中央区 京都市北区 東京都立川市 埼玉県越谷市 福岡市中央区 で2、3,7と表示します。 Findはぐるぐる回りするのでその防止策をとっています。 始めから見つからないケースの対策をとっていないので 勉強してください。時間がなくて済みません。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

こんにちは。maruru01です。 ワークシート関数でも出来ますよ。 FIND関数を使用します。 A1にデータが入っているとすると、 =IF(ISERROR(FIND("値引",A1)),"なし","あり") で、"値引"という文字列があれば「あり」、なければ「なし」と表示されます。 ワイルドカードを使用してあいまい検索をしたい場合は、SEARCH関数を使用して下さい。

noname#11856
noname#11856
回答No.2

InStr関数を調べてみてください。 以下、アクティブセル内に"値引"という文字が見つかったらセルを赤くするという例です。 If InStr(ActiveCell, "値引") > 0 Then ActiveCell.Interior.Color = RGB(255, 0, 0) End If

回答No.1

こんにちは IT_F = 0 For I = 1 To Len(Cells(1, 1)) If Mid(Cells(1, 1), I, 2) = "値引" Then IT_F = 1 Exit For End If Next I If IT_F = 1 Then MsgBox "一致しました。" Else MsgBox "一致しません。" End If こんな感じでどうでしょう? Cells(1, 1)は"A1"セルという意味です。 中の値には変数も使えます。 MID関数はCells(1, 1)の文字列のI番目から2文字の値を取得させています。 例えば"値引き"にするなら3文字なので Mid(Cells(1, 1), I, 3) = "値引き" に変えればいいですね。 わかりづらくてすいません。

関連するQ&A

  • Excel VBAで文字列の日付を判定

    Excel VBAで文字列の日付を判定 文字列の書式で”19900101”などとセルに入力されている場合に実際に存在する日付かを判定する方法はありますでしょうか? たとえば、19990132などと入力されている場合はエラーにしたいのです。ISDATEを使うのかともおもいましたがうまくいきません。 よろしくお願いします。

  • エクセルVBAで文字列を判定する方法

    たとえばセルA1に何か入力した時にその入力したものが、数列か文字列かを判定する方法はVBAでありませんか?よろしくお願いします。

  • EXCELで文字列の特定の文字の位置を知る方法

    EXCELで文字列の特定の文字の位置を知る方法 EXCELでセル中の文字列、例えば、"abc 4/3 5/5 6/4" の最後の"/"の位置を知る方法を関数の組み合わせで出来ますか? 教えてください。"/"の数は任意で最後の"/"の位置を知りたいのですが??? どうかよろしくお願いします。VBAでなく関数の組み合わせでお願いします。

  • 文字列検索の参照文字列の指定について

    Excelでセルに任意の文字列をペーストします。そのセルは別のブックにリンクしているのでペーストする度にリンク先のセルでは文字列が更新されます。リンク先のブックにはワークシートが10あっていづれかのシートのA列にその文字列がある事になっています。更新された文字列を検索する作業を繰り返すのでマクロで組み込もうと思ったのですがFIND関数にしても、VBでCell.Find(What:=....と書くにも参照する文字列を直接指定してやらないと動きません。参照する文字列が相対的に変化するので「特定のセルの中に入力された文字列」を参照してブック内を検索したいということなのですが、実現するにはどうしたらようでしょうか?

  • エクセルVBA:文字列での検索

    エクセルVBAで、在庫管理をしようとしています。初心者です。 4個のListboxをそれぞれ選んでいくと、任意の商品名になるようにしています。 そこで、選んでもらった後、 Listbox1.List(Listbox1.ListIndex) & Listbox2.List(・・・・ というように4個のListboxから選ばれた文字列をつなぎ、別シートの在庫データベースの「商品名」と「Listboxをつなぎ合わせた文字列」と同じのを探させて、在庫を引き落とすようにしています。 ですが、できる場合とできない場合があります。 何ででしょう? 文字列で突き合わせると、見た目が同じ場合でも違うと認識されることがあるのでしょうか?(半角全角が違うとか、最後にスペースが入っているとかはないです。試しにセルに貼り付けてvlookupで検索してみると、できました。)

  • エクセル 文字列検索と検索した文字列が含まれるセルへのジャンプ

    エクセル教えてください。 VBAは使ったことがありません。 現在Q&Aを作っています。 かなりボリュームが増えてしまったので、 文字列検索ができるようにしたいと思っています。 そこで、あるセルに調べたい文字列を入力し、 検索ボタンを押すと、その文字列が含まれるセルにジャンプする。 こんな機能は、エクセルでできませんでしょうか? マクロを組んだりすればよいのでしょうか? 教えてくださいー。

  • vbaでvlookup

    エクセルのVBAについて。 指定した範囲の中から検索条件に一致したデータを検索し、取り出してくれる関数vlookup をVBAで実現したいのですが、 目標として、エクセルのセル(列)に、値を入力されているとします。 VBAを実行するボタンをクリックすると、、、 その値に対応する文字列(事前に用意)をその値の右のセルに自動で入力させたいです。 このVBAを作ることが目標です。 vbaでvlookupを実現でなくても、それよりも簡単な方法があれば教えていただきたいです。 お手数ですが、よろしくお願いします。

  • VBAで文字列を圧縮、復号したい

    以下のサイトと同じことをVBAで実現できないでしょうか? JavaScriptで文字列を圧縮する https://setchi.hatenablog.com/entry/2013/11/09/114432 元の文字列:エクセル 圧縮された文字列:U3U1VrUwUnW0UIUy3KAMJycww1jV0QkA 復号された文字列:エクセル データの復号をすることになり、エクセルで処理を行いたいと思ってます、データは圧縮された文字列Base64のようで、サイトなどで調べVBAでBase64の復号を試しましたが正しく文字列にならず、上記のサイトで試したところ正常な文字列に復号されました。これをなんとかVBAで実現したいと思っとおります、何卒、ご教授お願いします。

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

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

  • エクセル ある文字列を入れるとある文字列を返す

    エクセルでの関数、ど素人です。一応自分で調べたのですが、無理なので質問させていただきます。よろしくお願いいたします。 エクセルで、時刻ですが文字列として1745~2345までを手入力します(1745,とか2000とか2330とか。。。。。) 入れた文字列によって、すぐ横のセルに1745、1800、1815であれば8.00、1830からは0.25刻みで8.25、1845であれば8.50、1900であれば8.75。。。。2330であれば13.25、2345であれば13.50と言ったように、入力した文字列に対しある特定の文字列を自動的に入れたいのですが、どのような関数を使えばよろしいのでしょうか。 私が行おうとしたのは、別シートに文字列一覧を作り、if(特定のセル(手入力するセル)=別シートの1745~2345まで、横のセル=別シートの8.00、8.00、8.00~13.50まで)や、sumif、lookupを使ってみましたが撃沈です。 どなたか教えていただきたく、お願いいたします。

専門家に質問してみよう