Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5111 / 13646 ツリー ←次へ | 前へ→

【52571】リストボックスの列ごとの表示形式指定 ハナ 07/11/20(火) 10:55 質問[未読]
【52575】Re:リストボックスの列ごとの表示形式指定 Jaka 07/11/20(火) 11:49 発言[未読]
【52578】補足 Jaka 07/11/20(火) 12:08 発言[未読]
【52581】Re:リストボックスの列ごとの表示形式指定 ハナ 07/11/20(火) 14:06 お礼[未読]
【52582】Re:リストボックスの列ごとの表示形式指定 Jaka 07/11/20(火) 14:30 発言[未読]

【52571】リストボックスの列ごとの表示形式指定
質問  ハナ  - 07/11/20(火) 10:55 -

引用なし
パスワード
   お世話になっております
ListBoxやComboBoxで複数カラム指定をして表示する場合に
それぞれのColumnごとに文字ぞろえを指定する方法はありませんでしょうか?

下に現状のコードを提示しますが
現状、リストボックスのデータの指定はListBox.Listでおこなっています。

表示は5列構成で、1,2列目が文字列(左揃え)、3列目が金額(カンマつき右揃え)4列目、5列目が日付(右揃え)を指定しようとして、Formatの指定はできているようなのですが、TextAlign指定が上手くいきません。

Private Sub UserForm_Initialize()
Dim myRng As Range
Dim myList As Variant
Dim c As Variant
Dim i As Integer
Set myRng = Range("A2", Range("A65536").End(xlUp))
'配列の再定義
ReDim myList(myRng.Rows.Count - 1, 5)
For Each c In myRng
  myList(i, 0) = c.Offset(, 0).Value
  myList(i, 1) = c.Offset(, 1).Value
  myList(i, 2) = Format(c.Offset(, 2).Value, "##,##0")
  myList(i, 3) = c.Offset(, 3).Value
  myList(i, 4) = Format(c.Offset(, 4).Value, "yyyy/mm/dd")
 i = i + 1
Next c
 ListBox1.List() = myList
 Set myRng = Nothing
End Sub

プロパティー側のRowsorceは空白、TextAlignは左詰(1-TextAlign_Left)です
ご教授、ご指導をお願いします。

【52575】Re:リストボックスの列ごとの表示形式指定
発言  Jaka  - 07/11/20(火) 11:49 -

引用なし
パスワード
   右詰、気持ちは解ります。
私も何度かやりましたが、これといった決め手が見つかりません。

取りあえず、こんな感じでフィールドの文字数を決めておくといった方法ですが、
半角スペースだと、うまく会いません。
全角なら固定文字数の不足分は全角文字数で埋めてもずれないので、私は全角文字の仕様に変えたことがあります。

Sub mdmdl()
固定文字数 = 15
st1 = Format("1234567", "##,##0")
st2 = Format("98765", "##,##0")
MsgBox "-" & Space(固定文字数 - Len(st1)) & st1 & "-" & vbLf & _
    "-" & Space(固定文字数 - Len(st2)) & st2 & "-"

MsgBox "-" & String(固定文字数 - Len(st1), " ") & st1 & "-" & vbLf & _
    "-" & String(固定文字数 - Len(st2), " ") & st2 & "-"
End Sub

【52578】補足
発言  Jaka  - 07/11/20(火) 12:08 -

引用なし
パスワード
   当時は、フォントをプロポーショナル?フォントのまま使っていたから、
半角スペースがずれたのかもしれないです。(覚えてない)
プロポーショナルフォントを止めれば、半角スペースでもずれないかも?

【52581】Re:リストボックスの列ごとの表示形式指定
お礼  ハナ  - 07/11/20(火) 14:06 -

引用なし
パスワード
   ▼Jaka さん:
>右詰、気持ちは解ります。
アリガトウございます。早速、下記のような記述で実行したところ
上手くいきました。ホント苦労していた部分なので助かりました。

Option Explicit
Private Const 固定文字数 As Integer = 16

Private Sub UserForm_Initialize()
Dim myRng As Range
Dim myList As Variant
Dim c As Variant, i As Integer
Dim ST1 '------問題のFORMAT後データです
☆ST1は変数の形としてはstringかと思いましたが、念のためバリアントに・・・ 
Set myRng = Range("A2", Range("A65536").End(xlUp))
'配列の再定義
ReDim myList(myRng.Rows.Count - 1, 5)
For Each c In myRng
  myList(i, 0) = c.Offset(, 0).Value
  myList(i, 1) = c.Offset(, 1).Value
  ST1 = Format(c.Offset(, 2).Value, "##,##0")
  myList(i, 2) = Space(固定文字数 - Len(ST1)) & ST1
  myList(i, 3) = c.Offset(, 3).Value
  myList(i, 4) = Format(c.Offset(, 4).Value, "yyyy/mm/dd")
 i = i + 1
Next c
 ListBox1.List() = myList
 Set myRng = Nothing
End Sub

また、よろしくお願いします。

【52582】Re:リストボックスの列ごとの表示形式指定
発言  Jaka  - 07/11/20(火) 14:30 -

引用なし
パスワード
   ▼ハナ さん:
>Dim ST1 '------問題のFORMAT後データです
>☆ST1は変数の形としてはstringかと思いましたが、念のためバリアントに・・・ 
Format関数は、文字列を返すので、文字型でかまいません。
Variant型でも良いですけど、一応。
変数の名前は、別に文字型を意識したわけじゃなく他に思いつかなかったからなんとなく。

MsgBox TypeName(Format(12345, "##,##0"))

5111 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free