〇×反転
〇なら×に、×なら〇に、オセロのように反転させたいことがあります。
ユーザー定義関数を作ってみました。
Function CrossingOver(str As String) As String Select Case str Case "〇" CrossingOver = "×" Case "×" CrossingOver = "〇" End Select End Function Sub test() MsgBox CrossingOver("〇") End Sub
これはこれで動くのですが、もう少し短くしてみたい。
ということで、こんな風に改造してみました。
Function CrossingOver(str As String) As String CrossingOver = Chr(-64808 - Asc(str)) End Function
文字や記号は、数字で管理されています。
その番号を知ることが出来るのが、ASC関数です。
ASC("〇")=-32422
ASC("×")=-32386
従って、これらの合計から〇の番号を引けば×に、×の番号を引けば〇になるわけです。
※計算結果は、Chr関数で記号に戻してあげましょう。
しかしこの関数、重大な欠陥があります。〇と×以外の文字を与えられると、全く関係ない記号を返してしまうのです。
Sub test() MsgBox CrossingOver("◎") End Sub
これを防ぐためには、引数で得た値の選別が必要です。〇と×以外のときは、「参照文字エラー」を返してみました。
Function CrossingOver(str As String) As String Select Case str Case "〇", "×" CrossingOver = Chr(-64808 - Asc(str)) Case Else CrossingOver = "参照文字エラー" End Select End Function
結局、元のコードより長くなってしまいました。短くする試み、失敗です。
参考まで