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で検索しても限界がありましたので書き込みしました。
変な質問だと思いますがお答え頂けると幸いです。宜しくお願いします。
レイアウト修正が過大のようなので、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で参照することができるので、
できればそちらも参考にしてみてください。
。
返答ありがとうございます。
ちなみにこういう事は出来ますか?
最初のデータが A4 = 200 で
次のデータが
format(A4,"000000000000")
↑
"0"とします。
間違えて送信を押してしまいましたもう一度書き込みします。
ちなみにこういう事は出来ますか?
最初の入って来るデータが A4 = 200 で
次の入って来るデータが A5 = 01 が来るとします。
そこで A4 のところは 12桁なのですが、A5は 4桁表示で編集する時には、
どうしたらよいのでしょうか?
format(A4,"000000000000") ですと 12桁の編集になってしまいます。
format(A5,"0000")で編集は出来ますが桁数がランダムなので
12桁の時や4桁の時に
format(A4 & A5のデータ,"0") でそこで12桁や7桁といった数字を入れて
表示は可能なのでしょうか?
教えて下さい。
ちょっと質問の内容が読み取れていないかもですが。。
先ほどのレスで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桁、という判定をすることになると思います。
的を得ていない回答かもしれませんが、どうでしょうか。。
ぢゃわ さん色々お答え頂きましてありがとうございました。
何とか解決出来ました。
解りずらい質問ですいませんでした。言葉で伝えるのは難しいものですね。
ツイート | ![]() |