| 数字を桁ごとにマス目に入れる |
| 近ごろは確定申告書をはじめ、OCR対応の書類が増えてきましたね。ところが通常の印字だけでは、なかなか思うようにマス目に入りません。 そこで、数字を桁ごとにとりだしマス目に入れる必要がでてきます。 テーブルにある「数字1」「数字2」「数字3」「数字4」をそれぞれマス目に入れる方法です。 モジュールにPublic Functionを下記のように記述します。 |
| Public Function sk(suuji, keta) As Variant Dim moto As Variant moto = Int(Nz(suuji) * 0.1 ^ (keta - 1)) If keta > 9 Or keta < 1 Then Exit Function End If If moto = 0 Then If Nz(suuji, 0) = 0 And keta = 1 Then sk = 0 Else sk = Null End If Else sk = Right(moto, 1) End If End Function |
| ファンクションに任意の名前をつけます。短い方がいいのでここでは「sk」とします。 引数に「suuji」と「keta」としましたが、それぞれ数字や桁を指定します。 また、データの型のはバリアント型を用いることにより、より柔軟な方法でデータを処理できるので、ここではバリアント型を用います。 |
| 計算のもとになる部分を「moto」として宣言します。 「moto」は(数字)*(0.1の桁-1乗)を意味します。 つまり桁が3桁目であれば、「0.1の2乗で0.01」となり 「1234」という数字あれば「1234*(0.1)の2乗」で「12.34」となるわけです。 ここではIntで整数化しているので12ということになります。 |
| 次に桁は1〜9桁まで(これは任意に指定できます)を設定します。 |
| あとは もしmotoが0だったら そのなかでも数字が0で1桁目だったら skは0 でなければ空白 じゃなければ、skは、整数化されたmotoの右から1番目ですよ。 という形になります。 したがって前例の「1234」という数字の3桁目は、整数化されたmotoの右から1番目 ですから「12」のなかの「2」ということになります。 |
| あとは、数字をもとにレポートを作成し、テキストボックスのコントロールソースにそれぞれ、=sk([数字1],6) =sk([数字1],5)...のように入れていけば完成です。 |
![]() |
![]() |