Private Sub Command1_Click()
Dim iwork As Integer '位置計算用
Dim swork As String '検索・置換対象文字列
Dim search As String '検索文字列
Dim change As String '置換文字列
Dim msg As String
' Ex.6: 検索
swork = "ABCあいうDEFえおか" ' 検索対象となる文字列式
msg = "検索対象文字列=" + swork + vbCrLf + vbCrLf
' テキストモードの検索
search = "A"
iwork = InStr(1, swork, search, vbTextCompare) '見つけた(iwork = 1)
msg = msg + "A 検索位置=" + Str(iwork) + vbCrLf
' バイナリモードの検索
search = "def"
iwork = InStr(1, swork, search, vbBinaryCompare) 'バイナリモード時は見つからない(iwork = 0)
msg = msg + "def 検索位置1=" + Str(iwork) + vbCrLf
' テキストモードの検索
search = "def"
iwork = InStr(1, swork, search, vbTextCompare) ' テキストモード時は見つけた(iwork=7)
msg = msg + "def 検索位置2=" + Str(iwork) + vbCrLf
' テキストモードの検索
search = "DEF"
iwork = InStr(1, swork, search, vbTextCompare) ' 見つけた(iwork=7)
msg = msg + "DEF 検索位置=" + Str(iwork) + vbCrLf
' テキストモードの検索
search = "あいう"
iwork = InStr(1, swork, search, vbTextCompare) ' 見つけた(iwork=4)
msg = msg + "あいう 検索位置=" + Str(iwork) + vbCrLf
' テキストモードの検索
search = "あう"
iwork = InStr(1, swork, search, vbTextCompare) ' 見つけた(iwork=0)
msg = msg + "あう 検索位置=" + Str(iwork)
Call MsgBox(msg)
' Ex.7: 置換
swork = "ABCあいうDEFえおか" ' 置換対象となる文字列式
msg = "置換対象文字列=" + swork + vbCrLf + vbCrLf
' 置換:AB→ab
search = "AB" ' 検索文字列
change = "ab" ' 置換文字列
Call ReplaceString(swork, search, change) ' 置換結果作成
msg = msg + "AB→ab 置換後=" + swork + vbCrLf
' 置換:DEF→DEF
search = "DEF" ' 検索文字列
change = "DEF" ' 置換文字列
Call ReplaceString(swork, search, change) ' 置換結果作成
msg = msg + "DEF→DEF 置換後=" + swork + vbCrLf
' 置換:あいう→アイウ
search = "あいう" ' 検索文字列
change = "アイウ" ' 置換文字列
Call ReplaceString(swork, search, change) ' 置換結果作成
msg = msg + "あいう→アイウ 置換後=" + swork + vbCrLf
' 置換:か→ka
search = "か" ' 検索文字列
change = "ka" ' 置換文字列
Call ReplaceString(swork, search, change) ' 置換結果作成
msg = msg + "か→ka 置換後=" + swork + vbCrLf
' 置換:は→ハ (この文字は存在しないので無変換)
search = "は" ' 検索文字列
change = "ハ" ' 置換文字列
Call ReplaceString(swork, search, change) ' 置換結果作成
msg = msg + "は→ハ 置換後=" + swork
Call MsgBox(msg) ' 変換結果は"abCアイウDEFえおka"
End Sub
|
Private Function ReplaceString(ByRef source As String, ByVal search As String, ByVal change As String) As Boolean
'* 文字列の置換
'* [in]
'* source : 置換対象文字列
'* search : 置換元文字列
'* change : 置換先文字列
'* [out]
'* 置換結果(True:sourceは置換された結果がセットされる)
'* [注意]
'* 置換対象文字列に検索文字列が存在しない場合、文字列をそのまま返します。
'* 英字の大文字、小文字は別文字列としてあつかいます。
'* ( InStr() で vbTextCompare にすれば、大小文字を同一視することができます)
Dim fwork As String '検索文字列より前の文字列
Dim bwork As String '検索文字列より後ろの文字列
Dim chgPos As Integer '検索文字列の位置
Dim srcLen As Integer '置換対象文字列の長さ
Dim srhLen As Integer '検索文字列の長さ
Dim fSize As Integer '検索文字列より前の文字数
Dim bSize As Integer '検索文字列より後ろの文字数
chgPos = InStr(1, source, search, vbBinaryCompare)
If chgPos = 0 Then
' 置換対象文字列内に検索文字列が見つからない
ReplaceString = False
Exit Function
End If
srcLen = Len(source)
srhLen = Len(search)
' 検索文字列より前の文字列を切り出す
fSize = chgPos - 1
fwork = Left(source, fSize)
' 検索文字列より後ろの文字列を切り出す
bSize = srcLen - chgPos - srhLen + 1
bwork = Right(source, bSize)
' 置換結果を作成
source = fwork + change + bwork
ReplaceString = True ' 正常時
End Function
|