更新日:、 作成日:

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