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

ブログにソースコードをアップして、ブログの検索機能で利用してます(利用予定です)

よく検索されるキーワード: [VBA]/ [VBS]/ [CreateObject]/ [Excel]/ [ADO]


単体テスト 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

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
(※詳細は[三流君 三流プログラマーとは?]を見てください)


Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。
・[Excel/Access VBA]の解説
・[ASP(Active Server Pages)]の解説。
・[元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
・[プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
三流君を踏み台にする
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。

三流解説動画の再生リスト
https://www.youtube.com/user/ken3video/playlists

本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)