Excel VBA質問箱 IV

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

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


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

【51964】listboxとspinbuttonで複数行を表示したい Michiko 07/10/13(土) 9:37 質問[未読]
【51965】Re:listboxとspinbuttonで複数行を表示した... りん 07/10/13(土) 15:02 発言[未読]
【51992】Re:listboxとspinbuttonで複数行を表示した... Michiko 07/10/15(月) 7:34 お礼[未読]
【52006】Re:listboxとspinbuttonで複数行を表示した... ichinose 07/10/16(火) 7:17 発言[未読]

【51964】listboxとspinbuttonで複数行を表示したい
質問  Michiko  - 07/10/13(土) 9:37 -

引用なし
パスワード
   スピンボタンで10行単位で移動させています。
B列の1行の表示は出来たのですが…

3列の表示が出来ません(B〜D列の3列)
方法をアドバイスお願いします。

Private Sub UserForm_Initialize()
Dim itemCount As Long
itemCount = Worksheets("sheet1").Range("B500").End(xlUp).Row
Me.SpinButton1.Max = WorksheetFunction.RoundUp(itemCount / 10, 0) - 1

'With ListBox1
'    .ColumnCount = 3
'    .ColumnWidths = "25;25;25"
'    .ColumnHeads = True
'    .RowSource = "B1:D" & Cells(Rows.Count, 3).End(xlUp).Row
'End With

'Me.ListBox1.List = Rows(21)

SpinButton1_Change
End Sub


Private Sub SpinButton1_Change()
Dim num As Long
Dim itemCount As Long
With Me.SpinButton1
num = 10          
If .Value = .Max Then
If itemCount Mod 10 <> 0 Then
num = itemCount Mod 10
End If
End If
Me.ListBox1.List = Worksheets("sheet1").Range("B" & .Value * 10 + 1).Resize(num, 2).Value

End With
End Sub

【51965】Re:listboxとspinbuttonで複数行を表示し...
発言  りん E-MAIL  - 07/10/13(土) 15:02 -

引用なし
パスワード
   Michiko さん、こんにちわ。

>スピンボタンで10行単位で移動させています。
>3列の表示が出来ません(B〜D列の3列)

itemCountの宣言の位置を外に出して、Resizeの列拡張の値を変更しました。
あと、不要とおもわれる行は削除しましたがいかがでしょうか。

Dim itemCount As Long
Private Sub UserForm_Initialize()
  itemCount = Worksheets("sheet1").Range("B500").End(xlUp).Row
  Me.SpinButton1.Max = WorksheetFunction.RoundUp(itemCount / 10, 0) - 1
  '
  With ListBox1
   .ColumnCount = 3
   .ColumnWidths = "25;25;25"
   .ColumnHeads = True
  End With
  '
  SpinButton1_Change
End Sub

Private Sub SpinButton1_Change()
  Dim num As Long
  With Me.SpinButton1
   num = (itemCount - 1) Mod 10 + 1
   Me.ListBox1.List = Worksheets("sheet1").Range("B" & .Value * 10 + 1).Resize(num, 3).Value
  End With
End Sub

こんな感じです。

【51992】Re:listboxとspinbuttonで複数行を表示し...
お礼  Michiko  - 07/10/15(月) 7:34 -

引用なし
パスワード
   ▼りん さん:
おはようございます。
ご指摘とコードの変更ありがとうございました。
これでほぼ思いのとおりです。
ただ
.ColumnHeads = True
が効かないのです。
理由は何故でしょう?
お時間が許せばまたコメントお願いします。

【52006】Re:listboxとspinbuttonで複数行を表示し...
発言  ichinose  - 07/10/16(火) 7:17 -

引用なし
パスワード
   おはようございます。


>ただ
>.ColumnHeads = True
>が効かないのです。
>理由は何故でしょう?

これは、ListboxのメンバをRowSourceプロパティを使って指定した時に有効になります。

例、

listbox1.rowsource="a2:a10"

と指定すると、ColumnHeads = Trueならば、セルA1がヘッダーとして表示されます。

ですから、りんさんが提示されたコードを

>Private Sub SpinButton1_Change()
>  Dim num As Long
>  With Me.SpinButton1
>   num = (itemCount - 1) Mod 10 + 1
   Me.ListBox1.rowsource = Worksheets("sheet1").Range("B" & .Value * 10 + 1).Resize(num, 3).address(,,,true)
>  End With
>End Sub

だけではヘッダーが上記コードを実行するたびに変わってしまいますよね?

一度、
Worksheets("sheet1").Range("B" & .Value * 10 + 1).Resize(num, 3).address(,,,true)

この↑セル範囲のデータを別のシートにコピーして(ヘッダーを固定表示させるため)に
そのコピー後のセル範囲をrowsourceプロパティとして、指定する

という方法を検討してみてください。

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