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 *

関連記事

Laravel DBクラスとクエリビルダとEloquentをそれぞれprint_rしてみた

青本で学習しながら、開発しながらを繰り返してなんとかやっている。   私の場合はAS400(DB2)の開発にLaravelを使っているので、データベースに関しては神経を使っている。 &nbs …

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

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

AS400シフト文字を含めてバイト数を計算する

AS400いわゆるIBM system i では、シフト文字という意味不明な文字がある。 普通「アイウエオ」なら10バイトのはずだが、AS400では、12バイトになる。これは先頭と最後が2バイト文字の …

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

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

Laravel エラー集 未完成

POSTが失敗する The page has expired die to inactivity.Please refresh and try agein. というエラーメッセージでPOSTが失敗する …