VBA StrReverse 関数:文字列を反転する

はじめに

Excel VBA マクロの StrReverse 関数から文字列を反転する方法を紹介します。

StrReverse 関数は、指定した文字列の並びを逆にした文字列を返します。

ABC なら CBA を返します。

文字列の先頭からする処理を、後ろから処理したいときに使用します。

  • 目次
    • StrReverse 関数
    • 解説
    • 使用例

StrReverse 関数

StrReverse(文字列)
文字列の並びを反転します。

引数「文字列」文字列を指定します。
戻り値の型文字列型 (String)

解説

引数「文字列」が ABC なら CBA を返します。

引数「文字列」が空文字 "" なら、空文字を返します。

Unicode のサロゲートペア文字 𩸽😃 は 2 文字として扱います。それを維持したまま反転するには、関数を作成します。

使用例

文字列を反転する。

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