AS400 Excel VBA IT備忘録

【ExcelVBA】シフト文字を含めてバイト数をカウントする

投稿日:2017年6月16日 更新日:

AS400にエクセルに入力したデータをアップロードする仕組みがあるのだが、もちろん10バイトしか入らないカラムだとすると、エクセル上も10バイトしか入れてはいけない。

 

 

しかし、AS400はシフト文字の関係上、計算がややこしい。例えば「ありがとう」なら、10バイトピッタリのはずだが、実際は両端にシフト分半角が1つづづ入るので、10+2の12バイトになる。

 

なので、エクセルのデータの入力規則でLenb(A1) < 10などとしてもダメなのだ。実際は12バイトなのに、エクセル側は10バイトと見て通過させちゃうから、アップ時になって文字数おかしいよと怒られちゃうんだ。

 

これを回避するには、セルの文字を1つ1つ見ていくしかないという結論になった。サンプルプログラムはこうだ。変数はdimで定義しているものと思ってくれ。

 

手順は、まずセルの一文字づつ判定するために、まずセルに何文字入っているかをLengthに取得する。

そのLength文字分ForNextで回す。1~Length(最大値)となるわけだ。

回す内容は、その1文字のバイト数を合計するわけだが、その際1バイトなのか2バイトなのかを判断し、上記3条件においてシフト分を足しこむロジックだ。前の文字との比較が必要になるためprvに代入し、それと比較もしている。

ForNextを終了したら、バイト数の検証作業だ。不正なら文字色を赤に。

これを必要なら、さらにFor文を2つ付けて行と列に対して処理を行う。

ちなみに、
LenBは文字のバイト数を取得する。
StrConv(str,vbFromUnicode)は半角文字を1バイトとして計算させる。最近のエクセルはUnicodeなので、全て2バイトとして見ているらしいので、これが無いと判断にならない。

ところで備忘録とはいえ、俺のコードを世間様に開示していいんだろうか。ま、いいか誰も見てないし。

スポンサーリンク




スポンサーリンク




-AS400, Excel VBA, IT備忘録

執筆者:


comment

Your email address will not be published. Required fields are marked *

関連記事

WordPress リカバリー まっさらにして戻ってこれたぜ

先日からブログをやっているが、投稿を重ねれば重ねるほど、ぶっ壊れたときに復旧できるのかが心配になってきた。さくらVPSは、サーバのSSDがぶっ壊れたがデータは知らんという事例があるようだ。ちゃんとバッ …

XAMPPのPHPでメール送信する

どこを調べてもPHPでメールを送るのは簡単だ。と、ドヤ顔でこんなソースを載せている。それは解ったんだけど、mb_send_mailが使えないんだよ。とブツブツ言いながら調べてphp.iniを直したりな …

Windows XAMPPでローカルの別PCからアクセスできない件

会社で自分のPCにXAMPPを入れてテスト用Webサーバにしている。   バーチャルホストにしているので、通常の80とは別に5つほど適当にポートを割り当てている。   ある日上司か …

AS400 長いカラムを途中で折り返しで表示する

長いカラムを画面表示で端で折り返すのは自動的にAS400がやってくれる。同じ長さのカラムをDDS に用意すればいい。 ただ、このやり方では一番右端まで表示してから折り返すことになる。これを途中で折り返 …

WordPress 初期設定でパーマリンクを変えてもエラー404

ワードプレスも使い慣れてきたことだし、テーマ作成やらMVCの触りを勉強できそうだなと思って、dotinstallの動画で勉強してたんだ。 ちなみに私は開発環境XAMPPでの運用で、VirtualHos …