• ベストアンサー

エクセルVBAでの文字中の文字の検索について

例えば  A    1ながらやすだ物産 2やおい物産 3ながらおかだ物産 というデータに対して”ながら”を含む文字列があった場合 その行のC列に”ながら"と入力するような簡単、簡潔なVBAの書き方を おしえていただけないでしょうか、よろしくお願いします。   A      B     C 1ながらやすだ物産      ながら 2やおい物産          3ながらおかだ物産      ながら

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

関数でも出来ますけど、、、 対象範囲(例だとA1:A3)を選択してから実行します。 Sub test() For Each r In Selection  If InStr(1, r.Value, "ながら", vbTextCompare) > 0 Then    r.Offset(0, 3).Value = "ながら"  End If Next r End Sub

sha-penn
質問者

お礼

ありがとうございます解決しそうです^^

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 関数なら、単に、以下のようにすればよいのでは? =IF(ISERROR(FIND("ながら",A1)),"","ながら") VBAを使うほどではないような気がしますね。 だから、関数をそのまま当てはめてしまえばよいのではないでしょうか? Sub TestSample1()   Dim myAdd As String   myAdd = Selection.Address 'マウスで選択   Selection.Offset(, 3).Value = _   Evaluate("=IF(ISERROR(FIND(""ながら""," & myAdd & ")),"""",""ながら"")") End Sub なお、VBAのコードのほうは、5000件以上になると、Version によっては、うまくいかないことがありますが、抜き出しスピードはひじょうに速いです。

sha-penn
質問者

お礼

ご回答ありがとうございます VBA中に関数を入れるやりかたもあるんですね、勉強になりました^^

全文を見る
すると、全ての回答が全文表示されます。
  • zenjee
  • ベストアンサー率47% (50/106)
回答No.3

>関数だとどのようにやるのでしょうか? =IF(ISERROR(FIND("ながら",A1,1)),"",MID(A1,FIND("ながら",A1,1),3)) でいかがでしょうか

sha-penn
質問者

お礼

お返事ありがとうございます、勉強になりました^^

全文を見る
すると、全ての回答が全文表示されます。
noname#27115
noname#27115
回答No.2

下ので、いけます。 Sub TEST() Dim i As Long Dim strName As String strName = "ながら" For i = 1 To Range("A65536").End(xlUp).Row If InStr(1, Cells(i, 1), strName) <> 0 Then Cells(i, 3) = strName End If Next i End Sub もっとも、VBAでなくて関数でもOKと思いますが・・

sha-penn
質問者

お礼

ありがとうございます 関数だとどのようにやるのでしょうか?あまりしらなくて^^;

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル2003のVBAを教えて

    エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、    データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目  (1):種類だけを(C列)に取り出す。  (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。  (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列)   文字(B列) AA       あああ BB       いいい BB       いい BB       いいい CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列)    文字(B列) あああ AA        あああ いいい BB        いいい BB        いいい BB        いいい うう CC        うう CC        うう ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ

  • EXCEL VBAで頭の5文字と語尾の5字が一致する語の検索方法について

    すいませんEXCEL VBAで教えていただきたいことがあります。 A列: 1行:"山手線高田馬場" 2行:"中央線西国分寺" 3行:"横須賀線逗子海岸" 4行:"南武線東府中本町" ・ ・ (100行目までデータが入力されている) D列: 1行:"横須賀線豆子海岸" 2行:"南部線北府中本町" 3行:"湘南新宿パイン上尾" 4行:"山手線低田馬場" 5行:"中央線東国分寺" 6行:"南部線南府中本町" ・ ・ (150行目までデータが入力されている) これらのデータが入っているとします。 ここで、 B列: A列の各データの最初の3文字と最後の3文字が一致するD列の行数をA列に対応する行に記載。 なお、該当するデータが必ずD列に存在するとは限りません。(該当無しのときはB列のセルは空欄) 1行:"4" 2行:"5" 3行:"1" 4行:"2" ・ ・ C列:A列のセルの最初と最後の3文字が一致するD列のデータが2つある場合はA列に対応する行に記載 1行:"" 2行:"" 3行:"" 4行:"6" ・ ・ このB列とC列の処理をEXCEL VBAで行うにはどうしたらいいのでしょうか。 Dim i as integer i = i + 1 Do Until Loop というような式を使うんじゃないかという気はしますが 具体的な式が思い浮かびません。 よろしくお願いします。

  • Excel VBAによる検索処理?

    Excelで以下の例のように、A列・B列に入力されているとします。A列を検索して、C列にB列の値を返す式を考えてますが、さっぱりわかりません。VBAとかも正直素人ですが、サンプルもしくは考え方を教えていただければと思います。以下の処理内容です。 ・AXセルが「B」であった場合、次のセル(A(X+1))を検索し、次が空白になるまで検索し、空白になる前の最後の行のB列の値をCXセルに返す。該当しない場合は空白のまま 下記の例ですと3行目、8行目のB列の値を2・3、6-8行目のC列のセルに返すことになります。よろしくお願いいたします。 (処理前) ___A__B__C ------------- 1 2__B__2 3__B__3 4______4 5______5 6__B__6 7__B__7 8__B__8 9______9 (処理後) ___A__B__C ------------- 1 2__B__2__3 3__B__3__3 4______4 5______5 6__B__6__8 7__B__7__8 8__B__8__8 9______9

  • ExcelのVBAで連番を振る。

    A列が空白で、B列に1行目から***行目(毎回変わる)までデータが入力されている時、 A列に、1から***まで(B列のデータが終わるまで、連番を振るにはどんなVBAを かいたらいいのでしょうか? お願いします。

  • Excel 複数セル内の文字列を検索する関数

    シート1にはA列に会社名、B列に業種が入っています。シート2のC列にシート1のA列の会社名を含む文字列が入っています。ここで、C列にA列の会社名が含まれていた場合、シート2のD列に会社名に対応する業種を入力したいと考えています。データ数は100-200行ほどです。 関数で表現したいと考えているのですが、簡潔に表現する方法が思いつきません。ご協力お願いします。

  • エクセル2003のVBAを教えてパート2

    エクセル2003のVBAを教えてください。 対象データ(2種類のデータ混じっている)があり、文字1(A列)、文字2(B列)が重複する行を削除するエクセルVBAを教えて下さい。 ●対象データ:文字1(A列)、文字2(B列)、種類 (C列) データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目 文字1(A列)と文字2(B列)がどちらも同じ場合は、1行消して、種類のセルを空白にする。 文字1(A列)が同じ文字2(B列)が違う場合は、2行ともそのまま残し、種類のセルもそのまま残す。 文字2(B列)が同じ文字1(A列)が違う場合は、2行ともそのまま残し、種類のセルもそのまま残す。 ●対象データ 文字1(A列)  文字2(B列)   種類 (C列)          あああ      朝朝朝朝          いいい      朝朝朝朝          いいい      夜夜夜夜          いうえ       夜夜夜夜 BB       おおお      朝朝朝朝 BB       おおお      夜夜夜夜 CC       かかか      朝朝朝朝 CC       ききき      夜夜夜夜 DD       くくく        朝朝朝朝 EE        くくく        夜夜夜夜 ●VBAの結果(このようになるVBAを教えてください。) 文字1(A列) 文字2(B列) 種類 (C列)             あああ     朝朝朝朝             いいい                  いうえ      夜夜夜夜 BB          おおお      CC          かかか     朝朝朝朝 CC          ききき      夜夜夜夜 DD          くくく        朝朝朝朝 EE          くくく        夜夜夜夜 ※              いいい           →「朝朝朝朝」のみ削除             いいい      夜夜夜夜→行削除 BB          おおお            →「朝朝朝朝」のみ削除 BB          おおお      夜夜夜夜→行削除

  • エクセル:該当日にアラートを出す。

    お世話になります。 エクセルでデータ集計をしています。 毎日、案件が増えるタイプの書類で1行目が各項目名、2行目からがデータです。 A列にデータ入力日を入力しています。B列に標題を入力しています。 そこで、C列に、入力日から3日たつとアラートを表示させるようにしたいのですが、これはVBAでないと難しいでしょうか。 関数でもVBAでもかまいません。 簡潔にできるのが望ましいのですが、知識がなく、わかりません。 どなたか、お分かりでしたら、ご教授ください。

  • Excel VBAでデータを自動処理したい

    Excelで大量のデータ処理をしなくてはならないのですが、以下の処理をExcel VBAで自動処理できないでしょうか? どなたかお知恵をお貸しください。 (1)A、B、C列からなるリストがあります。A,B列にはそれぞれオートフィルタが設定してあり、C列は空白です。A列、B列にそれぞれ条件を設定し、抽出したデータのC列(空白)に特定のデータを入力します。A列、B列2つの条件の組み合わせが100通りくらいあり、現在手動でオートフィルタを設定し、C列にデータを入力しております。例えばA,B列の条件の組み合わせと、それに対応するC列に入力するデータを表にしたテーブルを別に作り、A,B列の条件を自動に設定して、抽出し、C列にデータを自動に入力することを、テーブルの一番上の行から最後の行まで繰り返す、というようなことをVBAでExcelにしてもらいたいのです。自分でちゃんと勉強し、調べて、それでも分からなかったらお聞きするというのが筋だと思うのですが、今この仕事に追われて、時間がありません。(ほとんど毎日午前様です。)この仕事が片付いたら、じっくりVBAを勉強したいと思っております。どうぞよろしくお願いいたします。

  • エクセルでVBAのマクロを組みたい

    VBA初心者です。エクセルで大量の情報があるとき、A列の文字列が”****”であって、さらにB列の文字列が”++++”であるときの、C列の値を検索したい。それを1行目から最下行まで行いたい場合、どのようなプログラムになりますか、教えてください。よろしくお願いします。

  • エクセルVBA及び関数

    初心者です。お教えお願いします エクセル2003です 空白行及び0をなくしたいのですが(C列を入力された時点で自動でE列のようにしたい) 関数の場合及びVBAのシートコードを両方教えていただけないでしょうか VBAのコードは勉強の為です Sheet1    A    B     C     D     E     F 16          文字A        文字A 17          文字B        文字B 18            0         文字C 19          文字C        文字D 20            0         文字E 21          文字D        文字F      22      23          文字E 24 25          文字F 文字はC16~C80まで入っております B16~E80までのセルのみで行いたいのですが 他の場所は関数やグラフ等がすでに入ってますのでいじりたくありません E16~をフォームのコンボボックスのリストにしようと思ってます よろしくお願いましす

専門家に質問してみよう