| 
    
     |  | ▼kz さん: こんにちは。
 
 >>textalignプロパティは、リストボックスのプロパティです。
 >>右寄せ、左寄せの設定は、リストボックス全体にしか設定できないですね。
 >>
 >>私は、上記のような列によって右寄せ、左寄せに分ける場合には、
 >>設定(textalign)は、左寄せに設定しておいて、
 >>右寄せしたい列のメンバには、計算で頭空白を追加しています。
 >>
 >>よって、ColumnWidthsプロパティによって、各列の幅を設定したりすることも必要です。
 >>
 >>だいたいの目安で列幅72ポイント(1インチ)で文字サイズの値の文字数が格納可能です(若干の微調整は必要、尚、フォントがMSゴシック、MS明朝の場合です)。
 これフォントサイズが11のときでした。
 
 >>
 >>何回か試行錯誤すれば、規則がわかると思いますが・・・。
 >>
 >>空白を先頭に埋めるのは、データが半角文字ならRsetステートメントでも
 >>OKだと思いますが、漢字が入っていたりするとStrconv関数を用いての
 >>計算が必要になります。
 >>
 >>もっとも、私が上記のような事をするなら、リストボックスではなく、
 >>Spreadsheetコントロールを使ってしまいますが・・・。
 >>
 >>それからこのリストボックスって、シートに貼り付けたものですか?
 >>それともユーザーフォームですか?
 >
 >▼ichinose さん,こんにちは。
 >
 >質問に対する回答ですが、ユーザーフォームに張り付けて使用します。
 >ichinose さんからのご指摘を考えると、私が考えて作ったものは、
 >非効率なんでしょうか?Spreadsheetコントロールを使えば
 >複数列の表示も右寄せ左寄せも、簡単にできるのでしょうか?
 
 Spreadsheetコントロールは、Excelシートのイメージのコントロールです。
 各列ごとの右寄せ・左寄せの設定は、手動操作で可能です。
 イベントも本家シートより、多いですよ。
 その他のコントロールを探してみて下さい。
 確か本家(MS社)のサイトでもダウンロードできたと思いましたが・・。
 今、考えてみたら、私はリストボックスって業務では使った事なかった・・。
 
 
 取りあえず、リストボックスでのサンプルも作ってみました。
 ユーザーフォーム(Userform1)にリストボックス(Listbox1)のみ貼り付けて
 以下のコードを実行して下さい。
 
 まず、標準モジュールにリストボックスのメンバ作成プロシジャー
 アクティブシートのセルA1〜D10にデータをセットします。
 
 '======================================================================
 Sub Sample_data()
 With Range("a1:d10")
 For idx = 1 To .Rows.Count
 .Cells(idx, 1).Value = idx
 .Cells(idx, 2).Value = "サンプル" & idx
 .Cells(idx, 3).Value = "SAMP" & idx * 2
 .Cells(idx, 4).Value = idx * 3 + 3000
 Next
 End With
 End Sub
 
 
 次に本コードです。メンバデータがあるシートをアクティブにした状態でmainプロシジャーを実行してみて下さい。
 
 標準モジュールに
 '==================================================================
 Sub main()
 UserForm1.Show
 
 End Sub
 
 
 ユーザーフォーム(Userform1)のモジュールに
 '===================================================================
 Private Sub UserForm_Initialize()
 Call リストボックスの設定
 End Sub
 '===================================================================
 Sub リストボックスの設定()
 With ListBox1
 .ColumnCount = 4
 .Width = 352
 .Font.Name = "MS ゴシック"
 .Font.Size = 11
 .Clear
 .ColumnWidths = "85.1;85.1;85.1;85.1"
 Set rng = Range("a1:d10")
 ReDim myarray(rng.Rows.Count - 1, rng.Columns.Count - 1)
 For idx = 1 To rng.Rows.Count
 For jdx = 1 To rng.Columns.Count
 If jdx = 2 Then
 myarray(idx - 1, jdx - 1) = rng.Cells(idx, jdx).Value
 Else
 myarray(idx - 1, jdx - 1) = edit_rset(rng.Cells(idx, jdx).Value, 11)
 End If
 Next jdx
 Next idx
 .List() = myarray()
 End With
 End Sub
 '====================================================================
 Function edit_rset(v_dat, spcnum) As Variant
 Dim wk
 wk = StrConv(v_dat, vbFromUnicode)
 If spcnum - LenB(wk) > 0 Then
 edit_rset = Space(spcnum - LenB(wk)) & v_dat
 Else
 edit_rset = v_dat
 End If
 End Function
 
 
 以上です。
 リストボックスの2列目が左寄せ、後は、右寄せの表示がされるはずですが。
 確認してみて下さい。
 
 |  |