• ベストアンサー

ExcelVBA コンボボックスの表示

お世話になります。 VBAユーザフォームのコンボボックスのリストにソースから追加しています。 ColumnCountを2に設定しているので、コンボボックスから選択するときにはちゃんと2列表示されるのですが、選択したあとにコンボボックスの表示に残るのは1列目だけなのです。 どのプロパティを変更したらいいのか見つかりません。 ご存知の方がいらっしゃいましたら、教えてください。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

コンボボックスのリストを選択時、表示されるのはTextColumnに左右されます。 従って、表示されるのは、TextColumnに設定した1列目か2列目のどちらかになります。 しかし、2列程度なら選択時に2列分表示するのは不可能ではありません。(ごまかし技です) 下に書いたコードの要件は、ComboBox1のプロパティを   Width = 120   ColumnCount = 2   ColumnWidths = 49.95pt;49.95pt (実際は50;50をセット)   Font = MS明朝   TextColumn = 1   ControlSource は設定なし    です。 下のコードでは、Sheet1のA1:B10をComboBox1のリストに取り込んでいます。その時、  1列目を A列 & スペース & B列  2列目は B列 として、ColumnWidths を調節して1列目を狭くしています。(1列目は全部表示されていません) 選択したら、A列 & スペース & B列 が表示される理屈です。 どのリストを選択したか知るには、ComboBox1.ListIndex を調べれば分かります。 ご参考に。 Private Sub UserForm_Initialize()   Dim rw As Integer '行カウンタ   Dim myArray(9, 1) As Variant 'コンボボックスのリスト   With Worksheets("Sheet1")     For rw = 1 To 10       myArray(rw - 1, 0) = Left(.Cells(rw, 1) & String(12, " "), 12) & .Cells(rw, 2)       myArray(rw - 1, 1) = .Cells(rw, 2)     Next   End With   ComboBox1.List = myArray End Sub

cat_tomato
質問者

お礼

回答ありがとうございます。 TextColumnの値で設定することがわかっただけでも質問してよかったです。 このごまかし技をちょっと変えてやってみます。 ありがとうございました。

その他の回答 (2)

  • p-21
  • ベストアンサー率20% (265/1269)
回答No.2

下記リンクが非常に役立ちます ワタシも度々VBAの相談をします

参考URL:
http://www.fuji.ne.jp/~excelyou/
cat_tomato
質問者

お礼

回答ありがとうございます。 ここのQ&A検索で探してみたいと思います。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

>VBAユーザフォーム まずエクセルVBAの話題ですね。 ユーザーフォームとは。 直接ワークシート上に貼りつけていないのですか。 ワークシート上にフォームを貼りつけるやり方を説明して 下さい。 >ソースから追加 エクセルのワークシートの範囲(Range)から表示 しているということですね。ListFillRangeをA1:B3 とかにしているって言うことではないのですか。 >ColumnCountを2に設定しているので、コンボボックスから選択するときにはちゃんと2列表示されるのですが プロパティのColumnCountを1から2に変えると、そして コンボボックスの巾を十分取ると、2列(ListFillRangeの例えばA列とB列)表示になりますね。 >選択したあとにコンボボックスの表示に残るのは1列目だけなのです。 TextColumnが通常は1になっているが、2にすると上の例 でいうと選択した行のB列が表示されるます。 両方残る(表示する)は、このコントロール作成者の念頭にないのでは。 変えるとプロパティのText行の値が変る。 >その他 BoundColumnも通常1になっているが2にすると2列目が LinkedCellで指定したセルにセットされる。 プロパティのValue行の値が変る。 当方Excell2000. 以上はエクセルの操作だけからやれることですが、VBA コードなら (A)Textに両方表示、 (B)セルも(通常隣接)2箇所表示をする(本件は    質問に入っていないが) 方法があるかもしれないので調べます。 (B)Column(x)とか指定して別の2ステップでセット出来るかも。 ●ふと思いついたが、2列(上例ではA列とB列)に分けている情報を1列(上の例ではA列)に文字列として、結合して持ってくれば済むことですね。セルにセットしたあと分離することを考えるとかでは、どうですか。

cat_tomato
質問者

お礼

お返事が遅くなり申し訳ありません。 回答、ありがとうございます。 ワークシートにフォームを貼り付けたりしていません。 ボタンクリックで画面表示されるようにしています。 エクセルのセル範囲からデータを拾っているわけではありません。 これはどうやら関係ないようですね。 おっしゃるようにTextColumnの値のようです。 確かにVBA開発者の念頭にないような気がします。 それがわかっただけでも助かりました。 ありがとうございました。

関連するQ&A

  • excelVBA コンボボックスに時刻で表示したい

    いつもお世話になります。お知恵を貸してください。 ユーザーフォームにコンボボックスがあります。 リストの中身はプロパティウィンドウのRowSourceでSheetにある時間表を指定しています。 そのリストは7:00,7:30,8:00…と時刻をh:mmで表示してあります。 コンボボックスには7:00と表示されているのですが、実際選ぶとシリアル値で表示されてしまいます。 [終了時間]-[開始時間]の計算もしたいので、シリアル値は必要だと思いますが、表示はh:mmで表示する方法を教えてください。 よろしくお願いします。

  • コンボボックスについて

    2007です。いつもお世話になります。 フォーム上にチェックボックスがあります。 チェックが入った時点で同じフォーム上のコンボボックスのリストから特定のものを選択したいです。 しかし、チェックか゛入っていなければそのコンボボックスのリストから特定のものを除いたものを選択するようにする・・出来るでしょうか? チェックありならばコンボボックスの値集合ソース1.2.3の内の2だけを チェックなしならばコンボボックスの値集合ソース1.2.3の内の1.3だけしか選択出来ない というイメージです。 分からないなりに =IIf([チェック1]="true","1,"2" Or "3") にしたら、リストから選択どころか、-1という数字が出てきてしまいました。

  • コンボボックスの値が消えてしまいます。

    コンボボックスの値が消えてしまいます。 フォーム(1)にコンボボックスA(値集合ソースはテーブル1)があります、この リスト外入力時で別フォーム(2)(レコード追加用)を開きテーブル1にレコードを追加、 フォーム(2)を閉じる時にコンボボックスAをリクエリかけてフォーム(1)に戻るとコンボボックスAが空になっているのでリストを開き選択し直さなければいけません! フォーム(1)に戻った時コンボボックスAに入力した値を選択させておくにはどの様にすれば良いか アドバイスよろしくお願いいたします。 WIN XP ACCESS 2003で作成しています。

  • ExcelVBA コンボボックスリストのリセット

    4月からマクロを勉強し始めて、壁にぶつかっています。 ユーザーフォームでオプションボタンの下にコンボボックス(1)を、そのさらに下にもうひとつコンボボックス(2)をレイアウトしました。 コンボボックス(1)は選ばれたオプションボタンによって、異なるリストを表示させるようにしてあります。 わからないのは、コンボボックス(2)のリストをコンボボックス(1)で選ばれた文字によって変えたいのです。 たとえば、コンボボックス(1)で"A"と選択されたら、コンボボックス(2)にはリストA'が、(1)で"B"と選択されたら、(2)にはりすとB'が…、というように、場合分けさせたいのです。 方法をご存知の方がいらっしゃいましたら、ご教示ください。よろしくお願いいたします。

  • コンボボックスのリスト表示について

    ユーザーフォーム上でコンボボックスを作成しました。 リストの元となるデータがあるセル範囲に名前を付け、 コンボボックスのRowSourceにその名前を入れてリストにしています。 リストを変更するときにはデータを作り変え、マクロでそのセル範囲に名前を付け替えるようにしています。 問題は前のリストの数が3つだったとし、次にリストの数を5つになるように作り変えた時にコンボボックスの表示が上3つまでしか表示されないのです。 リストのスクロールもできない状態です。 Visual Basicの画面でコンボボックスをいじったら直っています。 名前のセル範囲、データの変更はきちんと反映しています。 List Rows等のプロパティをいじってみても直りません。 どこを設定しなおせばいいのでしょうか。OSはMe、Excel2000です。

  • Excel VBA コンボボックスの使い方

     VBAでのコンボボックスの使い方をしらべているのですが、うまく見つかりません。コンボボックスのリストに登録するのはどうしたらよいのでしょうか?シート上のセル内のデータを使用しないとリストの登録は出来ないのでしょうか?VBA上で作成して、ユーザーフォームで選択できるようにしたいと思っています。VBAをはじめたばかりなので初歩的な質問で大変恐縮です。どなたかわかる方がいらっしゃったらお願い致します。

  • excelVBAのコンボボックスについて

    excelVBAのコンボボックスについて質問です。 ユーザーフォームに設置したコンボボックスに違うシートの特定範囲を設定するには どのようにプログラムすればよろしいでしょうか? 自分なりにいろいろ調べてみたのですが解決できませんでした。 要約すると ユーザーフォームはsheet1からボタンで起動させ(ここまでは苦もなくできました)、でてきたユーザーフォームにあるコンボボックスにsheet2にある特定範囲 また、この特定範囲をデータのある範囲だけ(データが追加されれば自動でそれを取得する)に設定することは可能ですか?

  • コンボボックスからテキストボックスに連続して値を出したい

    エクセルVBAのユーザーフォームで、コンボボックスで選択したものをコマンドボタンを押すことで、同じフォーム上のテキストボックスに表示するところまではできたのですが、同じテキストボックスに追記する形でコンボボックスで選択したものを表示したいのですが、可能でしょうか。テキストボックスは複数行表示できるようにプロパティのMultiLineはTlueに設定することはしたのですが、2回目以降コンボボックスで選択した後コマンドボタンを押してもそのまま上書きするようなコードしかわかりません。 テキストボックスに、20回目まで選択項目を追加表示し、最後にはエクセルのシートにそのデータをコピーしたいのです。果たして、そのようなことは可能でしょうか。可能であればどのように記述すればよいのでしょうか。ぜひ諸先輩方のお知恵をお貸しください。よろしくお願いします。

  • VBA コンボボックス リスト表示について

    初心者ですいません エクセル VBAのフォームでコンボボックス3つと、テキストボックス3つがあります シートのListにA~F列までのデータがあり、コンボボックス1にA列のリストを表示し コンボボックス2にA列で選んだリストを参照したB列のリストを表示し、コンボボックス3 にコンボボックス1,2で選んだリストを参照し、C列のリストを表示した後、 コンボボックス1,2,3で選ばれたもののD列、E列分をテキストボックス1,2に 反映しようと思っておりますがうまくいきません どのようにしたらよいか、おしえてください 宜しくお願いします ちなみに、リストの内容は A列   B列   C列     D列   E列 テレビ 42インチ  HDD内蔵  台    100,000 テレビ 32インチ  BD内蔵   台     80,000 テレビ 19インチ          台     50,000 ビデオ HDD   1TB     台    100,000   ビデオ HDD   500GB    台     80,000 ビデオ BD            台     70,000 が、入ってます 希望は、質問の際のカテゴリ選択のようになればよいのですが... さらに、希望を言えば、自動で、行ごとに1,2,3...と番号を振るようにしており スピンボタンで番号を選べば、登録された上記のデータをフォームに反映させるようにしております これもうまくいきません お願いばかりで申し訳ありませんが 宜しくお願いします

  • コンボボックスの貼りつけ excel

    vba初心者です。excel帳簿を作っております。 科目選択時にリストが28個あるプルダウンを使っておりましたが選択するのが大変だったのでコンボボックスにしたら28個全て表示されるようになり選択が楽になりました。 このコンボボックスのLinkedCellはD4です。 コンボボックスをD4の上に表示してD4セルにピッタリはめ込んでいる感じに見えます。 D4以下150個、D列にコンボボックスを貼りつけたいです。 コピーして貼り付けてもLinkedCellはD4のままですので、貼りつけたコンボボックスのプロパティを150回変えないといけないのかと思うと気が遠くなります。 このコンボボックスを何か登録して、「コードの表示」あたりで何かやれば何とかなるのではないかと思ったのですが、何か手立てがあれば教えてください。 このコンボボックスを同じブックの別のシートにも使いたいと思っております。