Excel VBA質問箱 IV

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

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


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

【73202】リストボックスのColumn幅 亜矢 12/11/29(木) 16:54 質問[未読]
【73203】Re:リストボックスのColumn幅 ウッシ 12/11/29(木) 17:09 回答[未読]
【73205】Re:リストボックスのColumn幅 亜矢 12/11/29(木) 17:45 お礼[未読]
【73204】Re:リストボックスのColumn幅 UO3 12/11/29(木) 17:19 発言[未読]

【73202】リストボックスのColumn幅
質問  亜矢  - 12/11/29(木) 16:54 -

引用なし
パスワード
   いつもお世話になります。
ユーザーフォームのColumnWidthsをデータ量(幅)によって可変にする
書き方を教えて頂きたいと思います。
 現状は下のように固定で表示していますが、ある何番目かがデータ量が
 多いことはわかっています。(何番目かはデータによって変わります)
With UserForm1.ListBox2
 .ColumnCount = 13
 .ColumnWidths = "140;60;60;60;60;60;60;60;60;60;60;60;100"
 .Column = DDat
End With
よろしくお願いします。

【73203】Re:リストボックスのColumn幅
回答  ウッシ  - 12/11/29(木) 17:09 -

引用なし
パスワード
   こんにちは

  Dim v As Variant
  With UserForm1.ListBox2
    .ColumnCount = 13
    .ColumnWidths = "140;60;60;60;60;60;60;60;60;60;60;60;100"

    v = Split(.ColumnWidths, ";")
    v(0) = "60 pt"
    .ColumnWidths = Join(v, ";")
    .Column = DDat
  End With

一旦配列に受けて、何番目かを変更して再セットしてはどうですか?

【73204】Re:リストボックスのColumn幅
発言  UO3  - 12/11/29(木) 17:19 -

引用なし
パスワード
   ▼亜矢 さん:

> 現状は下のように固定で表示していますが、ある何番目かがデータ量が
> 多いことはわかっています。(何番目かはデータによって変わります)

その何番目を広げるのかは、別途、既存ロジックで把握している列番号を
指定するのですか?
それとも、どの列が広げるべき列かの判定コードもお望みですか?
その場合は、判定要件を説明いただかないと回答ができませんね。

また、広げるのは、どれか1列だけですか?

> .ColumnWidths = "140;60;60;60;60;60;60;60;60;60;60;60;100"

広げる列幅はどう考えたらいいのですか?
たとえば 1列目を広げるとすれば 140 を いくつにするのですか?
2列目ならどうなりますか?13列目ならどうなりますか?

あるいは、各列、ぴったりの列幅を自動設定ですか?
(これは、文字フォントとの関連もありますので至難の技に近いかもですが)

いずれにしても、ColumnWidths に与えるものは【文字列】ですから、
以下のようにして作成した文字列をセットすればよろしいかと。

Sub Test()
  Dim v As Variant
  Dim x As Long
  Dim cw As Long
  
  v = VBA.Array(140, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 100)
  x = 5    '変更列番号
  cw = 80   '新しい列幅
  
  v(x - 1) = cw
  
  MsgBox Join(v, ";")
  
End Sub

【73205】Re:リストボックスのColumn幅
お礼  亜矢  - 12/11/29(木) 17:45 -

引用なし
パスワード
   ▼ウッシ さん:
>こんにちは
>
>  Dim v As Variant
>  With UserForm1.ListBox2
>    .ColumnCount = 13
>    .ColumnWidths = "140;60;60;60;60;60;60;60;60;60;60;60;100"
>
>    v = Split(.ColumnWidths, ";")
>    v(0) = "60 pt"
>    .ColumnWidths = Join(v, ";")
>    .Column = DDat
>  End With
>
>一旦配列に受けて、何番目かを変更して再セットしてはどうですか?
上記の様にしたら解決しました。ありがとうございました。

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