更新日:、 作成日:
VBA StrReverse 関数:文字列を反転する
はじめに
Excel VBA マクロの StrReverse 関数から文字列を反転する方法を紹介します。
StrReverse 関数は、指定した文字列の並びを逆にした文字列を返します。
ABC なら CBA を返します。
文字列の先頭からする処理を、後ろから処理したいときに使用します。
StrReverse 関数の引数と戻り値
StrReverse(文字列)
文字列の並びを反転します。
引数「文字列」 | 文字列を指定します。 |
戻り値の型 | 文字列型 (String) |
解説
引数「文字列」が ABC なら CBA を返します。
引数「文字列」が空文字 "" なら、空文字を返します。
Unicode のサロゲートペア文字 𩸽 や 😃 は 2 文字として扱います。それを維持したまま反転するには、関数を作成します。
使用例
StrReverse 関数の使用例を紹介します。
文字列を反転する
文字列を反転します。
Dim s As String
s = StrReverse("あいう")
Debug.Print(s) ' ういあ
s = StrReverse("ABC")
Debug.Print(s) ' CBA
s = StrReverse("-1,234")
Debug.Print(s) ' 432,1-
s = StrReverse("")
Debug.Print(s) ' ""
文字列を後ろからループする
「Mid 関数」を使用して、後ろから 1 文字ずつすべての文字を抽出できます。
Dim 反転 As String
反転 = StrReverse("123456789")
Dim s As String
Dim i As Integer
For i = 1 To Len(反転)
s = Mid(反転, i, 1)
Debug.Print(s) ' 9 8 7 6 5 4 3 2 1
Next
サロゲートペア文字を維持して反転する
サロゲートペア文字を維持したまま反転するために、StrReverseSurrogate 関数を作成して取得しています。
反転したサロゲートペア文字を判定する IsReverseSurrogate 関数を使用しています。詳しくは「文字コードを変換や判定する」をご覧ください。
Sub 実行()
Dim s As String
s = "12" & WorksheetFunction.Unichar(171581) & "56" ' 12𩸽56
Range("A1").Value = StrReverse(s) ' 65??21
Range("B1").Value = StrReverseSurrogate(s) ' 65𩸽21
End Sub
' サロゲートペア文字を維持したまま反転します。
Function StrReverseSurrogate(ByVal text As String) As String
Dim reverse As String
reverse = StrReverse(text) ' 反転する
Dim s As String ' 抽出した文字
Dim char As String
' 文字数を数える
Dim i As Long
For i = 1 To Len(reverse)
char = Mid(reverse, i, 1)
If IsReverseSurrogate(Mid(reverse, i)) Then
' サロゲートペア文字
char = Mid(reverse, i + 1, 1) & char
i = i + 1
End If
s = s & char
Next
StrReverseSurrogate = s
End Function
スポンサーリンク