読者です 読者をやめる 読者になる 読者になる

三流君のソースコード置き場

三流プログラマーが作成したコードが置いてあります。あまり参考にならないと思いますがヨロシクお願いします。

単体テスト InStr(検索開始位置, 検索元文字列, 探す文字列)

InStr関数をループさせて、複数回の禁止ワードを探す

Const strMOJI = "注目 激安通販 激安商品 激安価格"

から、
激安の文字がいくつあるか?
InStr関数を使って、カウントしてみたいと思います。

Instr(検索開始位置, 検索元文字列, 探す文字列)
で、チェックできるので、
n = InStr(n, strMOJI, "激安")
みたいに、位置が返るので使ってみます。

いつもの脳内垂れ流し解説のテスト動画です。
【VBA】単体テスト InStr(検索開始位置, 検索元文字列, 探す文字列) 【三流君】 - YouTube
www.youtube.com


デバック時↑、F8でステップ実行できるので、
テストコードと合わせて、使ってみてください。

ループの作り方など、
イロイロとあるので、
面白い じゃなかった、
シンプルでわかりやすいコードを作成してくださいね。

少しでも文字列処理の参考となればうれしいです。

キーワード:
VBA,InStr関数,文字列操作,単体テスト,
デバッグ,F8,ステップ実行


テストで使用したコードです。

Option Explicit

Sub test_instr20160812()

    Const strMOJI = "注目 激安通販 激安商品 激安価格"
    Dim n As Integer  '位置
    
    Debug.Print strMOJI
    
    n = 1  'スタートを1文字目から
    
    Debug.Print "n = " & n & "文字目から探すと"
    n = InStr(n, strMOJI, "激安")
    Debug.Print "返ってきた激安の位置は " & n

    n = n + 1   'その次の文字から探したいので+1
    Debug.Print "n = " & n & "文字目から探すと"
    n = InStr(n, strMOJI, "激安")
    Debug.Print "返ってきた激安の位置は " & n
    
    n = n + 1   'その次の文字から探したいので+1
    Debug.Print "n = " & n & "文字目から探すと"
    n = InStr(n, strMOJI, "激安")
    Debug.Print "返ってきた激安の位置は " & n
    
    n = n + 1   'その次の文字から探したいので+1
    Debug.Print "n = " & n & "文字目から探すと"
    n = InStr(n, strMOJI, "激安")
    Debug.Print "返ってきた激安の位置は " & n
    
End Sub


'Whileループで回し 単語の数をカウントするテスト
Sub test_instr20160812_002()

    Const strMOJI = "注目 激安通販 激安商品 激安価格"
    Dim n As Integer  '位置
    Dim i As Integer  '見つけた個数
    
    Debug.Print strMOJI
    
    '初期処理
    i = 0  '見つけた個数を0で初期化
    n = InStr(1, strMOJI, "激安")  '1文字目から探す
    
    While n > 0  '単語・文字が見つかっている間回る
        i = i + 1  '見つけた個数をカウントアップ
        Debug.Print i & "," & n & "文字目に単語有"
        '次の位置+1 から 文字を探す
        n = InStr(n + 1, strMOJI, "激安")
        '↑見つからないと0が返るので、ループを抜けるよ
    Wend
    
    Debug.Print i & "個の単語を見つけました"
    
End Sub

'Forループで回し 単語の数をカウントするテスト
Sub test_instr20160812_003_For()

    Const strMOJI = "注目 激安通販 激安商品 激安価格"
    Dim n As Integer  '位置
    Dim i As Integer  '見つけた個数
    
    Debug.Print strMOJI
    
    '初期処理
    n = 0  'スタート位置を0で初期化
    
    'ループで探す
    For i = 0 To 9999  '最大9999回わす
        '次の位置 n+1 から 文字を探す
        n = InStr(n + 1, strMOJI, "激安")
        '↑見つからないと0が返るので↓でループを抜けるよ
        If n = 0 Then Exit For '見つからないときは Exit forで抜ける

        '中間結果の表示
        Debug.Print i & "," & n & "文字目に単語有"
    Next
    
    'ループカウンタのiが見つけた個数です。
    Debug.Print i & "個の単語を見つけました"
    
End Sub

ループの作り方など、
イロイロとあるので、
面白い じゃなかった、
シンプルでわかりやすいコードを作成してくださいね。

少しでも文字列処理の参考となればうれしいです。


いつもの脳内垂れ流し解説のテスト動画です。
※上の動画と同じです。
www.youtube.com
【VBA】単体テスト InStr(検索開始位置, 検索元文字列, 探す文字列) 【三流君】 - YouTube