Excel VBA質問箱 IV

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

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


3407 / 13644 ツリー ←次へ | 前へ→

【62412】コンボボックスの表示について T-K 09/7/21(火) 15:35 質問[未読]
【62413】Re:コンボボックスの表示について つん 09/7/21(火) 15:53 回答[未読]
【62415】Re:コンボボックスの表示について T-K 09/7/21(火) 16:20 お礼[未読]
【62417】Re:コンボボックスの表示について つん 09/7/21(火) 16:36 発言[未読]
【62423】Re:コンボボックスの表示について T-K 09/7/21(火) 17:42 回答[未読]
【62432】Re:コンボボックスの表示について つん 09/7/22(水) 10:31 発言[未読]
【62440】Re:コンボボックスの表示について T-K 09/7/22(水) 16:24 質問[未読]
【62445】Re:コンボボックスの表示について つん 09/7/22(水) 16:56 回答[未読]
【62448】Re:コンボボックスの表示について ひつまぶし 09/7/22(水) 17:19 発言[未読]
【62467】Re:コンボボックスの表示について T-K 09/7/23(木) 9:30 お礼[未読]
【62433】Re:コンボボックスの表示について neptune 09/7/22(水) 11:01 発言[未読]
【62441】Re:コンボボックスの表示について T-K 09/7/22(水) 16:33 お礼[未読]
【62414】Re:コンボボックスの表示について ponpon 09/7/21(火) 16:11 発言[未読]
【62422】Re:コンボボックスの表示について T-K 09/7/21(火) 17:37 お礼[未読]

【62412】コンボボックスの表示について
質問  T-K  - 09/7/21(火) 15:35 -

引用なし
パスワード
   UserForm1を作成し、コンボボックスに上旬, 中旬, "下旬を配置させたいのですが、
▼をクリックしても空欄しか出ません。
何故でしょうか。
配列をしたので、表示させるだけだと思ったのですが・・・
何が足りないのでしょうか???
なにぶん、初心者ですので、ご教示頂ければ幸いです。

Private Sub ComboBox1_Change()
  Dim SeasonArray As Variant
  SeasonArray = Array("上旬", "中旬", "下旬")
  
End Sub

【62413】Re:コンボボックスの表示について
回答  つん  - 09/7/21(火) 15:53 -

引用なし
パスワード
   ▼T-K さん
こんにちは^^


>Private Sub ComboBox1_Change()
>  Dim SeasonArray As Variant
>  SeasonArray = Array("上旬", "中旬", "下旬")
>  
>End Sub

書かれたコードはこれだけですか?
これじゃ、コンボボックスの値が変化する度に、
「SeasonArray」という変数に、値が代入するだけで、
コンボボックスには、なーんにも変化はありようがありません。
(日本語変かな^^;)

コンボボックスに値を入れようとおもったら、
ユーザーフォームの、「Initialize」イベントなどで、
設定してあげなくちゃ。

「AddItem メソッド」とかで。
ヘルプとか、あとネット上で検索かけたら、たくさんサンプルが出てくると思います。

【62414】Re:コンボボックスの表示について
発言  ponpon  - 09/7/21(火) 16:11 -

引用なし
パスワード
   こんにちは。
つんさんの言うとおり、「AddItem メソッド」とかで、ヘルプやネットでググれば
できると思いますが、久しぶりの回答できる質問なので・・・

せっかくSeasonArrayを作っているので、ListでInitializeイヴェントの時に
設定するようにしました。

Private Sub UserForm_Initialize()
  Dim SeasonArray As Variant
  
  SeasonArray = Array("上旬", "中旬", "下旬")
  Me.ComboBox1.List = SeasonArray
End Sub

【62415】Re:コンボボックスの表示について
お礼  T-K  - 09/7/21(火) 16:20 -

引用なし
パスワード
   ▼つん さん
いつも本当にありがとうございます。
配列についての勉強が全然足りてませんでした。
早速、サンプル探してやってみます。

▼つん さん:
>▼T-K さん
>こんにちは^^
>
>
>>Private Sub ComboBox1_Change()
>>  Dim SeasonArray As Variant
>>  SeasonArray = Array("上旬", "中旬", "下旬")
>>  
>>End Sub
>
>書かれたコードはこれだけですか?
>これじゃ、コンボボックスの値が変化する度に、
>「SeasonArray」という変数に、値が代入するだけで、
>コンボボックスには、なーんにも変化はありようがありません。
>(日本語変かな^^;)
>
>コンボボックスに値を入れようとおもったら、
>ユーザーフォームの、「Initialize」イベントなどで、
>設定してあげなくちゃ。
>
>「AddItem メソッド」とかで。
>ヘルプとか、あとネット上で検索かけたら、たくさんサンプルが出てくると思います。

【62417】Re:コンボボックスの表示について
発言  つん  - 09/7/21(火) 16:36 -

引用なし
パスワード
   ▼T-K さん

>配列についての勉強が全然足りてませんでした。

あ、いや・・・
「配列」についてっていうより、
コンボボックスの基本的な使い方をまずはマスターされたらいいかと思いまする〜

【62422】Re:コンボボックスの表示について
お礼  T-K  - 09/7/21(火) 17:37 -

引用なし
パスワード
   ponpon さん
こんにちは。
ありがとうございます。
うまくいきました。
日々精進、頑張ります。


▼ponpon さん:
>こんにちは。
>つんさんの言うとおり、「AddItem メソッド」とかで、ヘルプやネットでググれば
>できると思いますが、久しぶりの回答できる質問なので・・・
>
>せっかくSeasonArrayを作っているので、ListでInitializeイヴェントの時に
>設定するようにしました。
>
>Private Sub UserForm_Initialize()
>  Dim SeasonArray As Variant
>  
>  SeasonArray = Array("上旬", "中旬", "下旬")
>  Me.ComboBox1.List = SeasonArray
>End Sub

【62423】Re:コンボボックスの表示について
回答  T-K  - 09/7/21(火) 17:42 -

引用なし
パスワード
   ▼つん さん
こんにちは。
またヌケたことを。すみません。
ところで、コンボボックスの基本的な使い方が載ってるサイトなど
ありましたら教えて頂けますか。
当方の参考書、5cmくらい分厚いわりに、詳しくないのです。
他、いくつか持ってますが、どれも「コレだ」というのが載ってません。
よろしくお願い致します。

▼つん さん:
>▼T-K さん
>
>>配列についての勉強が全然足りてませんでした。
>
>あ、いや・・・
>「配列」についてっていうより、
>コンボボックスの基本的な使い方をまずはマスターされたらいいかと思いまする〜

【62432】Re:コンボボックスの表示について
発言  つん  - 09/7/22(水) 10:31 -

引用なし
パスワード
   ▼T-K さん
おはようございます^^

>ところで、コンボボックスの基本的な使い方が載ってるサイトなど
>ありましたら教えて頂けますか。
>当方の参考書、5cmくらい分厚いわりに、詳しくないのです。
>他、いくつか持ってますが、どれも「コレだ」というのが載ってません。
>よろしくお願い致します。

うーん、特に「ここが良い!」ってサイトは知りまへんなあ・・・
検索してみたけど、あまりピンと来るところはありませんでした。


私が使ってるリファレンスは、
「Excel2000VBA 実践プログラミングリファレンス」ってのだけど、
タイトル通りすっごーく昔のやわあ。
もう殆ど参考にすることはないけど、滅多に使わないコントロールの使い方とか、たまに調べるのに使います。
だいたいヘルプで事足りちゃうし。
(難しいことしてないから^^;;)

全然役に立たないレスでごめんなさ〜い

【62433】Re:コンボボックスの表示について
発言  neptune  - 09/7/22(水) 11:01 -

引用なし
パスワード
   ▼T-K さん:
殆ど同じ内容なので、前に書いたスレッドからそのまんまコピペしておきます。

////////////以下///////////////

そういう時は、先ずHelpを見ましょう。使用例もあるはずです。

> CombBox1.Value = ActiveCell.Offset(0, 3).Value'CombBoxには読み込めない
'CombBoxには読み込めない
という事なので、これは本当はcombbox1にデータを追加したいと言う事ですよね?
additemメソッドのHelpを見てください。使用例があります。

> CombBox2.Value = ActiveCell.Offset(0, 4).Value   
同じです。

ここからはお節介。
私は、初めてのコントロールの時はHelpの使用例をそのままコピペして、
実行したりする事があります。そんなに時間は掛かりませんし。
そうする事によってcomboboxの事がある程度理解できると思いますし、
掲示板で聞くよりよっぽど自分の為になります。
それでわからなければ聞いた方が良いです。

又、メソッド、プロパティも一通りザッとですが、名前だけでも目を通します。
・・・まぁこれは少し経験、慣れは必要と思いますけど。

/////////ここまで////////////

>>あ、いや・・・
>>「配列」についてっていうより、
>>コンボボックスの基本的な使い方をまずはマスターされたらいいかと思いまする〜
これにまったく同意ですね。^ ^;

【62440】Re:コンボボックスの表示について
質問  T-K  - 09/7/22(水) 16:24 -

引用なし
パスワード
   ▼つん さん:
こんにちは。
とんでもございません。いつも適切なコメントに感謝しています。
ところで、例のコンボボックスですが、Initializeもうまくいき、
下記のようにしてみました。
【Q1】
私は、Worksheets("RowSource_List").Range("B2:B15")が、
UserForm1のComboBox" & ○に格納されるのだろうと考えてました。
ところがマクロを実行してみると、そのマクロボタンのあるシートのセル範囲
(仮にシート1)が一覧されてしまうのです。
参照するシート、セル範囲を指定しているのに何故でしょうか??

【Q2】
cboNumberSeasonのコンボボックスが一覧しません。
多分、cboNumberSeasonの変数型が整数だからかなと思っていますが、
Range("E2:E5")は、文字データです。
それをコンボ有効にするにはどうしたらよいでしょうか。

Private Sub Userform_Initialize()
  Dim cboNumberYear As Integer
  Dim cboNumberSeason As Integer
    
  For cboNumberYear = 1 To 3
  
    UserForm1.Controls("ComboBox" & cboNumberYear).RowSource = Worksheets("RowSource_List").Range("B2:B15").Address
  Next cboNumberYear
  
  For cboNumberSeason = 7 To 9
  
    UserForm1.Controls("ComboBox" & cboNumberSeason).RowSource = Worksheets("RowSource_List").Range("E2:E5").Address
  Next cboNumberSeason
    
End Sub

P.S
実はヘルプが使えないのです。
インストールしなければならないのですが、ディスクが無く、
自分で買えと・・・。
(参考書類は自費。これは後学の為によかったと思ってますが)
仕事で必要なのに最近どこもたいへんです。

▼つん さん:
>▼T-K さん
>おはようございます^^
>
>>ところで、コンボボックスの基本的な使い方が載ってるサイトなど
>>ありましたら教えて頂けますか。
>>当方の参考書、5cmくらい分厚いわりに、詳しくないのです。
>>他、いくつか持ってますが、どれも「コレだ」というのが載ってません。
>>よろしくお願い致します。
>
>うーん、特に「ここが良い!」ってサイトは知りまへんなあ・・・
>検索してみたけど、あまりピンと来るところはありませんでした。
>
>
>私が使ってるリファレンスは、
>「Excel2000VBA 実践プログラミングリファレンス」ってのだけど、
>タイトル通りすっごーく昔のやわあ。
>もう殆ど参考にすることはないけど、滅多に使わないコントロールの使い方とか、たまに調べるのに使います。
>だいたいヘルプで事足りちゃうし。
>(難しいことしてないから^^;;)
>
>全然役に立たないレスでごめんなさ〜い

【62441】Re:コンボボックスの表示について
お礼  T-K  - 09/7/22(水) 16:33 -

引用なし
パスワード
   ▼neptune さん
ありがとうございます。
実は私のPCは何故かヘルプ機能が入っていなく、使えません・・・
仕事で必要なのに、自費で買えと。
でも参考書は買いました(自腹ですけど)。
ご指摘どおり、よーく読んで、それでも???の時は、
またよろしくお願い致します。

▼neptune さん:
>▼T-K さん:
>殆ど同じ内容なので、前に書いたスレッドからそのまんまコピペしておきます。
>
>////////////以下///////////////
>
>そういう時は、先ずHelpを見ましょう。使用例もあるはずです。
>
>> CombBox1.Value = ActiveCell.Offset(0, 3).Value'CombBoxには読み込めない
>'CombBoxには読み込めない
>という事なので、これは本当はcombbox1にデータを追加したいと言う事ですよね?
>additemメソッドのHelpを見てください。使用例があります。
>
>> CombBox2.Value = ActiveCell.Offset(0, 4).Value   
>同じです。
>
>ここからはお節介。
>私は、初めてのコントロールの時はHelpの使用例をそのままコピペして、
>実行したりする事があります。そんなに時間は掛かりませんし。
>そうする事によってcomboboxの事がある程度理解できると思いますし、
>掲示板で聞くよりよっぽど自分の為になります。
>それでわからなければ聞いた方が良いです。
>
>又、メソッド、プロパティも一通りザッとですが、名前だけでも目を通します。
>・・・まぁこれは少し経験、慣れは必要と思いますけど。
>
>/////////ここまで////////////
>
>>>あ、いや・・・
>>>「配列」についてっていうより、
>>>コンボボックスの基本的な使い方をまずはマスターされたらいいかと思いまする〜
>これにまったく同意ですね。^ ^;

【62445】Re:コンボボックスの表示について
回答  つん  - 09/7/22(水) 16:56 -

引用なし
パスワード
   ▼T-K さん
どもども

>【Q1】
>私は、Worksheets("RowSource_List").Range("B2:B15")が、
>UserForm1のComboBox" & ○に格納されるのだろうと考えてました。
>ところがマクロを実行してみると、そのマクロボタンのあるシートのセル範囲
>(仮にシート1)が一覧されてしまうのです。
>参照するシート、セル範囲を指定しているのに何故でしょうか??

>Worksheets("RowSource_List").Range("B2:B15").Address

って、シートから指定してるつもりでも、得られる文字列は、「"B2:B15"」
になるので、結局アクティブシートのそのセル範囲が設定されてしまいます。

MsgBox Worksheets("RowSource_List").Range("B2:B15").Address
で何が表示されるか試されたらよくわかると思います。

シート名から指定するんだったら、

RowSource = "Sheet1!a1:a5"

かなあ。

>【Q2】
>cboNumberSeasonのコンボボックスが一覧しません。
>多分、cboNumberSeasonの変数型が整数だからかなと思っていますが、
>Range("E2:E5")は、文字データです。
>それをコンボ有効にするにはどうしたらよいでしょうか。

cboNumberSeasonは、コンボボックスの番号を指してるので関係ないと思いますが・・・
こちらで簡単にテストしてみたけど、問題なかったけどなー

Private Sub Userform_Initialize()
  Dim cboNumberYear As Integer
  Dim cboNumberSeason As Integer
  
  For cboNumberYear = 1 To 3
    UserForm1.Controls("ComboBox" & cboNumberYear).RowSource = "Sheet1!a1:a5"
  Next cboNumberYear
 
  For cboNumberSeason = 4 To 6 ’※
    UserForm1.Controls("ComboBox" & cboNumberSeason).RowSource = "Sheet1!b1:b5"
  Next cboNumberSeason
  
End Sub

テストするのに適当に変えてますが。。。
※・・の部分ですよね?
ここに設定するデータを文字列にしたけど、問題あらへんかったよ?

ところで、これって、コンボボックス1〜3と、7〜9は、各々同じ値が設定されることになるけど、それはOKなんすか?


ところでその2、引用部分なんやけど、不必要な部分は削除してくれたほうがすっきりしてええと思いまする。

【62448】Re:コンボボックスの表示について
発言  ひつまぶし  - 09/7/22(水) 17:19 -

引用なし
パスワード
   >UserForm1.Controls("ComboBox" & cboNumberYear).RowSource = _
>      Worksheets("RowSource_List").Range("B2:B15").Address

>UserForm1.Controls("ComboBox" & cboNumberSeason).RowSource = _
>      Worksheets("RowSource_List").Range("E2:E5").Address
この指定方法では、各コンボボックスのRowSoruceプロパティには、
"$B$2:$B$15"や"$E$2:$E$5"といったアドレスしか渡りません。
そうすると、フォームのInitializeイベントを通った時に、
たまたまActiveだったシートのその範囲が設定されたことになりますからね。

どのシートのアドレスなのかまで指定してやれば間違いを起こさないでしょう。

  Dim r1 As Range, r2 As Range
  Dim i As Long
  With Worksheets("RowSource_List")
    Set r1 = .Range("B2:B15")
    Set r2 = .Range("E2:E5")
  End With
  For i = 1 To 3
    Me.Controls("ComboBox" & i).RowSource = r1.Address(External=True)
  Next i  
  For i = 7 To 9  
    Me.Controls("ComboBox" & i).RowSource = r2.Address(External=True)
  Next i

というように、Addressプロパティを外部参照付きで呼び出すのも有効かと思います。

あと、
>【Q2】
>cboNumberSeasonのコンボボックスが一覧しません。
>多分、cboNumberSeasonの変数型が整数だからかなと思っていますが、
>Range("E2:E5")は、文字データです。
は、上の理屈で、そのフォームをロードしようとした時の
ActiveSheet上の"E2:E5"がブランクだったとか?

【62467】Re:コンボボックスの表示について
お礼  T-K  - 09/7/23(木) 9:30 -

引用なし
パスワード
   ▼つん さん
おはようございます。
コンボボックスの参照につき。
RowSource = "Sheet1!a1:a5"
でうまくいきました。
初歩的ですが、!も調べて、ああそうか、納得。
徐々にですが、使い方、考え方が分かってきました。
ありがとうございます!

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