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 初期設定でパーマリンクを変えてもエラー404

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

Windows ファイルをゴミ箱に入れずに完全に消去する

やり方 ファイルを選択して、「Shiftキー」を押しながら「Deleteキー」を押す。これだけ。   使い道 システムエンジニアをやっているせいか、別の社員のパソコンにリモートで入って作業を …

【WordPress】プラグインでディレクトリを作成できませんでしたと怒られる

ワードプレスをまっさらにして戻ってきたの投稿以来、ちょこちょこ投稿を重ねている。     そこで表でも作りたいなと思ったので、プラグインのTablePressでも入れようかと思った …

WordPress Stinger8で固定ページにAdsense広告を表示する

なんでStringer8を使い出したんだろうか。もう経緯も忘れたが、Adsense広告も簡単に貼れるし、特に不自由はしていない。というかとても便利だ。   トップの画像がいまだにString …

XAMPPのPHPでメール送信する

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