• ベストアンサー

Excelで特定の文字列があるかないかの検査

Excel VBAで文字列を調べて、そのセルに文字列が存在すれば切り抜いて変数に保存するという作業を行いたいと 思っています。例えば、本という列があるとします。本の列には、 $$book=本 $$books=本部類 という値が入っていたりします。"="以降を切り抜いて、bookは列1、booksは列2に挿入したいと思います。 この場合、"本"という値は列1へ、"本分類"という値は列2へ入ることになります。 この文字列の調べ方がわかりません。Instr関数を使うことを考えたのですが、どちらの値もヒットしてしまいます。 どのような関数を使ったら上手に文字列を切り抜くことが可能でしょうか?

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

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.5

良く判らないけど、こういう事かな? Sub Sample()  Dim sParts() As String  Dim i As Long  For i = 1 To 2   sParts = Split(Cells(i, 1).Value, "=")   Select Case sParts(0)   Case "book"    Cells(i, 2) = sParts(1)   Case "books"    Cells(i, 3) = sParts(1)   End Select  Next i End Sub

その他の回答 (4)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

こんにちは 何をお訊きになりたいのか、わからないのですが、 > Excelで特定の文字列があるかないかの検査 / > Excel VBAで文字列を調べて、そのセルに文字列が存在すれば切り抜いて変数に保存するという作業を行いたいと > 思っています。 / > "="以降を切り抜いて、bookは列1、booksは列2 / > Instr この部分にだけ反応します。 # 此処の掲示板でコードの提示のない質問にコードで応えるのは、 # 抵抗があるのですが、、、 Dim 文字列$, 列1$, 列2$ 'ということなのだとして、、、  If InStr(文字列, "book=") > 0 Then   列1 = Mid(文字列, InStr(文字列, "=") + 1)  ElseIf InStr(文字列, "books=") > 0 Then   列2 = Mid(文字列, InStr(文字列, "=") + 1)  End If ' 「文字列」に"book="が見つかったならば ' 「文字列」で"="が見つかる位置の次の桁以降の「文字列」を抜き出す。 ' 以下同様。 というようなことでしょうか?

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

 本当にお書きの通りなのでしたら、 >例えば、本という列 を選択して、 With Selection  .Replace "$$books", "$$books="  .TextToColumns Other:=True, OtherChar:="="  .Delete Shift:=xlToLeft End With のようなことで実現可能かと。。。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

という値が入っていたりします。"="以降を切り抜いて、bookは列1、booksは列2に挿入したいと思います。 この場合、"本"という値は列1へ、"本分類"という値は列2へ入ることになります。 →”列1””列2”が2回ずつ出てきています。どうしたいのか、理解できません。 Instr関数を使うことを考えたのですが、どちらの値もヒットしてしまいます。 →「どちら」とは何と何を検索したのでしょうか?  「本部類」と「本」を検索して、どちらでもヒットしたのであれば、 まず「本部類」で検索し、ヒットしない場合のみ「本」で検索すれば よいはずです。

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

いまいちよくわかりませんが、 Like演算子 は使えませんか? Split関数 も便利だと思います。 まず「本部類」でしらべて、該当しなかったら、次に「本」で しらべるとか。

関連するQ&A

  • エクセルVBAで特定文字列の個数を高速に調べたい

    文字列の入っている変数内で特定の文字列(今回はvbCrLf)が何個発生しているかを、高速に調べたいのですが、どのような方法があるでしょうか? 現在以下のことをやっています。 数千件のテキストファイルから特定文字列を検索しています。 検索を高速化するために、テキストファイルをバイナリーモードで1つの変数に読み込み、instr関数で検索しています。 見つかった場合、その位置から前にあるvbCrLfをInStrRev関数で、後ろにあるvbCrLfをinstr関数で位置を調べ、元の変数からmid関数で該当ラインを取り出しています。 検索はこれで可能ですが、特定文字列を調べたinstr関数の戻り値がテキストファイルの先頭からの位置(何桁目)なので、検索した文字列が何行目にあるか分かりません。 変数の検索文字が見つかった位置までの部分でvbCrLfが何個発生しているかが分かれば行数が判定できます。 vbCrLfを調べるinstr関数を何回も繰り返せば行数の判定は可能ですが、もっと高速に(一つの関数・命令で)調べることはできないでしょうか? また他に行数を特定する良い方法があったら教えてください。 よろしくお願い申し上げます。

  • 文字列検索で・・・

    Instr関数で文字列の存在チェックを行っています。 この場合、変数indexに1が入った場合 Instr("aaa1_a.sql","index") <----- この場合問題はないのですが、 Instr("aaa12_a.sql","index") <-----となる場合も値がとれてしまうので どうしたものかと困っています。 うまく検索させる方法はないでしょうか? ちなみに検索する文字列には aaa数字.sql aaa数字_a.sql aaa数字_b.sql というパターンがあります。 どなたかよきアドバイスをいただけませんでしょうか? よろしくお願い致します。

  • 文字列検索で

    よろしくお願いします。 文字列検索instr関数で、特定文字(スペース)でない文字を検索したいのですが、どのようにしたらいいですか? instr関数では、できないのでしょうか? たとえば、 文字列" osietegoo "  →  3 文字列"    situmon"  →  7 スペースでない文字が出現する位置を知りたいです。 instr(文字列,"o")ではなく、" "ではない、、、としたいのですが、できますか?

  • 文字列を特定文字で分割したい

    はじめまして。宜しくお願いします。 現在Access2002のVBAをつかってタイトルのようなことを実現したいと思っています。 Dim a As String Dim b As String という二つの変数を用意して 「C:\Documents and Settings\デスクトップ\test.csv」という文字列が与えられているとき 変数aには「test.csv」を、変数bには「C:\Documents and Settings\デスクトップ\」を 格納しようとしています。 スマートなやり方がわからず、 文字列の右から一文字ずつ比較して行き、何文字目に「¥」が出てくるかをカウントして、right関数とleft関数で分割を行っています。 このような処理を行う場合、なにか適した関数があると思い探しているのですが、 なかなか見つからず、行き詰っています。(そのような関数があるのかも分からず・・) もしもなにかお気づきの方が居られましたら、ご教授宜しくお願いします。

  • PL/SQLでの文字列比較

    PL/SQL内の条件文で以下のような文字列比較は出来ないでしょうか? (1)ある変数に指定文字列が含まれるかどうか (PASCALで言うところのPOS関数のような) (2)ある変数が指定文字列で始まる・終わるかどうか (JAVAで言うところのstartWith,endWithのような) 調べたところ、(1)に関しては[instr]関数が使えそうだったのですが、文法エラーとなってしまいました。 どなたかお分かりになる方、よろしくお願いします。

  • 特定文字列の抽出

    VB6の質問です。 桁数、データが不定の文字列中から特定文字を抽出したいのでが、方法を教えていただけないでしょうか? 抽出したいデータの桁数が毎回不定でMid, Left, Right関数が使用できません。 Dim Buffer As String Buffer = "A12345...B678910.TRAGET..C" '桁数、データが不定の文字列がBufferに入ります。 例えば、変数Bufferから、桁数を考慮しないで"TARGET"の文字列を抽出したのです。 InStr関数で、位置を特定して、Mid関数などで抽出するれば、良いと思うのですが これをどんな桁数のときも対応できるようにルーチン化にできないでしょうか?

  • 文字列を用いてExcel関数を呼び出したい

    C#にてExcel用のアドインを作成しています。 そのアドインは、独自の関数の挿入画面を表示し、こちらが用意したVBAの関数を呼び出してデータベースにアクセスする動きです。 この独自の関数の挿入画面上で引数にSUM()などのExcel関数を入力された場合、Excel標準の関数の挿入画面と同じように、 入力された関数の計算結果を右側に表示するような作りにしたいのです。 当初は独自の関数の挿入画面で引数に「SUM(B1:B10)+AVERAGE(C1:C5)」と入力されれば、その文字列を解析してどの関数が呼ばれているか抽出し、 Application.WorksheetFunction内のメソッドを呼び出そうかと考えたのですが、 作業量が多い上に自分の技術力が無いのでバグが発生する可能性が高く信頼に値しないということで、断念しました。 受け取った文字列をそのまま用いてWorksheetFunctionのメソッドを呼び出し、結果を受け取るということは可能でしょうか?

  • エクセル 特定の文字列を抽出・挿入

    例えば A列にあるセルの中から特定の文字列を検索・抽出して、その特定の文字列だけB列に挿入していく関数はありますか? またはA列にあるセルの中から特定の文字列に挟まれた文字列を検索・抽出してその特定の文字列だけB列に挿入していく関数はありますか? マクロを組まないと難しいのでしょうか?

  • Excel 該当文字列があるセルを見つける

    こんにちは。 Excel2003を使用しています。 Book1のA列に検索したい文字列(ABC123456のような)が100個ほど有ります。 Book2に表があり、特定の列に文字列が1000個ほど記載されています。 そこで100個ほどの検索したい文字列がBook2のどこに有るか 探す方法をお教えください。 希望は いちいち検索せずに一度に表示させたい できればBook1のB列にBook2の行番号を表示させたい です。 ご存じの方お教えください

  • VBA文字列の抜き出し方

    こんにちは。Excel VBAで文字列を抜き出したいと思っています。 変数には下記のようなデータがはいっています。 hensu = "コード:xxxxx / コード2:yyyy / コード3:zzzzzz" コード2:から始まって/の手前までのデータ、つまりyyyyのみを抜き出したいと思っていますが、どのように抜き出すことができるでしょうか? instrでコード2を検索しても、どのように「/」を検索すればいいのかわかりません。 このあと、ループを使ってyyyyを連続的に抜き出していきたいと思っています。各文字列の文字数は不定です。 宜しくお願い致します!

専門家に質問してみよう