Format関数で・・・?

解決


JRA  2003-04-10 06:15:27  No: 106635

Format関数を使って編集したいのですがちょっとわかりません。

--例--データが5件あり
A1  char(3)
A2  char(2)
A3  char(3)
A4  number(12,0)
A5  number(4,0)
  A1   A2  A3   A4    A5  
  000, A0, BB0 , 1000,  01
  111, A1, BB1 ,  200,0000
  222, A2, BB2 , 3000,1234
  333, A3, BB3 ,50000,   2
  444, A4, null,  100,   3

上記のようなデータがあります。

For文で上から順番に回します。

A1〜A3のformatの使い方とA3で "null" の所にも3桁でブランクを入れて
編集をしたいのです。

A4とA5で数字がランダムで入っています。この時にFormatで左前に "0" を付けて
それぞれ12桁フルと4桁フルに値を編集したいのです。

編集後の結果で
  A1  A2 A3  A4           A5  
  000,A0,BB0,000000001000,0001
  111,A1,BB1,000000000200,0000
  222,A2,BB2,000000003000,1234
  333,A3,BB3,000000050000,0002
  444,A4,   ,000000000100,0003

にデータの値を取りたいのですが初めてVBをやっているので
ヘルプやWebで検索しても限界がありましたので書き込みしました。

変な質問だと思いますがお答え頂けると幸いです。宜しくお願いします。


ぢゃわ  2003-04-10 20:23:23  No: 106636

レイアウト修正が過大のようなので、A1〜A5に値を取得するところまでは
できてるものとして話を進めさせていただきますね。

数字に前ゼロをつける場合、format関数は
format( 数値 , "出力形式" )の形で記述します。
この出力形式の部分でレイアウトを指定します。
 "0":0で置き換え
 "#":NULLで置き換え
です。
例えば A4 = 200 の場合、
 format(A4,"000000000000")なら結果は"000000000200"
 format(A4,"############")なら結果は"200"
になります。
ちなみに
 format(123,"###,000,000")なら"000,123"
 format(0,"###,###,##0円")なら"0円"
 format(0,"###,###,###円")なら"円"
です。

文字列にスペースを補う方ですが、
まずレイアウト修正する文字の文字数をlen関数で調べます。
 len( 文字列 )
で文字長がわかります。
次に規定の文字数に足りない分だけspace関数で空白を補います。
 space( 数値 )
で空白を数値分返します。

例えば、A3 = "BB" だった場合、
'------------------------------------------
 dim A3 as string
 dim lMojisu as long

 A3 = "BB"
 lMojisu = len( A3 )     ' lMojisuには 2 が入ります
 A3 = A3 & space( 3 - lMojisu )  ' "BB"の後ろに空白が 3-2 で 1個補われます
'------------------------------------------
これで結果 A3 は  "BB "になります。
空白以外の文字を補いたい場合はstring関数でできます。
あと、上記ロジックでは文字数のチェックをしていないので
文字数が 4 以上の場合にはエラーになります。
簡単な例文なので他にも問題はあるのですが、あくまで例文
なので参考までに。。。(汗

ちなみに、VBのヘルプは(MSDNがインストールしてあれば)
調べたい関数にカーソルを置いてF1で参照することができるので、
できればそちらも参考にしてみてください。


JRA  2003-04-10 21:04:09  No: 106637

返答ありがとうございます。
ちなみにこういう事は出来ますか?
最初のデータが  A4 = 200 で
次のデータが

 format(A4,"000000000000") 
                  ↑
              "0"とします。


JRA  2003-04-10 21:16:54  No: 106638

間違えて送信を押してしまいましたもう一度書き込みします。
ちなみにこういう事は出来ますか?
最初の入って来るデータが  A4 = 200 で
次の入って来るデータが    A5 =  01 が来るとします。
そこで A4 のところは 12桁なのですが、A5は 4桁表示で編集する時には、
どうしたらよいのでしょうか?
format(A4,"000000000000")  ですと  12桁の編集になってしまいます。
format(A5,"0000")で編集は出来ますが桁数がランダムなので
12桁の時や4桁の時に 

format(A4 & A5のデータ,"0")  でそこで12桁や7桁といった数字を入れて
表示は可能なのでしょうか?

教えて下さい。


ぢゃわ  2003-04-10 22:22:09  No: 106639

ちょっと質問の内容が読み取れていないかもですが。。
先ほどのレスでA1〜A5に値を取得済みとさせていただいていたのですが、
自分はA1〜A5までを一度に取得していると認識していました。
つまり、一度に1行ずつ取得し、A1,A2,A3,A4,A5の各変数に
  一回目:A1=000 A2=A0 A3=BB0 A4=000000001000 A5=0001
  二回目:A1=111 A2=A1 A3=BB1 A4=000000000200 A5=0000
といった感じで取得していると思ってました。

>最初の入って来るデータが A4 = 200 で
>次の入って来るデータが  A5 =  01 が来るとします。
ということは一回に1データずつ取得しているのでしょうか?
でも変数はかえているようですし。。

質問の件についても、一度にA1〜A5までを取得したうえで、
それぞれレイアウト調整をすればできそうな気がします。

もしどうしても1データずつ取得しなければならないのであれば
IF文で条件分岐させて、取得したのがA4のデータの場合は12桁、
A5のデータの場合は4桁、という判定をすることになると思います。

的を得ていない回答かもしれませんが、どうでしょうか。。


JRA  2003-04-10 23:27:56  No: 106640

ぢゃわ さん色々お答え頂きましてありがとうございました。
何とか解決出来ました。
解りずらい質問ですいませんでした。言葉で伝えるのは難しいものですね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加