Excel VBA質問箱 IV

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

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


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

【65185】comboboxの複数列表示からの選択 八家九僧陀 10/4/24(土) 17:00 質問[未読]
【65189】Re:comboboxの複数列表示からの選択 teian 10/4/24(土) 23:05 回答[未読]
【65190】Re:comboboxの複数列表示からの選択 八家九僧陀 10/4/25(日) 18:09 質問[未読]
【65191】Re:comboboxの複数列表示からの選択 teian 10/4/25(日) 18:45 発言[未読]
【65199】Re:comboboxの複数列表示からの選択 八家九僧陀 10/4/26(月) 19:12 質問[未読]
【65200】Re:comboboxの複数列表示からの選択 teian 10/4/26(月) 20:56 発言[未読]
【65201】Re:comboboxの複数列表示からの選択 八家九僧陀 10/4/26(月) 22:28 お礼[未読]

【65185】comboboxの複数列表示からの選択
質問  八家九僧陀  - 10/4/24(土) 17:00 -

引用なし
パスワード
   sheet"2"で使用するuserformに、combobox1,textbox1,textbox2,tectbox3を設定し、combobox1に、sheet1のb2:e10の一覧表(b2:e2は見出し,行は増減あり)をリストとして取り込んで表示させて、ある1行を選択したとき、combobox1には選択したb列の値を、同時に(combobox1のchange,又はafterupdateに)textbox1にはC列の値,textbox2にはd列の値,textbox3にはe列の値を取得、表示させたいのですが、VBAでできるでしょうか。
textbox1,textbox2,textbox3は、Vlookup(combobox1.value,sheet1!b2:e10,2)とした方が簡単でしょうか?
combobox1の4列表示の方法、Boxリスト中の見出し設定の方法、選択したときの1列目表示の方法も合わせてご教示ください。

【65189】Re:comboboxの複数列表示からの選択
回答  teian  - 10/4/24(土) 23:05 -

引用なし
パスワード
   「sheet"2"で使用するuserform」というコメントや
「ある1行を選択したとき、」と言うようなが意味が分かりませんが、
一般的なUserFormに配置したComboboxの要素を選んだ時という風に解釈したとして、
>combobox1の4列表示の方法、Boxリスト中の見出し設定の方法、選択したときの1列目表示の方法も合わせてご教示ください。
は以下のようでしょうかね。

Private Sub ComboBox1_Click()
  With Me.ComboBox1
    If .ListIndex < 0 Then Exit Sub
    Me.TextBox1.Value = .List(.ListIndex, 1)
    Me.TextBox2.Value = .List(.ListIndex, 2)
    Me.TextBox3.Value = .List(.ListIndex, 3)
  End With
End Sub

Private Sub UserForm_Initialize()
  Dim r As Range
  Set r = Worksheets("Sheet1").Range("B3:E10")
  With Me.ComboBox1
    .RowSource = r.Address(External:=True)
    .ColumnHeads = True
    .TextColumn = 1   '表示する列を指定する。
    .BoundColumn = 2  'Valueに返す列指定する。この場合はC列表示
    .ColumnCount = 4
    .ColumnWidths = "50;40;30;20"
  End With
End Sub

一般に、各textboxへの2列目〜4列目の表示するために、
わざわざ元の範囲をVLookUpするなんてことはしませんね。

また、フォームのイニシャライズイベントで行ったCommbobox1への各プロパティ設定は、
コードによる設定でなくとも、フォームのデザインモードでプロパティウィンドウから
設定できるものばかりですので、そちらで設定してしまってもいいです。
詳しくはHelpでご確認あれ!

【65190】Re:comboboxの複数列表示からの選択
質問  八家九僧陀  - 10/4/25(日) 18:09 -

引用なし
パスワード
   ▼teian さん:
早速のご教示有難うございます。そっくりそのまま転記させていただき、思ったとおりのことができました。本当にありがとうございます。
が、もうすこしスッキリしたいので、あと3点お聞かせください。

1.Set r = Worksheets("Sheet1").Range("B3:E10") で、B3:E10はリスト元データですが、増減があります。B3〜E列のデータ最終行の記述を教えていただけませんか?
2.リスト元データの見出し部分に色付けしていますが、comboboxのリストにはその色付けは反映できませんか? 
3.これを参考にもっと勉強したいと思いますが、
 .RowSource = r.Address(External:=True) の部分が、どういう働き?をするのか、解説していただけませんか? 特に(External:=True)の意味がわからないのですが?

まっこと、世話のかける奴ですが、お願いします。

【65191】Re:comboboxの複数列表示からの選択
発言  teian  - 10/4/25(日) 18:45 -

引用なし
パスワード
   ▼八家九僧陀 さん:
>▼teian さん:
>早速のご教示有難うございます。そっくりそのまま転記させていただき、思ったとおりのことができました。本当にありがとうございます。
>が、もうすこしスッキリしたいので、あと3点お聞かせください。
>
>1.Set r = Worksheets("Sheet1").Range("B3:E10") で、B3:E10はリスト元データですが、増減があります。B3〜E列のデータ最終行の記述を教えていただけませんか?
>2.リスト元データの見出し部分に色付けしていますが、comboboxのリストにはその色付けは反映できませんか? 
>3.これを参考にもっと勉強したいと思いますが、
> .RowSource = r.Address(External:=True) の部分が、どういう働き?をするのか、解説していただけませんか? 特に(External:=True)の意味がわからないのですが?
>
>まっこと、世話のかける奴ですが、お願いします。


ヒントです。

1.について
RangeクラスのEndプロパティや、Findメソッドを使った手法がよく使われます。
サンプルコードは、ネット検索すればそこらに転がってると思いますよ。
2.について
色付けはできないでしょう。
3.について
Helpは確認されましたか?それがなくても、
Debug.PrintやMsgBoxでもいいですから、
Debug.Print r.Addressで表示される文字列と
Debug.Print r.Address(External:=True)で表示される文字列の
違いをご自分で確認するのがいいでしょう。
ちなみにその引数を指定したのは、そのシートがアクティブでない時に
フォームの表示をしても、対象範囲を取り違えないようにです。

【65199】Re:comboboxの複数列表示からの選択
質問  八家九僧陀  - 10/4/26(月) 19:12 -

引用なし
パスワード
   ▼teian さん:
ご教示いただいたVBAを試行するため、combobox1,textbox1,textbox2,textbox3だけのuserformを試しに作成して実行すると完璧にできたので、現在使用しているUserformに活用しようとコピーして以下のようにVBAを修正し実行したところ、「変数が定義されていません」とエラーメッセージが出て、(.ListIndex,1)のListIndex部分が黄色に表示されていました。
Combo車両通番にはちゃんとリストが表示されています。
今後もぜひとも活用したいVBAですので、原因、改善策を教えてください。

Private Sub Combo車両通番_Click()
  With Me.ComboBox1
    If .ListIndex < 0 Then Exit Sub
    Me.Text車両通番.Value = .List(.ListIndex, 1)
    Me.Text営業記号.Value = .List(.ListIndex, 2)
    Me.Text車種.Value = .List(.ListIndex, 3)
  End With
End Sub

Private Sub UserForm_Initialize()

・(他のinitializeに関係する記述があります)

  Dim r As Range
  Set r = Worksheets("辞書").Range("B3:E10")
  With Me.Combo車両通番
    .RowSource = r.Address(External:=True)
    .ColumnHeads = True
    .TextColumn = 1   '表示する列を指定する。
    .BoundColumn = 2  'Valueに返す列指定する。この場合はC列表示
    .ColumnCount = 4
    .ColumnWidths = "50;40;30;20"
  End With
.
.(他のinitializeに関係する記述があります)
.
End Sub

【65200】Re:comboboxの複数列表示からの選択
発言  teian  - 10/4/26(月) 20:56 -

引用なし
パスワード
   ええと、各コントロール(コンボボックスやテキストボックス)をデフォルトの名前から、自分好みのオブジェクト名に変更した訳ですね。
そうした場合は、もちろん私の提示したコードもそれに合わせる必要があります。
まだ、未修正のオブジェクト名のものが残ってるんじゃないですか?
目を凝らしてよく確認してみて下さい。

【65201】Re:comboboxの複数列表示からの選択
お礼  八家九僧陀  - 10/4/26(月) 22:28 -

引用なし
パスワード
   ▼teian さん:
す、す、すみません。
目を凝らしてよ〜〜く見たら、
Me.Text車両通番.Value = .List(.ListIndex, 1)とすべきところを
Me.Text車両通番.Value = .List(ListIndex, 1)、「.」が抜けていました。
修正すると、(当然ですよね)無事に、完璧に思ったとおりのことができました。
ほんとに世話のかける奴で申し訳ありませんでした。
ひとつ便利な機能を習得できました。ありがとうございました。

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