Excel VBA質問箱 IV

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

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


1561 / 13645 ツリー ←次へ | 前へ→

【73509】リストボックス データ無し行を選択不可に さんたぱぱ 13/1/16(水) 21:21 質問[未読]
【73510】Re:リストボックス データ無し行を選択不... UO3 13/1/16(水) 22:40 発言[未読]
【73523】Re:リストボックス データ無し行を選択不... さんたぱぱ 13/1/17(木) 22:10 お礼[未読]

【73509】リストボックス データ無し行を選択不可...
質問  さんたぱぱ  - 13/1/16(水) 21:21 -

引用なし
パスワード
   ユーザーフォームに配置したリストボックスにワークシートのデータを表示し、リストボックスでデータを選択するとテキストボックスにワークシートの値を表示するようにしています。

ワークシートのデータはRowSourceに売上データ!a2:t100として取得しています。
(a1:t1は見出し)

仮にワークシートの50行目までデータが入力されているとすると、リストボックスで51行目以降の空白行を選択するとテキストボックスにa1:t1の見出しが表示されてしまいます。

これを回避するにはどのようにすればよいでしょうか。
例えば、空白行を選択できないようにするとか、空白行を選択した場合は、テキストボックも空白をするなどと考えるのですが、実現する方法がわかりません。

そもそもなぜ空白行を選択すると見出しが表示されてしまうのかが分かりません。

Private Sub ListBox1_Click()

  If Me.Tag = "Skip" Then Exit Sub
  
  DB行 = ListBox1.Value + 1
  txtBox0.Text = Worksheets("売上データ").Cells(DB行, 1)
  txtBox1.Text = Worksheets("売上データ").Cells(DB行, 2)
  txtBox2.Text = Worksheets("売上データ").Cells(DB行, 3)
  txtBox3.Text = Worksheets("売上データ").Cells(DB行, 4)
  txtBox4.Text = Worksheets("売上データ").Cells(DB行, 5)
  txtBox5.Text = Worksheets("売上データ").Cells(DB行, 6)
  txtBox6.Text = Worksheets("売上データ").Cells(DB行, 7)
  txtBox7.Text = Worksheets("売上データ").Cells(DB行, 8)
  txtBox8.Text = Worksheets("売上データ").Cells(DB行, 9)
  txtBox9.Text = Worksheets("売上データ").Cells(DB行, 10)
  txtBox10.Text = Worksheets("売上データ").Cells(DB行, 11)
  txtBox11.Text = Worksheets("売上データ").Cells(DB行, 12)
  txtBox12.Text = Worksheets("売上データ").Cells(DB行, 13)
  txtBox13.Text = Worksheets("売上データ").Cells(DB行, 14)
  txtBox14.Text = Worksheets("売上データ").Cells(DB行, 15)
  txtBox15.Text = Worksheets("売上データ").Cells(DB行, 16)
  txtBox16.Text = Worksheets("売上データ").Cells(DB行, 17)
  txtBox17.Text = Worksheets("売上データ").Cells(DB行, 18)
  txtBox18.Text = Worksheets("売上データ").Cells(DB行, 19)
  txtBox19.Text = Worksheets("売上データ").Cells(DB行, 20)
  
End Sub

よろしくお願い致します。

【73510】Re:リストボックス データ無し行を選択...
発言  UO3  - 13/1/16(水) 22:40 -

引用なし
パスワード
   ▼さんたぱぱ さん:

こんばんは

まず、なぜ空白行を選ぶと 1 になるのか? ということについてですが
ListBox1.Value + 1
この ListBox1.Value が 「空白値」で、VBAの多くの処理機能で計算上、
空白値を 0 と見なします。 なので 0 + 1 = 1 となりますので 1行目を参照するわけです。

で、空白値をチェックするより、実際の値のあるリスト部分をListBox1のリストとして
設定すればよろしいんです。

方法は2つほど。
まず、プロパティで設定してある RowSource をクリアして未設定にしておいてください。
その上で、以下のいずれかで。

Private Sub UserForm_Initialize()
  With Sheets("Sheet1")  'リストがあるシート名。実際のものに変更してください。
    ListBox1.List = .Range("A2", .Range("A" & .Rows.Count).End(xlUp)).Resize(, 20).Value
  End With
End Sub


または

Private Sub UserForm_Initialize()
  Dim z As Long
  With Sheets("Sheet1")  'リストがあるシート名。実際のものに変更してください。
    z = .Range("A" & .Rows.Count).End(xlUp).Row
  End With

  ListBox1.RowSource = "Sheet1!A2:T" & z

End Sub

【73523】Re:リストボックス データ無し行を選択...
お礼  さんたぱぱ  - 13/1/17(木) 22:10 -

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

毎度ありがとうございます。

今回もちゃんと出来ました。
空白行を選ぶと見出しが選択される理屈もとても良くわかりました。

一発解決です!

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