文字列の右側や左側から指定文字数を削除するには
文字列の右側や左側から指定文字数を削除するには文字列操作の関数の組み合わせで実現します。
具体的には、右側の削除はLeft関数とLen関数、左側の削除はRight関数とLen関数を組み合わせます。
おさらいですが、文字列の一部を切り出す関数のLeft、Mid、Right関数は以下のような動作をします。
それぞれ左から、指定位置から、右から、指定文字数を切り出します。
1 2 3 4 5 6 7 8 9 |
Sub GetStringTest() Dim s s = "123456789" Debug.Print Right(s, 3) '// 左から3文字取得 Debug.Print Mid(s, 3, 3) '// 3文字目から3文字取得 Debug.Print Left(s, 3) '// 右から3文字取得 End Sub |
実行結果は以下になります。
789
345
123
1. 文字列の右側から指定文字数削除する関数
以下の関数は文字列の右側から指定した文字数だけ削除して返します。
引数には文字列と削除文字数を指定します。関数の戻り値として削除後の文字列を返します。
引数のチェック処理として、文字列であるかのチェックと削除文字数のチェックを入れています。
削除文字数のチェックを入れている理由は、Left関数の引数に文字列長より大きい値が設定されると実行時エラーが発生するためです。
これらの不正が発生した場合は既定の空文字列を返すようにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
'// 引数1:文字列 '// 引数2:削除文字数 '// 戻り値:削除後の文字列 Function CutRight(s, i As Long) As String Dim iLen As Long '// 文字列長 '// 文字列ではない場合 If VarType(s) <> vbString Then Exit Function End If iLen = Len(s) '// 文字列長より指定文字数が大きい場合 If iLen < i Then Exit Function End If '// 指定文字数を削除して返す CutRight = Left(s, iLen - i) End Function |
2. 文字列の左側から指定文字数削除する関数
上の関数の左側バージョンです。
違いは20行目のLeft関数がRight関数になっている個所だけです。使い方も同じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
'// 引数1:文字列 '// 引数2:削除文字数 '// 戻り値:削除後の文字列 Function CutLeft(s, i As Long) As String Dim iLen As Long '// 文字列長 '// 文字列ではない場合 If VarType(s) <> vbString Then Exit Function End If iLen = Len(s) '// 文字列長より指定文字数が大きい場合 If iLen < i Then Exit Function End If '// 指定文字数を削除して返す CutLeft = Right(s, iLen - i) End Function |
使い方
上記の2つ関数の使い方はどちらも同じで、文字列と削除文字数を引数で渡します。削除後の文字列が戻り値として返ってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub CutRightLeftTest() Dim s s = "123456789" Debug.Print "CutRight(s, -30) = " & CutRight(s, -30) Debug.Print "CutRight(s, -1) = " & CutRight(s, -1) Debug.Print "CutRight(s, 0) = " & CutRight(s, 0) Debug.Print "CutRight(s, 1) = " & CutRight(s, 1) Debug.Print "CutRight(s, 3) = " & CutRight(s, 3) Debug.Print "CutRight(s, 30) = " & CutRight(s, 30) Debug.Print "CutLeft(s, -30) = " & CutLeft(s, -30) Debug.Print "CutLeft(s, -1) = " & CutLeft(s, -1) Debug.Print "CutLeft(s, 0) = " & CutLeft(s, 0) Debug.Print "CutLeft(s, 1) = " & CutLeft(s, 1) Debug.Print "CutLeft(s, 3) = " & CutLeft(s, 3) Debug.Print "CutLeft(s, 30) = " & CutLeft(s, 30) End Sub |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 |
CutRight(s, -30) = 123456789 CutRight(s, -1) = 123456789 CutRight(s, 0) = 123456789 CutRight(s, 1) = 12345678 CutRight(s, 3) = 123456 CutRight(s, 30) = CutLeft(s, -30) = 123456789 CutLeft(s, -1) = 123456789 CutLeft(s, 0) = 123456789 CutLeft(s, 1) = 23456789 CutLeft(s, 3) = 456789 CutLeft(s, 30) = |