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 *

関連記事

このスクリーンセーバーには、より新しい種類のビデオカードまたはDirect3D・・・

職業柄パソコンをセッティングする機会が多いのだが、過去にある一台がスクリーンセーバーの設定のとき、 「このスクリーンセーバーには、より新しい種類のビデオカードまたはDirect3Dと互換性のあるビデオ …

残業を無くしたい人に伝えたいExcelVBAの存在 エクセルプログラミング

簡単に自己紹介から 現在私は会社のIT部門でプログラムを書く仕事をやっていますが、約4年前は広島で営業補佐の仕事をやっていました。要するに事務職ですね。   広島というと地方になるのですが、 …

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

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

WordPressのテーマ pacifyで検索窓が使えない

備忘録やTipsを作るのに、WordPressのテーマでpacifyが見やすいので使用してみた。 Tipsが1つ1つのカードの形で表示されるので見やすく気に入っているが、右上の検索がどうも動かない。 …

【PHP】 WordPressで使ってる意味不明な

今実行しているコードのファイル名を取得

index.phpなら、c:\xampp\htdocs\index.phpとなる。 &nbsp …