Excel VBA - 文字列の検索、位置の確認

文字列の操作をつなぎ合わせて完成させる Excel で翻訳

スポンサードリンク

Excel で翻訳!? は要するに、Excel で文字列を操作する… 機能を確認したり、作成するためのシリーズ。

もしかすると標準のこの機能でいいじゃん?! ということもあるかもしれません。
その時は是非教えてください。

Left と Right を組み合わせて「検索」する

「文字列1の中に文字列2が含まれるかどうか」をチェックする関数 InStr をみなさんはご存知ではないかと思います。

この InStr は引数を 4つ持ち、使い方が少々複雑です(と、私は思います)。
以下にあげる MyStringSearch は、その InStr がどのように機能しているかを確かめる意味もあって作ったものですが、InStr の試験コードだと言ってもいいかも知れません。

MyFunction から MyStringSearch を呼び出す という構造にしてあります

  • MyFunction から MyStringSearch を呼び出す という構造にしてあります
  • 文字列1 の中に 文字列2 が含まれていたら、その位置を表示します
  • 文字列1 & 2 の比較(検索)は、大文字小文字を考慮して機能します

関数 Right と Left という 2つの関数を組み合わせたところが MyStringSearch の肝です。

Sub MyFunction()
 MyStringSearch "ぼくはきのうパンダを見に行った", "パンダ"
End Sub

Sub MyStringSearch(t1 As String, t2 As String) 
 Dim l1 As Long
 Dim l2 As Long
 Dim i As Long

 l1 = Len(t1) 
 l2 = Len(t2) 

 For i = l2 To l1
  If Right(Left(t1, i), l2) = t2 Then
   MsgBox "「" & t1 & "」 の中" & Chr(10) & i - l2 + 1 & " 文字目から「" & t2 & "」 がはじまっている"
   Exit For
  End If
 Next i

End Sub

MyStringSearch が処理する 2つの文字列は、

  • 文字列1が 「ぼくはきのうパンダを見に行った」
  • 文字列2が 「パンダ」

文字列1 を1文字ずつ左へ移動しては、
その右端の 文字列2 の文字数分 をカット(、同時に 文字列2 と比較)していく
というものです。

気をつけなくてはいけないのは、MyStringSearch は、

  • 文字列2 の最初の位置で、検索を終了する
スポンサードリンク

という点。
そしてこの機能にはまだ盛り込まれていませんが、

  • それぞれの文字列が、全角、半角の両方まざった形で構成されることもあり得る

という点です。

to be continued …

スポンサードリンク

返信を残す

メールアドレスが公開されることはありません。