• ベストアンサー

セル内に特定の文字列があるか判定したいのですが

セル内に、「A」という文字列が存在するならば必ず「BAB」であるかということを判定したいと思っています。 実際には、セル内には「A」が存在するとも限らないし、一つとも限りません。 例えば、セル内が以下の文字列の場合 セル=CCCBABBBCCABB 5文字目の「A」は「BAB」ですが後ろから3つめの「A」は条件に当てはまっていないので判定を「否」としたいのです。

  • fisica
  • お礼率77% (235/305)

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

 回答No.3です。 >証明したいのは、「A」がある場合すべての「A」が「BAB」の文字列になっていないといけないということなので、2つ目の「A」が「BAB」となっていないので判定は"無"となっていただきたいのです。 >「A」が含まれない場合は「是」としたいと思っています。 という事でしたら、 =IF(A1="","",IF(SUBSTITUTE(A1,"A",)=SUBSTITUTE(A1,"BAB","BB"),"是","無")) でも大丈夫だと思います。

fisica
質問者

お礼

ありがとうございます。 非常にわかりやすい関数で助かります。

その他の回答 (7)

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.8

回答No.2ですが、この回答は、完全に無視してください。 私の勉強用です。 セル「A1」のみを調べています。 Option Explicit Sub Test() Dim a, b As String Dim c, d, i As Integer a = Range("A1").Value c = 0 d = 0 For i = 2 To Len(a) - 1 b = Mid(a, i, 1) If b = "A" And Mid(a, i - 1, 1) = "B" And Mid(a, i + 1, 1) = "B" Then c = c + 1 ElseIf b = "A" And (Mid(a, i - 1, 1) <> "B" Or Mid(a, i - 1, 1) <> "B") Then d = 1 End If Next i If c > 0 And d = 0 Then MsgBox ("BABが " & c & "個あり、なおかつBAB以外の「A」は存在しませんでしたので「可」です") Else MsgBox ("BABが " & c & "個存在しましたが、BAB以外の「A」も存在していましたので「否」です。") End If End Sub

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.7

=IF(LEN(A1)-LEN(SUBSTITUTE(A1,"A","")),IF(MOD(LEN(A1)-LEN(SUBSTITUTE(A1,"BAB","")),LEN(A1)-LEN(SUBSTITUTE(A1,"A",""))),"否","当"),"否")

fisica
質問者

お礼

ありがとうございます。 すみません、読み解いていったのですが内容が理解できませんでした。 条件式として =IF(LEN(A1)-LEN(SUBSTITUTE(A1,"A","")), この部分が何を意味するのか・・・と 文字列が”A”なら"否"、"BAB"なら"是"となっていただきたいのですが、上記の関数だと両方とも同じ結果になってしまいました。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.5

下記条件で検証します。 B1=CCCBABBBCCABB → 否 B2=CCCBABBBCCBAB → 有 B3=CBABABD → 有 C1=IF(AND(FIND("BAB",B1),ISERR(FIND("A",SUBSTITUTE(SUBSTITUTE(B1,"BAB","[]"),"[]AB","")))),"有","否") C1セルを下へコピーしました。 B3の文字列で"否"の判定で良ければ次の数式になります。 C3=IF(AND(FIND("BAB",B3),ISERR(FIND("A",SUBSTITUTE(B3,"BAB","")))),"有","否")

fisica
質問者

お礼

ありがとうございます。 「BAB」がなくても「A」さえなければ「是」としたいので C3から =IF(ISERR(FIND("A",SUBSTITUTE(B3,"BAB",""))),"是","否") で判定できそうです。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.4

状況がよく分からないので、プログラムしました。 なお、関数で処理されたい場合は、すみません、この回答は無視してください。 「状況がよく分からない」のは、文字が入力されているセルがたくさんあるのか、ただ1つなのか、です。 今回は、たくさんセルがある場合を想定してプログラムをしています。 Option Explicit Sub Test() Dim a, b, c, d, e, r, i, j, k As Long c = Cells(Columns.Count, 1).End(xlToLeft).Column r = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To r For j = 1 To c d = 0 e = 0 a = Cells(i, j).Value For k = 2 To Len(a) - 1 b = Mid(a, k, 1) If b = "A" And Mid(a, k - 1, 1) = "B" And Mid(a, k + 1, 1) = "B" Then d = d + 1 ElseIf b = "A" And (Mid(a, k - 1, 1) <> "B" Or Mid(a, k + 1, 1) <> "B") Then e = 1 End If Next k If d > 0 And e = 0 Then MsgBox ("セル" & Chr(j + 64) & i & ":可") Else MsgBox ("セル" & Chr(j + 64) & i & ":否") End If Next j Next i End Sub 目的のエクセルファイルを開けて、「Alt+F11」(「オルト」と読みますが、「Alt」キーを押しながら「F11」キーを押します。 すると、新たな画面が開きますので、メニューの「挿入」→「標準モジュール」とすると、右側の部分に、大きな白い画面が表示されます。 上記プログラムを、範囲指定して、「Ctrl+c」(コピー・記憶)して、エクセルにもどって、先ほどの右側の白い大きな画面で、「Ctrl+v」(ペースト・貼り付け)して、「F5」を押すと、「セルA1:可」、「セルA2:否」などと表示します。 なお、列は最大「z」までにしてください。 邪魔くさかったので、値が「1」の場合は「A」、「2」の場合は「B」とするのを単に、足し算で計算しています。 このままでは、「AA」になった場合、正しく表示されませんので、そのときは、ご容赦ください。 一応、調べ方としては 文字列を頭から2文字目から末尾から2文字目まで1文字ずつ調べ、「A」が見つかると、その前後が「B」かどうか調べます。 前も後ろも「B」の場合は変数「d」でその数をカウントし、前か後ろのどちらかが、「B」でない場合は、変数「e」の値を「1」にしています。 変数「d」が「1」以上で、「e」の値が「0」なら「可」、そうでなければ、「否」です。 すなわち、「d」が「0」(「BAB」が1つも無かった場合)でも「否」ですし、「e」が「1」(「BAB」以外の組み合わせがあった場合)でも「否」です。

fisica
質問者

お礼

ありがとうございます 数々の説明不足があり面倒をおかけしました。 申し訳ありません。 頂きたかったのは関数で、セルは一つでした。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 確認したいのですが、セル内の文字列が例えば CBABABD となっている場合の様に、「A」と「A」の間に「B」が1個しか存在していない様な場合、「A」となっている箇所は2ヶ所あるのに対し、「BAB」という組み合わせは1個しか作る事が出来ない訳ですが、その様な場合は「否」になるのでしょうか、それともならないのでしょうか?  ここでは取りあえず仮の話として、上記の様な場合は「否」と判定する場合に関して回答する事に致します。  尚、これも仮の話として、文字列が入力されているセルとはA1セルであり、セルが空欄となっている場合には結果を表示するセルには何も表示せず、セルに値が入力されている場合で、尚且つ入力されている文字列の中に「A」が含まれていない場合には「無」、「A」が含まれている場合には、その「A」の全てが「BAB」という文字の組み合わせとなっている場合には「是」、「A」の全てが「BAB」という文字の組み合わせとなっている訳ではない場合には「否」と表示する様にするものとします。  その場合の関数は次の様なものとなります。 =IF(A1="","",IF(ISERROR(FIND("A",A1)),"無",IF(SUBSTITUTE(A1,"A",)=SUBSTITUTE(A1,"BAB","BB"),"是","否")))

fisica
質問者

お礼

ありがとうございます いろいろ説明不足ですみませんでした。 「A」が含まれない場合は「是」としたいと思っています。 「BABAB」パターンについては、ご指摘されてその可能性に気づきました、ご指摘ありがとうございます。 しかし、回答いただいた関数で解決できそうです。 SUBSTITUTEを使うまでは考えたのですが"BAB"を"BB"に変換する発想が出てきませんでした。 助かりました。

noname#214088
noname#214088
回答No.2

私ならBABを一度も使われていない文字、例えば■に全置換し、Aをcountした後、■をBABに戻します

fisica
質問者

お礼

ありがとうございます。 カウントしようとは思っているのですが、方法で悩んでいます。

回答No.1

単純に有無なので A1のセルにBAB A2のセルにCCCBABBBCCABB B2のセルに、=IF(COUNTIF(A2,"*"&$A$1&"*"),"有","無") A2のセルに有れば、"有" A2のセルに無ければ、"無" が返ります。

fisica
質問者

お礼

ありがとうございます 証明したいのは、「A」がある場合すべての「A」が「BAB」の文字列になっていないといけないということなので、2つ目の「A」が「BAB」となっていないので判定は"無"となっていただきたいのです。

関連するQ&A

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

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

  • 2行にわたるセル内の文字列判定について

    Altキーによって1つのセル内に2行にわたる文字列が入力 してある場合、その内容と等しいかどうかを判定する方法を 教えて下さい。

  • excel_特定のセル範囲で同じ文字列が有ったら色

    マクロ初心者です。 excel2002マクロ_特定のセル範囲で同じ文字列が有ったらその数によりセルを色分けしたい 特定のセル範囲で文字列が入っているところと空欄のところがあります。 空欄のところには、後から文字列が入るところと空欄のままのところがあります。 その範囲内で同じ文字列があった場合、2個の時、3個の時、4個の時、5個、6個、7個、8個、9個、10個以上の時に、それぞれ決めておいた色でセルを色分け表示したいです。 文字列の順番はランダムです。 excel2002なので、3種類までなら条件付き書式で設定できるのですが、それを超える場合は設定できません。 それで、これをマクロで設定できるでしょうか。 条件付き書式で設定した場合は、文字列を入力した時点でセルの色はすぐに反映されますが、マクロの場合もそのようにすることは可能でしょうか。 よろしくお願いします。

  • セル内の一部文字列を消去のマクロ

    Excelで A1セル~A100セルまでに文字列が  ****(**) (****)というように入っています。 なお*は任意の文字を表す (条件) ( )で囲まれた文字列群は2つある。 (したいこと)A1セル~A100セルまでを対象に2番目の( )で囲まれた文字列群を消去するマクロを作成したい。      どう記述すればいいか。        処理前 A1: ****(**) (****) A2:*****(**) (****) A3:****(**) (*****) 以下略 処理後 A1: ****(**)  A2:*****(**)  A3:****(**)  以下略

  • セル内のある範囲の文字列を関数で抽出したいです

    すみません、以下のような文字列がセルにある場合に、エクセル関数を使って、特定する範囲の文字列を抜き出したいのですが、ご教示頂けませんでしょうか? A1セル:()で囲まれた文字列が先頭と末尾に含まれています。  (文字列1)文字列2(文字列3) A2セル:文字列2だけを抜き出したいです。  文字列2 あともし可能であれば、文字列2を抽出する際に(文字列3)の部分を、 A3セルに入っている文字列に変更したいのですが、 A3セル:たとえば、「1234567」と入っていた場合では、【】をつけて  文字列2【1234567】 という形に直したいという内容となります。 いろいろ試してみたのですがどうしてもできず、お力添え頂けませんでしょうか? 何卒宜しくお願い致します。

  • 【excel】複数のセルを対象に特定の文字列

    EXCELでセルB24:D31に一つでも文字列Aが入っている場合 あるセルに文字列2を表示させて偽の場合文字列3を表示させたいのですが =IF(B24:D31="","",IF(SUM(COUNTIF(B24:D31,{"*文字列A*","*文字列A*"})),"文字列2","文字列3")) この式ではエラーになってしまい、どうにも作業が進みません。どなたか教えていただけませんでしょうか?

  • 複数行を特定の列の各セルの中にある特定の文字列でソートする

    複数行を特定の列の各セルの中にある特定の文字列でソートしてその特定の文字のみが含まれる行のみ取り出す方法って簡単にできますか? たとえばA1からF100までのセルでC列のセルに特定の文字列が含まれる場合その行を集めて残りはそのしたの行に置き換えるとか。 特定の文字列はセルの文字列の中のどの部分にあるかは任意とします。よろしくおねがいします。 イージス

  • 特定の文字列の隣のセルの文字色変更

    Excelに関する質問です。 A5~N42のセルに特定の文字列が入力されている場合、 A列、D列、G列、J列、M列、P列に入力されている文字の色を変えたいのですが、 何か良い方法を教えてください。

  • 文字列かどうかの判定

    例えばA1セルに入力せれているものが、数字(もしくは文字)であった場合プログラムを実行させようと考えています。 入力されている数字や文字列は一定では有りません。 If 数字(文字)であった場合 Then Call *** end If の様な感じです。 過去ログの文字列検索を探しましたが、使った事の無いコードばかりでアレンジのやり方が全く分かりません。 数字の場合と文字列の場合の2通りの方法をご教示頂きたくよろしくお願い致します。

  • 複数セルから同じ文字列を抽出、並べ替え

    お世話になります。 セル式で定義したいのですが、いい考えが浮かびません。 A列に以下のような文字が並んでいるとします。実際は下に無制限とします。 A1  AAA A2  BBB A3  CCC A4  AAA A5  CCC A6  DDD A7  AAA これらのセル中の文字列から以下のように並べ替えてB列に配置したいのです。 B1  AAA B2  BBB B3  CCC B4  DDD 4種類の文字列となるのでB1:B4まで並べたいと思います。 B列のセルにセル式を記述したいと思います。 以上、ご教授下さい。

専門家に質問してみよう