Sub Len6()
Dim moji As String
Dim ichi, mojisu As Integer
Dim i As Integer
i = 0
Do While Cells(i + 2, 2) <> ""
'セルから文字列を取得
moji = Cells(i + 2, 2)
'文字列の末尾から\の位置を取得
ichi = InStrRev(moji, "\")
'文字列の文字数を取得
mojisu = Len(moji)
'ファイル名を取得
Cells(i + 2, 3) = Mid(moji, ichi + 1, mojisu)
i = i + 1
Loop
End Sub
Sub LCaseUCase1()
MsgBox LCase("AbCdE") & vbLf & UCase("AbCdE")
End Sub
L/UCase関数内で”AbCdE”を設定します。
vbLfは改行です。
LCaseですべて小文字に変換されました。
UCaseですべて大文字に変換されました。
空白を設定
Sub LCaseUCase2()
MsgBox LCase("") & vbLf & UCase("")
End Sub
L/UCase関数内は空白です。
何も表示されません。
アルファベットと記号の設定
Sub LCaseUCase3()
MsgBox LCase("A|B?c&d") & vbLf & UCase("A|B?c&d")
End Sub
L/UCase関数内で”A|B?c&d”を設定します。
LCaseで記号以外は小文字に変換されました。
UCaseで記号以外は大文字に変換されました。
セルから文字列を取得して隣のセルに設定
セルのB2に”AbCdE”が入力されています。
B2の値をLCaseとUCaseを使用した結果をセルに表示します。
Sub LCaseUCase4()
Dim moji As String
'セルから文字列を取得
moji = Cells(2, 2)
Cells(2, 3) = LCase(moji)
Cells(2, 4) = UCase(moji)
End Sub
小文字と大文字に変換されました。
繰り返し処理(Do While文)
B列に複数の文字列が入力されています。
B列の値をLCaseとUCaseを使用した結果をセルに表示します。
Sub LCaseUCase5()
Dim moji As String
Dim i As Integer
i = 0
'B列が空白でない間繰り返し処理
Do While Cells(2 + i, 2) <> ""
moji = Cells(2 + i, 2)
Cells(2 + i, 3) = LCase(moji)
Cells(2 + i, 4) = UCase(moji)
i = i + 1
Loop
End Sub
Sub CStr6()
MsgBox "今は" + CStr(Now()) + "です"
End Sub
Now()をCStrに設定しています。
エラーが発生することなく表示されました。
大体の方はCStrで書かず&でコードを書くと思います。
Sub CStr7()
MsgBox "今は" & Now() & "です"
End Sub
セルから値を取得してString型の配列に格納
上記の内容は文字列、日付、数値のデータがあります。
こちらを文字列に変換して配列に格納していきます。
Sub CStr8()
Dim neko(3) As String
Dim i As Integer
i = 0
Do While Cells(2, i + 2) <> ""
neko(i) = CStr(Cells(2, i + 2))
i = i + 1
Loop
Cells(2, i + 2) = Join(neko)
End Sub
Sub Split2()
MsgBox Join(Split("aaa bbb ccc"), vbLf)
End Sub
この様な記載も可能です。
Split関数内に文字列が無い場合
Sub Split3()
Dim str() As String
str = Split("")
MsgBox Join(str, vbLf)
End Sub
Split関数内に文字列がないので何も表示されません。
Split関数内に区切りたい文字列を設定
Sub Split4()
Dim str() As String
str = Split("aaa bbb_ccc", "_")
MsgBox Join(str, vbLf)
End Sub
Split関数内で区切り文字を”_”で設定します。
Split関数内の文字列にbとcの間に”_”があるので、分割して配列に格納されました。
区切り文字が”_”のため” “は判断されません。
Split関数内に返す要素数を設定
Sub Split5()
Dim str() As String
str = Split("aaa_bbb_ccc", "_", 2)
MsgBox Join(str, vbLf)
End Sub
Split関数内で”_”が文字列の中に2つあります。
返す要素数を2に設定しています。
配列の要素数を2で設定したので、1つ目の”_”で区切られ配列に格納されました。
ちなみに返す要素数を-1にするとすべて返します。
区切り文字を省略した場合は” “で判定されます。
Sub Split6()
Dim str() As String
str = Split("aaa bbb ccc", , 2)
MsgBox Join(str, vbLf)
End Sub
Split関数内に区切り文字の比較方法を設定
比較方法ですが、大文字小文字を比較するしないの設定が出来ます。
0 or vbBinaryCompare で大文字小文字を比較します。
Sub Split7()
Dim str() As String
str = Split("aaaebbbEccc", "E", , 0)
MsgBox Join(str, vbLf)
End Sub
Sub Split8()
Dim str() As String
str = Split("aaaebbbEccc", "E", , vbBinaryCompare)
MsgBox Join(str, vbLf)
End Sub
aとbの間にe、bとcの間にEがあります。
区切り文字は”E”です。
“E”で判定された部分で分割されて、配列に格納されています。
1 or vbTextCompare で大文字小文字を比較しません。
Sub Split9()
Dim str() As String
str = Split("aaaebbbEccc", "E", , 1)
MsgBox Join(str, vbLf)
End Sub
Sub Split10()
Dim str() As String
str = Split("aaaebbbEccc", "E", , vbTextCompare)
MsgBox Join(str, vbLf)
End Sub
aとbの間にe、bとcの間にEがあります。
区切り文字は”E”です。
“e”と”E”で判定された部分で分割されて、配列に格納されています。
セルから文字列を取得してセルに設定
B2の文字列とC2の区切り文字を取得して配列の内容をD2に表示させます。
Sub Split11()
Dim str() As String
Dim kugiri, moji As String
'セルから文字列を取得
moji = Cells(2, 2)
'セルから区切り文字を取得
kugiri = Cells(2, 3)
'Splitで配列に格納
str = Split(moji, kugiri)
'配列の内容をセルに表示
Cells(2, 4) = Join(str, vbLf)
End Sub
配列の内容がD2に表示されました。
繰り返し処理(文字列、区切り文字)
B列の文字列とC列の区切り文字を取得して配列の内容をD列に表示させます。
C5には” “を入力していて、C6には空白です。
Sub Split12()
Dim str() As String
Dim kugiri, moji As String
Dim i As Integer
i = 2
Do While Cells(i, 2) <> ""
'セルから文字列を取得
moji = Cells(i, 2)
'セルから区切り文字を取得
kugiri = Cells(i, 3)
'Splitで配列に格納
str = Split(moji, kugiri)
'配列の内容をセルに表示
Cells(i, 4) = Join(str, vbLf)
i = i + 1
Loop
End Sub
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
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
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
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
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
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