- ベストアンサー
セル内に特定の文字列があるか判定したいのですが
セル内に、「A」という文字列が存在するならば必ず「BAB」であるかということを判定したいと思っています。 実際には、セル内には「A」が存在するとも限らないし、一つとも限りません。 例えば、セル内が以下の文字列の場合 セル=CCCBABBBCCABB 5文字目の「A」は「BAB」ですが後ろから3つめの「A」は条件に当てはまっていないので判定を「否」としたいのです。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
回答No.3です。 >証明したいのは、「A」がある場合すべての「A」が「BAB」の文字列になっていないといけないということなので、2つ目の「A」が「BAB」となっていないので判定は"無"となっていただきたいのです。 >「A」が含まれない場合は「是」としたいと思っています。 という事でしたら、 =IF(A1="","",IF(SUBSTITUTE(A1,"A",)=SUBSTITUTE(A1,"BAB","BB"),"是","無")) でも大丈夫だと思います。
その他の回答 (7)
- Prome_Lin
- ベストアンサー率42% (201/470)
回答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% (364/1804)
=IF(LEN(A1)-LEN(SUBSTITUTE(A1,"A","")),IF(MOD(LEN(A1)-LEN(SUBSTITUTE(A1,"BAB","")),LEN(A1)-LEN(SUBSTITUTE(A1,"A",""))),"否","当"),"否")
お礼
ありがとうございます。 すみません、読み解いていったのですが内容が理解できませんでした。 条件式として =IF(LEN(A1)-LEN(SUBSTITUTE(A1,"A","")), この部分が何を意味するのか・・・と 文字列が”A”なら"否"、"BAB"なら"是"となっていただきたいのですが、上記の関数だと両方とも同じ結果になってしまいました。
- bunjii
- ベストアンサー率43% (3589/8249)
下記条件で検証します。 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","")))),"有","否")
お礼
ありがとうございます。 「BAB」がなくても「A」さえなければ「是」としたいので C3から =IF(ISERR(FIND("A",SUBSTITUTE(B3,"BAB",""))),"是","否") で判定できそうです。
- Prome_Lin
- ベストアンサー率42% (201/470)
状況がよく分からないので、プログラムしました。 なお、関数で処理されたい場合は、すみません、この回答は無視してください。 「状況がよく分からない」のは、文字が入力されているセルがたくさんあるのか、ただ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」以外の組み合わせがあった場合)でも「否」です。
お礼
ありがとうございます 数々の説明不足があり面倒をおかけしました。 申し訳ありません。 頂きたかったのは関数で、セルは一つでした。
- kagakusuki
- ベストアンサー率51% (2610/5101)
確認したいのですが、セル内の文字列が例えば 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"),"是","否")))
お礼
ありがとうございます いろいろ説明不足ですみませんでした。 「A」が含まれない場合は「是」としたいと思っています。 「BABAB」パターンについては、ご指摘されてその可能性に気づきました、ご指摘ありがとうございます。 しかし、回答いただいた関数で解決できそうです。 SUBSTITUTEを使うまでは考えたのですが"BAB"を"BB"に変換する発想が出てきませんでした。 助かりました。
私ならBABを一度も使われていない文字、例えば■に全置換し、Aをcountした後、■をBABに戻します
お礼
ありがとうございます。 カウントしようとは思っているのですが、方法で悩んでいます。
- toi_awase_01
- ベストアンサー率31% (133/429)
単純に有無なので A1のセルにBAB A2のセルにCCCBABBBCCABB B2のセルに、=IF(COUNTIF(A2,"*"&$A$1&"*"),"有","無") A2のセルに有れば、"有" A2のセルに無ければ、"無" が返ります。
お礼
ありがとうございます 証明したいのは、「A」がある場合すべての「A」が「BAB」の文字列になっていないといけないということなので、2つ目の「A」が「BAB」となっていないので判定は"無"となっていただきたいのです。
お礼
ありがとうございます。 非常にわかりやすい関数で助かります。