Access 丸数字をカウントアップする方法

Access

こんにちは。じじグラマーのカン太です。
日々細りゆくやる気に怯えながらも、現役で週末プログラマーをしています。

①~⑳はカンタン

①~⑳については、すぐに対応できました。
IF文で⑳までを判断して分岐させることもできますし、VBAでもそのまま使用することができますので、カウントアップすることもできます。

使用する丸数字が⑳までであれば、数値として扱ってやれば問題なしです。

㉑以上では問題発生

㉑以上はVBAで読み込むと「?」となって文字化けしてしまいます。なぜなら、VBAでUnicodeは読み込めないからなんだそうです。変換候補選択時に[環境依存]って出ますよね。その文字をVBA上では使用できないんだそうです。

対処法

そこで考えました。面倒ですが、自分変換テーブルを作って処理することにしました。
簡単な流れは以下の通りです。

  1. 「丸数字変換テーブル」を作成してUnicodeの番号を登録しておく
  2. 読み込んだ文字のUnicodeの番号を取得する ⇒ AscW() 関数
  3. 「丸数字変換テーブル」を検索し、該当の数字を取得する
  4. 取得した数字に+1をして、再度「丸数字変換テーブル」を検索し、+1したUnicodeの番号を取得
  5. Unicodeの番号から丸数字を取得する ⇒ ChrW() 関数

とこんな感じの流れです。
サンプルのコードは以下の通りです。

Dim db As Database
Dim rst1 As Recordset
Dim sql1 As String
Dim rst2 As Recordset
Dim sql2 As String


Set db = CurrentDb
sql1 = ""
sql1 = "select * from 丸数字変換テーブル where コード =  " & AscW(Right(Me![製品名], 1))
Set rst1 = db.OpenRecordset(sql1)
        
If rst1.EOF Then
   Exit Sub
Else
   sql2 = ""
   sql2 = "select * from 丸数字変換テーブル where 数字 =  " & rst1!数字 + 1
   Set rst2 = db.OpenRecordset(sql2)
   If rst2.EOF Then
      Exit Sub
   Else
      Me![製品名] = Left(Me![製品名], Len(Me![製品名]) - 1)

       Me![製品名] = Me![製品名] & ChrW(rst2!コード)
   End If
End If

※「製品名」エリアの末尾一桁に丸数字が入力されており、その丸数字をカウントアップして表示しなおしてやる、という処理です。

丸数字変換テーブルは以下のような内容です。

まとめ

丸数字の運用なんてやめちまえ!・・・と言えればいいのですが、なかなかそうもいきませんね。
おかげで結構な時間を取られてしまいました。

同じようなことでお困りの方がおられましたら参考になるのかな。

コメント