|
▼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列目が左寄せ、後は、右寄せの表示がされるはずですが。
確認してみて下さい。
|
|