マル中数字をインクリメントする
マル中数字の連番との戦い
1つのブックの中に同じ様式のワークシートが10ヶあって、それぞれに異なるデータを入力していく、という業務が発生した。
ウチの職場では、普通は1シートづつポチポチ入力していくものらしい。
しかし、だ。たいていはせいぜい3シートぐらいまでしか入力することがないらしいんだが、私に割り当てられた業務では約30シート分ぐらい入力せんといかん。
そんなことやってられっかぼけーーーー!
んで、別のシートに約30レコード分のデータを一覧表にしておいて、そこからマクロで転記するようにしようとした。
そしたらね……。
なんと、
データ入力様式のシートの名前が「××①」、「××②」、……みたいになっとる!!!!!!!!
マジかよ……。
一瞬、シート名を変えようかとも思ったんだが、なんかあちこちリンクされているみたいだし、下手にいじくって動かなくなるのもイヤなので、マル中数字をインクリメントして取得する方法を考えた。
マル中数字をインクリメントして取得する
ちょこっとggってみると、こんなのが見つかった。
①から⑳までは、都合良く順番に並んでいるみたい。
これなら、16進数の 8740 から 1 づつインクリメントさせればうまく行きそうだと思った。
文字コードから2バイト文字を取得する方法については、コチラを参考にした。
手順
文字コードから「①」を取得する手順
- 16進数の「8740」をCInt関数で整数に変換する
- 1.で得られた整数をChr関数に渡す
- 「①」が返る
CInt関数が何をやっているのかよく分かっていないのだが、ともかくイミディエイト・ウインドウに
?Chr(CInt((&h8740))
と入力して[Enter]を押すと、
この通り、「①」が取得できている。
あとは、「8740」の部分をインクリメントしていけば、①、②、③、……というふうになるはず。
テストコード
次のようなコードで実験してみる。
リスト1
Public Sub testNumberInCircle() Dim i As Integer For i = 0 To 9 Debug.Print Chr(CInt("&h" & 8740 + i)) Next End Sub
実行結果
無事、①から⑩まで取得することができた。
おわりに
2バイト文字の処理のしかたについては、根が素人だけに分かっていないことが多くて往生する。
今回はShiftJISだったけど、文字コードは他にもあるので、根本から勉強しないといけないなあ。