• ベストアンサー

リストボックスのAdditemの文字列生成

リストボックスのAdditemで表示する内容を一覧にしたいと思い、文字列を生成してみたのですが、どうもきれいに揃いません。どうしてーーー??? Do Until rs.EOF (ここで一旦各変数を初期化します) str_co = rs("会社名") str_name = StrConv(rs("商品名"), vbWide) str_price = rs("価格") str_orderday = rs("注文日") str_slip = rs("伝票No.") If Len(rs("受取日")) > 0 Then str_catchday = rs("受取日") Else str_catchday = "" End If If Len(rs("入金日")) > 0 Then str_payday = rs("入金日") Else str_payday = "" End If If rs("返品フラグ") = 1 Then str_returnday = "無" Else str_returnday = "有" End If spc1 = String(7 - Len(str_co), " ") spc2 = String(50 - Len(str_name), " ") spc3 = String(12 - Len(str_price), " ") spc4 = String(15 - Len(str_orderday), " ") spc5 = String(20 - Len(str_slip), " ") spc6 = String(15 - Len(str_catchday), " ") spc7 = String(15 - Len(str_payday), " ") str_data = str_co & spc1 & str_price & spc3 & str_orderday & spc4 & _ str_slip & spc5 & str_catchday & spc6 & str_payday & spc7 & str_returnday .AddItem str_data

質問者が選んだベストアンサー

  • ベストアンサー
  • Vargas
  • ベストアンサー率45% (9/20)
回答No.5

質問のコーディングを見ると、str_nameとspc2がリストボックスに表示するデータ(str_data)に含まれていませんが、これはデバッグするためにとりあえず省いていると考えてよろしいでしょうか? かなり前の記憶でちょっと、曖昧ですが、確かこの様に文字列を整列させる為にはMSゴシック等プロポーショナルでないフォントを選択しても、2バイト文字混在の場合はずれてしまい、結局、フォントをTerminalにした覚えがあります。Terminalはフォントサイズがかなり限定されてしまいますが、唯一綺麗に先頭が揃ったと思います。 カラムを意識したデータを表示させる場合はグリッドコントロール等を使用した方が良いかもしれませんね。

Kalen_F
質問者

お礼

ご返答、本当に有難う御座います! お礼がまたまた遅くなってしまって、スミマセンでした。 回答頂いた、Terminalでフォントを指定してみたら、うまくキレイに列が揃いました! 感激です!\(^o^)/ 最初はスプレッドか何かで表示しようかとも思ったのですが、どうしてもリストボックスでチャレンジしてみたかったんです。。。。。 良い勉強になりました!

その他の回答 (4)

回答No.4

補足です。正しいバイト数を求めるには、 LenB(StrConv(文字列, vbFromUnicode)) とすればOKです。

Kalen_F
質問者

補足

先程の長い文字列のフィールドなんですが、下記になります。 str_name = StrConv(rs("商品名"), vbWide) ここのStrConvは必要ないので省いたんです。 LenB(StrConv(文字列, vbFromUnicode)) で得られたバイト数を一件ずつ調べたら、 26 10 14 79 62 でした。 このフィールドの後ろに入るべき式は、下記にてコーディングしたのですが、まだ私は何か見落としているんでしょうか? spc2 = String(80 - LenB(StrConv(str_name, vbFromUnicode)), " ")

回答No.3

半/全角が混在している場合、ListboxのFontsizeによっては、正しく スペースを埋めていたとしてもずれてしまうことがあります。 また、 String(N - Len(???), " ") は間違っています。(半/全角混在を仮定)Len関数は文字数を返しますので、 "12"と"12"でどちらも「2」が返されます。これだと正しくスペース埋め できません。そこでLenB関数を使ってバイト数を算出するわけですが、 Unicodeの関係で半角でも全角でも1文字2バイトになってしまいます。 その解決にはStrConv関数を使用します。(Helpを見てください) あと、"1234567890"というような文字列で10Byteとる場合の、最後の文字 の処理についても注意が必要です。("0"がまっぷたつになる)

Kalen_F
質問者

お礼

詳しいご返答、本当に有難うございます!(^^) 試してみたんですけど、どういう訳か、5件中、1~3件目の文字が沢山格納させているフィールドだけ、ズレてしまうんです。。。。(T_T)

  • hardy50
  • ベストアンサー率29% (221/746)
回答No.2

再び#1です。 リストボックスのフォントプロパティ値で変更してください。 失礼しました。

Kalen_F
質問者

お礼

まとめてのお礼で、誠に申し訳ございません!! 試したのですが、以前と同じでズレたままなんです。。。(T_T)

  • hardy50
  • ベストアンサー率29% (221/746)
回答No.1

フォント名が「MSPゴシック」等の"P"の付いたものになっていませんか? Pのついたフォントを使うと文字数が同じでも文字幅が変わってしまいます。

関連するQ&A