Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2722 / 13646 ツリー ←次へ | 前へ→

【66386】文字列から複数文字を検索したい けい 10/9/2(木) 11:11 質問[未読]
【66387】Re:文字列から複数文字を検索したい teian 10/9/2(木) 11:51 発言[未読]
【66388】Re:文字列から複数文字を検索したい けい 10/9/2(木) 14:11 お礼[未読]

【66386】文字列から複数文字を検索したい
質問  けい  - 10/9/2(木) 11:11 -

引用なし
パスワード
   抜出について、上手く抜出ができないので
どうかご指導をお願いいたします。

ある文字列の中から最大3つまで文字を検索したいと思っています。
最初に"a"という文字が出てきた場合、次に"b"が含まれるかを探し、
bがあったら更に"c"も含まれるかを探したいのですが、InStrでは
1つしか文字を検索することしかできないかと思い、以下のようにIf文で
繋げてみましたが、上手くいかないようでした。
何かよい方法があったら教えてください。

Sub 抜出()

  Dim Moji1 As String
  Dim Moji2 As String
  Dim Moji3 As String

 Moji1 = Cells(i, "B").Value

 If InStr(Moji1, "a") > 0 Then
   Moji2 = Moji1 
     If InStr(Moji2, "b") > 0 Then
     Moji3 = Moji2     
       If InStr(Moji3, "c") > 0 Then
        Cells(i, "D").Value = "○○○"
       End If
     End If
  End If

【66387】Re:文字列から複数文字を検索したい
発言  teian  - 10/9/2(木) 11:51 -

引用なし
パスワード
   あなたの今の考え方の踏襲で、
Instr関数を使い1文字づつ調べ上げるなら、以下のようでどうでしょうか?

Sub Sample()
  Const sMoji As String = "a b c"
  Dim s As String
  Dim n As Long
  Dim v As Variant
  Dim Ok As Boolean
  
  s = Range("A1").Value
  Ok = False: n = 1
  Do
    For Each v In Split(sMoji)
      n = InStr(n, s, v)
      If n = 0 Then Exit Do
      n = n + Len(v)
    Next
    Ok = True
  Loop Until True
  If Ok Then
    MsgBox "すべての文字がその順番で含まれてます"
  Else
    MsgBox "含まれてないか、その順番どおりでない"
  End If
End Sub


ただ、その存在有無だけなら、Like演算子を使って

Sub Sample2()
  Const sMoji As String = "*a*b*c*"
  Dim s As String
  
  s = Range("A1").Value
  If s Like sMoji Then
    MsgBox "すべての文字がその順番で含まれてます"
  Else
    MsgBox "含まれてないか、その順番どおりでない"
  End If
End Sub

でいいのかもしれませんが。

【66388】Re:文字列から複数文字を検索したい
お礼  けい  - 10/9/2(木) 14:11 -

引用なし
パスワード
   ▼teian さん:

存在有無だけわかれば良いので
Sample2で条件を探すことができました。
今後も大いに役立ちそうです。
ありがとうございました。


>あなたの今の考え方の踏襲で、
>Instr関数を使い1文字づつ調べ上げるなら、以下のようでどうでしょうか?
>
>Sub Sample()
>  Const sMoji As String = "a b c"
>  Dim s As String
>  Dim n As Long
>  Dim v As Variant
>  Dim Ok As Boolean
>  
>  s = Range("A1").Value
>  Ok = False: n = 1
>  Do
>    For Each v In Split(sMoji)
>      n = InStr(n, s, v)
>      If n = 0 Then Exit Do
>      n = n + Len(v)
>    Next
>    Ok = True
>  Loop Until True
>  If Ok Then
>    MsgBox "すべての文字がその順番で含まれてます"
>  Else
>    MsgBox "含まれてないか、その順番どおりでない"
>  End If
>End Sub
>
>
>ただ、その存在有無だけなら、Like演算子を使って
>
>Sub Sample2()
>  Const sMoji As String = "*a*b*c*"
>  Dim s As String
>  
>  s = Range("A1").Value
>  If s Like sMoji Then
>    MsgBox "すべての文字がその順番で含まれてます"
>  Else
>    MsgBox "含まれてないか、その順番どおりでない"
>  End If
>End Sub
>
>でいいのかもしれませんが。

2722 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free