VBAで文字列を2文字ずつ反転させる

1文字ずつの反転はStrReverse関数で可能

“12345”を”54321″のように反転させるにはStrReverse関数を使うことで可能です。

文字列の反転はこのStrReverse関数でほとんど対応できます。

しかし、”0102を”0201″のように2文字ずつの組み合わせで反転させたい場合などは独自の処理を行う必要があります。

2文字ずつ反転させたい理由

以下で紹介するコードは元々私が必要になった際に作った関数です。

16進数の”00″から”FF”を組み合わせた文字列をバイナリファイルに書き込む際にリトルエンディアン(反転状態)で行う必要がありました。

例えば16進数の”00″から”FF”を組み合わせた”616263″という文字列の反転は2文字ずつで”636261″というようにです。

なぜこのような対応が必要なのかというと、バイナリデータは”00″から”FF”の1バイト文字で全て構成されています。

バイナリファイルの中に見た目での”abc”を登録させたい場合は”abc”の16進数表記である0x61 0x62 0x63で書き込む必要があります。

また書き込む際にエンディアンがビックエンディアン(文字列を左から右に読む)かリトルエンディアン(右から左)かを考慮する必要もありました。

リトルエンディアンの場合は見た目上は”abc”ではなく”cba”で書き込む必要があったため、0x63 0x62 0x61の順にバイナリファイルに登録します。

このようなことに使うための関数です。

2文字ずつ反転する関数のコード

引数文字列を2文字ずつ反転させる関数です。

実装方法はいくつかあると思いますが、このコードでは一度StrReverse関数で反転させています。8行目の部分です。

StrReverse関数で反転させると1文字ずつ反転した状態になっているため、2文字の前後を入れ替えると2文字ずつ反転した形になります。

なお、2文字単位の組み合わせになっていない場合(文字列長が偶数でない場合)は処理しないようにしています。

使い方

StrReverseHex関数の引数に文字列を渡します。

2文字ずつ反転させた結果が返ります。

実行結果
636261
2文字ずつの引数文字列でない

関連記事

サブコンテンツ

このページの先頭へ