文字列の内容 InStr関数

InStr関数は文字列の中に指定した文字列が存在するか確認したい時に使用します。

例えば、入力チェック等で利用できます。

InStrの構文

InStr([ start ], string1string2, [ compare ])

InStr([検索開始位置], 文字列, 指定した文字列, [文字列の比較方法])

[]内は省略可能です。

InStr関数を使用すると指定した文字列の位置が数値で返されます。

InStr関数の使用例

・InStr関数内に文字列を直接設定

・文字列に指定した文字列が無い場合

・指定した文字列が複数存在する場合

・InStr関数で開始位置を設定

・InStr関数で比較方法を設定

・セルから文字列を取得してセルに設定

繰り返し処理(指定した文字列)

・繰り返し処理(文字列、指定した文字列)

・繰り返し処理(文字列、指定した文字列、比較方法を設定)

の内容で説明していきます。

InStr関数内に文字列を直接設定

Sub InStr1()

    MsgBox InStr("abcde", "c") & "番目にあります"

End Sub

指定した文字列が”c”なので3が返されます。

文字列に指定した文字列が無い場合

Sub InStr2()

    MsgBox InStr("abcde", "f") & "番目にあります"

End Sub

指定した文字列が”f”なので見つからず0が返されます。

指定した文字列が複数存在する場合

Sub InStr3()

    MsgBox InStr("abcdec", "c") & "番目にあります"

End Sub

3番目と6番目に指定した文字列の”c”があります。

最初に見つけた位置を返すため、3が返されました。

InStr関数で開始位置を設定

Sub InStr4()

    MsgBox InStr(4, "abcdec", "c") & "番目にあります"

End Sub

3番目と6番目に指定した文字列の”c”があります。

検索する開始位置を4に設定しています。

開始位置が4のため6番目の”c”の位置を返します。

InStr関数で比較方法を設定

比較方法ですが、大文字小文字を比較するしないの設定が出来ます。

比較方法を設定する場合は、開始位置も設定しないとエラーになります。

0 or vbBinaryCompare で大文字小文字を比較します。

Sub InStr5()

    MsgBox InStr(1, "abcdeC", "C", 0) & "番目にあります"

End Sub
Sub InStr6()

    MsgBox InStr(1, "abcdeC", "C", vbBinaryCompare) & "番目にあります"

End Sub

3番目に”c”、6番目に”C”があり、”C”を指定します。

6番目の”C”の位置が返されます。

1 or vbTextCompare で大文字小文字を比較しません。

Sub InSt7()

    MsgBox InStr(1, "abcdeC", "C", 1) & "番目にあります"

End Sub
Sub InStr8()

    MsgBox InStr(1, "abcdeC", "C", vbTextCompare) & "番目にあります"

End Sub

3番目に”c”、6番目に”C”があり、”C”を指定します。

大文字小文字を比較しないため、3番目の”c”の位置が返されます。

開始位置を設定しない時に発生するエラー

Sub InStrErr()

    MsgBox InStr("abcdeC", "C", vbTextCompare) & "番目にあります"

End Sub

開始位置を設定していません。

処理を実行時にこのエラーが発生します。

セルから文字列を取得してセルに設定

B2の文字列をC2の文字列が検索して結果をD2に表示させます。

Sub InStr9()
    Dim str, find, rep As String
    str = Cells(2, 2)
    find = Cells(2, 3)
    
    Cells(2, 4) = InStr(str, find) & "番目にあります。"

End Sub

“c”が3番目にあるので、3の値が返されてD2に結果が表示されました。

繰り返し処理(指定した文字列)

B2の文字列を取得して、C列にある指定した文字列が含まれるか確認します。

Sub InStr10()

    Dim str, kekka As String
    Dim find() As String
    Dim i, retuNum As Integer
    str = Cells(2, 2)
    '指定した文字列の列番号を設定します
    retuNum = 3
    '指定した文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    i = 1
    kekka = ""
    '指定した文字列をリスト分繰り返します
    For Each Var In find
        '指定した文字列が存在するか確認します。

        If InStr(str, find(i - 1)) <> 0 Then
            kekka = kekka & find(i - 1) & "が" & InStr(str, find(i - 1)) & "番目にあります。"
        End If
        
        i = i + 1
    Next
    
    If kekka = "" Then
        kekka = "指定した文字列がありません。"
    End If

    Cells(2, 4) = kekka

End Sub

Functionを使用して、リストの設定という関数みたいな物を作成しています。

リストの設定の内容は指定した文字列のリストを作成して返しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

指定した文字列の”c”と”bc”があるため結果がD2に表示されます。

繰り返し処理(文字列、指定した文字列)

B列の文字列をC2の文字列が検索して、結果をD列に表示させます。

Sub InStr11()
    
    Dim kekka As String
    Dim str() As String
    Dim find() As String
    Dim i, j, retuNum As Integer
        
    '文字列の列番号を設定します
    retuNum = 2
    '文字列のリストを設定します
    str() = リストの設定(retuNum)
    
    '指定した文字列の列番号を設定します
    retuNum = 3
    '指定した文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    i = 1
    '文字列をリスト分繰り返します
    For Each Var In str
        j = 1
        kekka = ""
        '指定した文字列をリスト分繰り返します
        For Each Var2 In find
            '指定した文字列が存在するか確認します
            If InStr(str(i - 1), find(j - 1)) <> 0 Then
                kekka = kekka & find(j - 1) & "が" & InStr(str(i - 1), find(j - 1)) & "番目にあります。"
            End If
            
            j = j + 1
        Next
        
        If kekka = "" Then
            kekka = "指定した文字列がありません。"
        End If
        
        Cells(i + 1, 4) = kekka
        i = i + 1
    Next
    
End Sub

リストの設定の内容は指定した文字列のリストと文字列のリストを作成して返しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

それぞれの行で指定した文字列が存在するか確認して、結果を表示しています。

繰り返し処理(文字列、指定した文字列、比較方法を設定)

大文字小文字を比較しない方法で複数の文字列と指定した文字列の確認を行います。

C列に大文字のBを設定しています。

Sub InStr12()

    Dim kekka As String
    Dim str() As String
    Dim find() As String
    Dim i, j, retuNum As Integer
        
    '文字列の列番号を設定します
    retuNum = 2
    '文字列のリストを設定します
    str() = リストの設定(retuNum)
    
    '指定した文字列の列番号を設定します
    retuNum = 3
    '指定した文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    i = 1
    '文字列をリスト分繰り返します
    For Each Var In str
        j = 1
        kekka = ""
        '指定した文字列をリスト分繰り返します
        For Each Var2 In find
            '指定した文字列が存在するか確認します。
            If InStr(1, str(i - 1), find(j - 1), 1) <> 0 Then
                kekka = kekka & find(j - 1) & "が" & InStr(1, str(i - 1), find(j - 1), 1) & "番目にあります。"
            End If
            
            j = j + 1
        Next
        
        If kekka = "" Then
            kekka = "指定した文字列がありません。"
        End If
        
        Cells(i + 1, 4) = kekka
        i = i + 1
    Next
    
End Sub

InStr関数を使用している所で開始位置と比較方法を1に設定しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

大文字小文字を比較しないで表示されました。

“ぁぃぅぇぉ”は小文字判定されないので注意してください。

今回はInStr関数について記載させて頂きました。

少しでも皆様の参考になれば幸いです。

文字列の内容 Join関数

Join関数は文字列を結合する関数です。

文字列型配列に任意の区切り文字を付けたい時などに使用します。

Join関数の構文

Join(sourcearray, [delimiter])

Join(1次元配列, [区切り文字])

[]内は省略可能です。

省略を行った場合は文字列と文字列の間に空白が入ります。

Join関数の使用例

・文字列の結合方法

・文字列型配列に文字列が無い場合

・文字列型配列が2次元配列の場合

・セルから文字列を取得して結合した文字列をセルに設定

Excelのデータ一覧からSQLのINSERT文を作成

・文字列の結合の処理時間

の内容で説明していきます。

文字列の結合方法

文字列の結合を行う方法は複数存在します。

・”+”を使用する場合

・”&”を使用する場合

・Joinを使用する場合

・Joinを使用して任意の区切り文字を設定する場合

を紹介します。

“+”を使用する場合

Sub 文字列の結合1()
    Dim str As String
    str = "abc" + " " + "def"
    MsgBox str
End Sub

“abc”と” “と”def”の結合なので “abc def”が表示されます。

“&”を使用する場合

Sub 文字列の結合2()
    Dim str As String
    str = "abc" & " " & "def"
    MsgBox str
End Sub

“abc”と” “と”def”の結合なので “abc def”が表示されます。

Joinを使用する場合

Sub 文字列の結合3()
    Dim str(1) As String
    str(0) = "abc"
    str(1) = "def"
    MsgBox Join(str)
End Sub

strの1次元配列に”abc”と”def”が設定されています。

任意の区切り文字を設定していないため”abc”と”def”の間に” “が入ります。

Joinを使用して任意の区切り文字を設定する場合

Sub 文字列の結合4()
    Dim str(1) As String
    str(0) = "abc"
    str(1) = "def"
    MsgBox Join(str, ",")
End Sub

任意の区切り文字を”,”に設定しました。

任意の区切り文字を”,”に設定してしたため”abc”と”def”の間に”,”が入ります。

文字列型配列に文字列が無い場合

Sub Join1()
    Dim str() As String
    MsgBox Join(str)
End Sub

配列には何も設定していません。

何も設定されていないため何も表示されません。

文字列型配列が2次元配列の場合

Sub Join2()
    Dim str() As String
    ReDim str(1, 2)
    str(0, 0) = "a"
    str(0, 1) = "b"
    str(0, 2) = "c"
    str(1, 0) = "d"
    str(1, 1) = "e"
    str(1, 2) = "f"
    
    MsgBox Join(str)
End Sub

Joinは1次元配列しか設定できませんが、2次元配列を設定します。

1次元配列しか設定できないのでエラーが発生します。

セルから文字列を取得して結合した文字列をセルに設定

セルに複数の行が設定されています。

A~D列の値を取得し、E列に結合して表示させます。

Sub Join3()
    Dim str() As String
    Dim i, j As Integer
    Dim gyo, retu As Integer
    
    '入力されている行数を取得
    gyo = Cells(1, 1).End(xlDown).Row
    '入力されている列数を取得
    retu = Cells(1, 1).End(xlToRight).Column
    
    '配列の設定
    ReDim str(retu - 1)
    
    '文字列の結合を繰り返し
    For i = 2 To gyo
        For j = 1 To retu
            'セルの文字列を配列に設定
            str(j - 1) = Cells(i, j)
        Next j
        '配列の文字列を列の末端の隣のセルに設定
        Cells(i, retu + 1) = Join(str, ",")
    Next i
    
End Sub

任意の区切り文字は”,”を設定しています。

A~D列のセルの値が”,”区切りでE列に設定されました。

文字列の結合の処理時間

文字列の結合方法で3つご紹介させて頂きました。

Joinを使用した場合が処理時間が速いです。

簡単な文字列の結合でしたら処理時間など気になりませんが、結合する文字列が大量だった場合、処理時間が変わってきます。

処理時間の計測方法

・47都道府県名のデータを”,”で区切ます。

・それを1000回繰り返しString型に設定した時間を計測します。

B列に47都道府県を設定しています。

“+”を使用する場合

Sub 結合時間の計測1()
    Dim setStr As String
    Dim i, j As Integer
    
    '計測時間の宣言
    Dim startTime As Double
    Dim endTime As Double
    Dim processTime As Double

    '開始時間取得
    startTime = Timer
    
    '初期設定
    setStr = ""

    '文字列の結合を繰り返し
    For i = 1 To 1000
        For j = 1 To 47
            'セルの文字列を配列に設定
            setStr = setStr + Cells(j, 2) + ","
        Next j
    Next i
    
    '終了時間取得
    endTime = Timer
    
    '処理時間表示
    processTime = endTime - startTime
    MsgBox "処理時間:" & processTime
    
End Sub

“&”を使用する場合

Sub 結合時間の計測2()
    Dim setStr As String
    Dim i, j As Integer
    
    '計測時間の宣言
    Dim startTime As Double
    Dim endTime As Double
    Dim processTime As Double

    '開始時間取得
    startTime = Timer
    
    '初期設定
    setStr = ""

    '文字列の結合を繰り返し
    For i = 1 To 1000
        For j = 1 To 47
            'セルの文字列を配列に設定
            setStr = setStr & Cells(j, 2) & ","
        Next j
    Next i
    
    '終了時間取得
    endTime = Timer
    
    '処理時間表示
    processTime = endTime - startTime
    MsgBox "処理時間:" & processTime
    
End Sub

Joinを使用する場合

Sub 結合時間の計測3()
    Dim str(46999) As String
    Dim i, j As Integer

    Dim setStr As String
    
    '計測時間の宣言
    Dim startTime As Double
    Dim endTime As Double
    Dim processTime As Double

    '開始時間取得
    startTime = Timer

    '文字列の結合を繰り返し
    For i = 1 To 1000
        For j = 1 To 47
            'セルの文字列を配列に設定
            str(((i - 1) * 47) + j - 1) = Cells(j, 2)
        Next j
    Next i
    '配列の文字列をString型に設定
    setStr = Join(str, ",")
    
    '終了時間取得
    endTime = Timer
    
    '処理時間表示
    processTime = endTime - startTime
    MsgBox "処理時間:" & processTime


End Sub

処理時間のまとめ

・”+”を使用する場合 0.5秒

・”&”を使用する場合 0.484375秒

・Joinを使用する場合 0.14453125秒

上記の通りJoinを使用した場合が一番速いので、データ量が多い場合はJoinを使用することをお勧めします。

今回はJoin関数を紹介させて頂きました。

皆様の参考になれば幸いです。

文字列の内容 Replace関数

Replace関数は文字列を置換する関数です。

標記を統一させたい時などに使用します。

Replace関数の構文

Replace(String, Find, Replace)

Replace(文字列, 検索する文字列, 置換する文字列)

[]内は省略可能です。

Replace(String, Find, Replace, [ start, count, compare])

Replace(文字列, 検索する文字列, 置換する文字列, [ 置換する開始位置 , 置換する回数 , 比較方法 ])

Replace関数の使用例

・Replace関数内に文字列を直接設定

・文字列に検索する文字列が無い場合

・Replace関数内の文字列が空白の場合

・Replace関数内の検索する文字列が空白の場合

・Replace関数内の置換する文字列が空白の場合

・Replace関数で置換する開始位置を設定

・Replace関数で置換する回数を設定

・Replace関数で比較方法を設定

・文字列を変数に設定

・セルから文字列を取得してセルに設定

繰り返し処理(検索する文字列)

・繰り返し処理(文字列、検索する文字列)

・繰り返し処理(文字列、検索する文字列、置換する文字列)

の内容で説明していきます。

Replace関数内に文字列を直接設定

Sub Replace1()
    
    MsgBox Replace("acbcdcec", "c", "f")

End Sub

“c”が”f”に置換されました。

文字列に検索する文字列が無い場合

Sub Replace2()
    
    MsgBox Replace("acbcdcec", "k", "f")

End Sub

文字列内にkがないのでそのまま表示されます。

Replace関数内の文字列が空白の場合

Sub Replace3()
    
    MsgBox Replace("", "c", "f")

End Sub

文字列が空白なので表示されません。

Replace関数内の検索する文字列が空白の場合

Sub Replace4()
    
    MsgBox Replace("acbcdcec", "", "f")

End Sub

検索する文字列がないためそのまま表示されます。

Replace関数内の置換する文字列が空白の場合

Sub Replace5()
    
    MsgBox Replace("acbcdcec", "c", "")

End Sub

置換する文字を空白に設定しているため”c”が空白になり”abde”が表示されます。

Replace関数で置換する開始位置を設定

Sub Replace6()
    
    MsgBox Replace("acbcdcec", "c", "f", 2)

End Sub

開始位置を2文字目に設定したため先頭の”a”が表示されません。

開始位置を省略した場合は先頭から表示されます。

Replace関数で置換する回数を設定

Sub Replace8()
    
    MsgBox Replace("acbcdcec", "c", "f", , 3)

End Sub

置換する回数を3回に設定したため、末尾の”c”が4回目になるので”c”が置換されません。

置換する回数を設定しない場合は、文字列のすべての候補を置換します。

Replace関数で比較方法を設定

Sub Replace9()
    
    MsgBox Replace("cCcC", "c", "f", , , 0)

End Sub

比較方法を0に設定した場合、先頭の”c”だけが”f”に置換されました。

Sub Replace10()
    
    MsgBox Replace("cCcC", "c", "f", , , 1)

End Sub

比較方法を1に設定した場合、すべて”f”に置換されました。

比較方法が0の場合は大小半角全角文字を判定します。

比較方法が1の場合は大小半角全角文字を判定しません。

比較方法を省略した場合は0が設定されます。

Sub Replace11()
    
    MsgBox Replace("cCcC", "c", "f", , , vbBinaryCompare)

End Sub
Sub Replace12()
    
    MsgBox Replace("cCcC", "c", "f", , , vbTextCompare)

End Sub

比較方法の設定が0と1ではなく、vbBinaryCompareとvbTextCompareの記載も可能です。

問題1

以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。

Sub Replace13()
    
    MsgBox Replace("acbcdcecgc", "c", "f", 3, 3)

End Sub

問題2

以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。

Sub Replace14()
    
    MsgBox Replace("acbcCcCdce", "c", "f", 2, 3, 1)

End Sub

問題1の答え

Replace(“acbcdce”, “c”, “f”, 2, 3)

開始位置が3、置換回数が3のため、先頭の”ac”が表示されず、末尾の”c”が4回目のため置換されていません。

問題2の答え

Replace(“acbcCcCdce”, “c”, “f”, 2, 3, 1)

開始位置が2、置換する回数が3、比較方法が1のため、先頭の”a”が表示されず、置換する回数が3回なので大文字の”C”まで”f”に置換されます。

文字列を変数に設定

Sub Replace15()
    Dim str, find, rep As String
    str = "あいうえお"
    find = "い"
    rep = "か"
    
    MsgBox Replace(str, find, rep)

End Sub

“い”が”か”に置換されています。

セルから文字列を取得してセルに設定

Sub Replace16()
    Dim str, find, rep As String
    str = Cells(2, 2)
    find = Cells(2, 3)
    rep = Cells(2, 4)
    
    Cells(2, 5) = Replace(str, find, rep)

End Sub

“い”が”か”に置換されました。

繰り返し処理(検索する文字列)

Sub Replace17()
    Dim str, rep As String
    Dim find() As String
    Dim i, retuNum As Integer
    str = Cells(2, 2)
    rep = Cells(2, 4)
    '検索する文字列の列番号を設定します
    retuNum = 3
    '検索する文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    i = 1
    '文字列の置換をリスト分繰り返します
    For Each Var In find
        str = Replace(str, find(i - 1), rep)
        i = i + 1
    Next
    
    Cells(2, 5) = str

End Sub

今回はFunctionを使用しています。

Functionの内容は検索のリストを作成して返却しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

複数の記号がすべて”-“に変換されました。

繰り返し処理(文字列、検索する文字列)

Sub Replace18()
    Dim rep As String
    Dim str() As String
    Dim find() As String
    Dim i, j, retuNum As Integer
    
    rep = Cells(2, 4)
    
    '文字列の列番号を設定します
    retuNum = 2
    '検索する文字列のリストを設定します
    str() = リストの設定(retuNum)
    
    '検索する文字列の列番号を設定します
    retuNum = 3
    '検索する文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    i = 1
    '文字列をリスト分繰り返します
    For Each Var In str
        j = 1
        '文字列の置換をリスト分繰り返します
        For Each Var2 In find
            str(i - 1) = Replace(str(i - 1), find(j - 1), rep)
            j = j + 1
        Next
        Cells(i + 1, 5) = str(i - 1)
        i = i + 1
    Next
    
End Sub

Functionは文字列のリストと検索のリストの内容を返却しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

置換する文字列が1行毎に置換されました。

繰り返し処理(文字列、検索する文字列、置換する文字列)

検索文字と置換文字は#→a、%→b、$→c、!→d、”→e、&→fという内容で置換します。

Sub Replace19()
    Dim str() As String
    Dim find() As String
    Dim rep() As String
    Dim i, j, retuNum As Integer
    
    '文字列の列番号を設定します
    retuNum = 2
    '検索する文字列のリストを設定します
    str() = リストの設定(retuNum)
    
    '検索する文字列の列番号を設定します
    retuNum = 3
    '検索する文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    '置換する文字列の列番号を設定します
    retuNum = 4
    '置換する文字列のリストを設定します
    rep() = リストの設定(retuNum)
    
    i = 1
    '文字列をリスト分繰り返します
    For Each Var In str
        j = 1
        '文字列の置換をリスト分繰り返します
        For Each Var2 In find
            str(i - 1) = Replace(str(i - 1), find(j - 1), rep(j - 1))
            j = j + 1
        Next
        Cells(i + 1, 5) = str(i - 1)
        i = i + 1
    Next
    
End Sub

Functionは文字列のリスト、検索のリストと置換のリストの内容を返却しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

それぞれ対応している文字が置換されました。

str(i – 1) = Replace(str(i – 1), find(j – 1), rep(j – 1))を

str(i – 1) = Replace(str(i – 1), find(j – 1), rep(j – 1), , , 1)に変更すれば大小全角半角を判定せずに置換されます。

今回はReplace関数について記載させて頂きました。

少しでも皆様の参考になれば幸いです。

文字列の内容 Mid関数

Mid関数は文字列の指定した位置から指定した文字数を取得する関数です。

簡単に言うと文字の抜き取りです。

Mid関数の構文

Mid( String , Start)

Mid( 文字列 , 文字列の指定した位置 )

Mid( String , Start , Length)

Mid( 文字列 , 文字列の指定した位置 , 取得したい文字数 )

Mid関数の使用例

・Mid関数内に文字列を直接設定

・Mid関数内に文字列がないの場合

・文字列を変数に設定

・Mid関数内で文字列の結合

・セルから文字列を取得して隣のセルに設定

繰り返し処理(for文)

・繰り返し処理(Do While文)

の内容で説明していきます。

Mid関数内に文字列を直接設定

Sub Mid01()
    
    MsgBox Mid("abcde", 3)

End Sub

取得したい文字数を指定しなければ3文字目から末尾まで表示されます。

Sub Mid02()
    
    MsgBox Mid("abcde", 3, 2)

End Sub

取得したい文字数を2に指定した場合は3文字目から2文字表示されます。

Mid関数内に文字列がないの場合

Sub Mid1()
    
    MsgBox Mid("", 3)

End Sub

文字列がないためメッセージボックス内には何も表示されません。

文字列を変数に設定

Sub Mid2()
    Dim str As String
    str = "abcde"
    
    MsgBox Mid(str, 3, 2)

End Sub

str = abcdeなので3文字目から2文字までのcdが表示されます。

Mid関数内で文字列の結合

Sub Mid3()
    Dim str As String
    str = "abcde"
    
    MsgBox Mid(str + "fgh", 7, 2)

End Sub

Mid関数の文字列は”abcde”+”fgh”=”abcdefgh”になります。

そこから7文字目から2文字なのでghで表示されます。

問題1

以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。

Sub Mid4()
    Dim str As String
    str = "あいうえお"
    
    MsgBox Mid(str, 2, 2)

End Sub

問題2

以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。

Sub Mid5()
    Dim str1, str2 As String
    str1 = "あいうえお"
    str2 = "かきくけこ"
    
    MsgBox Mid(str1 + str2, 2 + 5, 2 + 1)

End Sub

問題1の答え

str = “あいうえお”でしたので2文字目から2文字ですので”いう”が表示されます。

問題2の答え

Mid(str1 + str2, 2 + 5, 2 + 1)

Mid(“あいうえおかきくけこ”, 7 , 3 )になるため”きくけ”が表示されます。

セルから文字列を取得して隣のセルに設定

B2から文字列を取得してC2に設定します。

Sub Mid6()
    Dim str As String
    str = Range("B2").Value
    
    Range("C2").Value = Mid(str, 3, 2)

End Sub

処理の実行

cdの値がC2のセルに設定されました。

同様の処理内容

Mid関数内にRange(“B2”)を設定する。

Sub Mid7()
    
    Range("C2").Value = Mid(Range("B2").Value, 3, 2)

End Sub

Rangeではなく、Cellsで設定する。

Sub Mid8()
    Dim str As String
    str = Cells(2, 2)
    
    Cells(2, 3) = Mid(str, 3, 2)

End Sub

上記、2つの処理でもcdの値がC2のセルに設定されます。

Cellsのイメージ

繰り返し処理(for文)

B列に取得したい文字列が8行入力されています。

これを繰り返し処理でC列に3文字目から2文字まで取得して表示させます。

処理内容

Sub Mid9()
    Dim str As String
    Dim i As Integer
    
    For i = 1 To 8
        str = Cells(i + 1, 2)
    
        Cells(i + 1, 3) = Mid(str, 3, 2)
    Next

End Sub

処理の結果

8行分3文字目から2文字まで取得できました。

繰り返し処理(Do While文)

for文ではFor i = 1 To 8と記載して8回処理をしたら終了する設定にしました。

Do While文では終了条件で繰り返し処理を終了させます。

終了条件はB列が空白になるまで繰り返し処理を行います。

つまりB10まで繰り返し処理を行います。

処理内容

Sub Mid10()
    Dim str As String
    Dim i As Integer
    
    i = 1
    
    Do While Cells(i + 1, 2) <> ""
        str = Cells(i + 1, 2)
    
        Cells(i + 1, 3) = Mid(str, 3, 2)
        i = i + 1  'この処理が抜けると無限ループになります。

    Loop

End Sub

Do While Cells(i + 1, 2) <> “”で空白でない限り処理を繰り返します。

処理の結果

for文と結果は変わりませんがB列が空白でない限り処理が実行されます。

今回はMid関数を使用した使用例を複数記載致しました。

皆様の参考になれば幸いです。

文字列の内容 Right関数

Right関数は文字列を末尾から指定した文字数分だけ取得する関数です。

簡単に言うと文字の抜き取りです。

Right関数の構文

Right( String , Length )

Right( 文字列 , 抜き出したい文字数 )

Right関数の使用例

・Right関数内に文字列を直接設定

・Right関数内に文字列がないの場合

・文字列を変数に設定

・Right関数内で文字列の結合

・セルから文字列を取得して隣のセルに設定

繰り返し処理(for文)

・繰り返し処理(Do While文)

の内容で説明していきます。

Right関数内に文字列を直接設定

Sub Right0()
    
    MsgBox Right("abcde", 3)

End Sub

末尾から3文字目まで表示されます。

Right関数内に文字列がないの場合

Sub Right1()
    
    MsgBox Right("", 3)

End Sub

文字列がないためメッセージボックス内には何も表示されません。

文字列を変数に設定

Sub Right2()
    Dim str As String
    str = "abcde"
    
    MsgBox Right(str, 3)

End Sub

str = abcdeなので末尾から3文字までのcdeが表示されます。

Right関数内で文字列の結合

Sub Right3()
    Dim str As String
    str = "abcde"
    
    MsgBox Right(str + "fgh", 7)

End Sub

Right関数の文字列は”abcde”+”fgh”=”abcdefgh”になります。

そこから末尾から7文字なのでbcdefghで表示されます。

問題1

以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。

Sub Right4()
    Dim str As String
    str = "あいうえお"
    
    MsgBox Right(str, 2)

End Sub

問題2

以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。

Sub Right5()
    Dim str1, str2 As String
    str1 = "あいうえお"
    str2 = "かきくけこ"
    
    MsgBox Right(str1 + str2, 2 + 5)

End Sub

問題1の答え

str = “あいうえお”でしたので末尾からの2文字ですので”えお”が表示されます。

問題2の答え

Right(“あいうえお” + “かきくけこ”, 2 + 5)

Right(“あいうえおかきくけこ”, 7)になるため”えおかきくけこ”が表示されます。

セルから文字列を取得して隣のセルに設定

B2から文字列を取得してC2に設定します。

Sub Right6()
    Dim str As String
    str = Range("B2").Value
    
    Range("C2").Value = Right(str, 3)

End Sub

処理の実行

cdeの値がC2のセルに設定されました。

同様の処理内容

Right関数内にRange(“B2”)を設定する。

Sub Right7()
    
    Range("C2").Value = Right(Range("B2").Value, 3)

End Sub

Rangeではなく、Cellsで設定する。

Sub Right8()
    Dim str As String
    str = Cells(2, 2)
    
    Cells(2, 3) = Right(str, 3)

End Sub

上記、2つの処理でもcdeの値がC2のセルに設定されます。

Cellsのイメージ

繰り返し処理(for文)

B列に取得したい文字列が8行入力されています。

これを繰り返し処理でC列に末尾から3文字取得して表示させます。

処理内容

Sub Right9()
    Dim str As String
    Dim i As Integer
    
    For i = 1 To 8
        str = Cells(i + 1, 2)
    
        Cells(i + 1, 3) = Right(str, 3)
    Next

End Sub

処理の結果

8行分末尾から3文字まで取得できました。

繰り返し処理(Do While文)

for文ではFor i = 1 To 8と記載して8回処理をしたら終了する設定にしました。

Do While文では終了条件で繰り返し処理を終了させます。

終了条件はB列が空白になるまで繰り返し処理を行います。

つまりB10まで繰り返し処理を行います。

処理内容

Sub Right10()
    Dim str As String
    Dim i As Integer
    
    i = 1
    
    Do While Cells(i + 1, 2) <> ""
        str = Cells(i + 1, 2)
    
        Cells(i + 1, 3) = Right(str, 3)
        i = i + 1  'この処理が抜けると無限ループになります。

    Loop

End Sub

Do While Cells(i + 1, 2) <> “”で空白でない限り処理を繰り返します。

処理の結果

for文と結果は変わりませんがB列が空白でない限り処理が実行されます。

今回はRight関数を使用した使用例を複数記載致しました。

皆様の参考になれば幸いです。

次回はMid関数の使用例を投稿致します。

文字列の内容 Left関数

Left関数は文字列を先頭から指定した文字数分だけ取得する関数です。

簡単に言うと文字の抜き取りです。

Left関数の構文

Left( String , Length )

Left( 文字列 , 抜き出したい文字数 )

Left関数の使用例

・Left関数内に文字列を直接設定

・Left関数内に文字列がないの場合

・文字列を変数に設定

・Left関数内で文字列の結合

・セルから文字列を取得して隣のセルに設定

繰り返し処理(for文)

・繰り返し処理(Do While文)

の内容で説明していきます。

Left関数内に文字列を直接設定

Sub Left()
    
    MsgBox Left("abcde", 3)

End Sub

先頭文字から3文字目まで表示されます。

Left関数内に文字列がないの場合

Sub Left1()
    
    MsgBox Left("", 3)

End Sub

文字列がないためメッセージボックス内には何も表示されません。

文字列を変数に設定

Sub Left2()
    Dim str As String
    str = "abcde"
    
    MsgBox Left(str, 3)

End Sub

str = abcdeなので先頭から3文字までのabcが表示されます。

Left関数内で文字列の結合

Sub Left3()
    Dim str As String
    str = "abcde"
    
    MsgBox Left(str + "fgh", 7)

End Sub

Left関数ないの文字列は”abcde”+”fgh”=”abcdefgh”になります。

そこから先頭から7文字なのでabcdefgで表示されます。

問題1

以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。

Sub Left4()
    Dim str As String
    str = "あいうえお"
    
    MsgBox Left(str, 2)

End Sub

問題2

以下の内容を実行したときにメッセージボックスに表示される内容はどの様になりますか。

Sub Left5()
    Dim str1, str2 As String
    str1 = "あいうえお"
    str2 = "かきくけこ"
    
    MsgBox Left(str1 + str2, 2 + 5)

End Sub

問題1の答え

str = “あいうえお”でしたので先頭からの2文字ですので”あい”が表示されます。

問題2の答え

Left(“あいうえお” + “かきくけこ”, 2 + 5)

Left(“あいうえおかきくけこ”, 7)になるため”あいうえおかき”が表示されます。

セルから文字列を取得して隣のセルに設定

B2から文字列を取得してC2に設定します。

Sub Left6()
    Dim str As String
    str = Range("B2").Value
    
    Range("C2").Value = Left(str, 3)

End Sub

処理の実行

abcの値がC2のセルに設定されました。

同様の処理内容

Left関数内にRange(“B2”)を設定する。

Sub Left7()
    
    Range("C2").Value = Left(Range("B2").Value, 3)

End Sub

Rangeではなく、Cellsで設定する。

Sub Left8()
    Dim str As String
    str = Cells(2, 2)
    
    Cells(2, 3) = Left(str, 3)

End Sub

上記、2つの処理でもabcの値がC2のセルに設定されます。

Cellsのイメージ

繰り返し処理(for文)

B列に取得したい文字列が8行入力されています。

これを繰り返し処理でC列に先頭から3文字取得して表示させます。

処理内容

Sub Left9()
    Dim str As String
    Dim i As Integer
    
    For i = 1 To 8
        str = Cells(i + 1, 2)
    
        Cells(i + 1, 3) = Left(str, 3)
    Next

End Sub

処理の結果

8行分先頭から3文字まで取得できました。

しかし、最後から2行の文字列は数値で表示されました。

VBA側で文字列として処理をしてもExcel側で数値に変換されます。

この表示を修正するにはセルの書式設定で文字列として表示させましょう。

これで数値が正常に文字列として表示されます。

繰り返し処理(Do While文)

for文ではFor i = 1 To 8と記載して8回処理をしたら終了する設定にしました。

Do While文では終了条件で繰り返し処理を終了させます。

終了条件はB列が空白になるまで繰り返し処理を行います。

つまりB10まで繰り返し処理を行います。

処理内容

Sub Left10()
    Dim str As String
    Dim i As Integer
    
    i = 1
    
    Do While Cells(i + 1, 2) <> ""
        str = Cells(i + 1, 2)
    
        Cells(i + 1, 3) = Left(str, 3)
        i = i + 1  'この処理が抜けると無限ループになります。
    Loop

End Sub

Do While Cells(i + 1, 2) <> “”で空白でない限り処理を繰り返します。

処理の結果

for文と結果は変わりませんがB列が空白でない限り処理が実行されます。

今回はLeft関数を使用した使用例を複数記載致しました。

皆様の参考になれば幸いです。

次回はRight関数の使用例を投稿致します。