2009/06/11(Thu) 01:54:23 編集(投稿者)
試しにVBAで書いてみましたが、短く出来ませんでした。
(IIfを使うために変換後の文字列の仕様がちと変則的になっています)
Option Explicit
Public Sub Test()
Dim str_in As String
Dim str_out As String
str_in = "Abc012_59F_#012Gh"
str_out = f3(str_in)
Debug.Print str_in
Debug.Print str_out
End Sub
Public Function f3(ByVal s As String) As String
If s <> "" Then f3 = IIf(Left(s, 1) = "#", s, IIf(InStr("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Left(s, 1)) > 0, Mid(" 9876543210abcdefghijklmnopqrstuvwxyz", InStr("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", Left(s, 1)) + 1, 1), Left(s, 1)) & f3(Mid(s, 2)))
End Function