Excel VBA 質問スレッド №2030 (解決済)

コマンドボタンの値とテーブル

投稿者 : VBA初心者     投稿日時 : 2024/10/20(Sun) 22:40:52     OS : Windows 10     EXCEL : Excel 2019
Excelでユーザーフォーム1にコンボボックス1を作成しました。
このコンボボックス1にworksheet1にあるテーブル1(1列の表)の値を入れて、テーブルの値を選べるようにしたいです。

テーブルの値なのは、後々worksheet1に行列の削除挿入が行われ、反映する行列数が変わる(A列だったのがC列に変わる、最終行の位置が変わる等の) 可能性があるため、もしテーブル1から反映することができれば、行列数が変わっても自動的にコンボボックスの値をテーブル1から取れるのではないか…?と思ったからです。

VBA初心者のため、説明をうまく伝えられずすみません。
思った方法ができるのかもわかりませんが、他に何か良い方法等もあれば教えていただけると幸いです。

スポンサーリンク
[返信 1] Re : コマンドボタンの値とテーブル
投稿者 : らたたた     投稿日時 : 2024/10/21(Mon) 00:57:28
MsgBox ActiveSheet.ListObjects("テーブル1").Range.Address
??

[返信 2] Re : コマンドボタンの値とテーブル
投稿者 : tek     投稿日時 : 2024/10/21(Mon) 13:28:44
>もしテーブル1から反映することができれば、行列数が変わっても自動的にコンボボックスの値をテーブル1から取れるのではないか
なんらかの方法でRowSourceを設定し直さなければ行列数の変化は連動しないようです。

Sub Macro1()
    Const テーブル = "テーブル"
    Dim obj As Object
    With Range("A1:B5")
        Set obj = .ListObject
        If Not obj Is Nothing Then obj.Delete
        .Value = [address(row(1:5),column(1:2),4)]
        .Worksheet.ListObjects.Add(xlSrcRange, .Cells, , xlNo).Name = テーブル
        Set obj = .ListObject
    End With
    With UserForm1
        .Show vbModeless
        .ComboBox1.ColumnCount = 2
        .ComboBox1.RowSource = テーブル & "[#All]"
        .ComboBox1.DropDown
        MsgBox "見出し含む"
        .ComboBox1.ColumnCount = 1
        .ComboBox1.RowSource = テーブル & "[列2]"
        .ComboBox1.DropDown
        MsgBox "列2データのみ"
        obj.ListRows.Add(4).Range(2).Value = "BBB"
        .ComboBox1.DropDown
        MsgBox "行を増やしてもitem数は変わらない"
        .ComboBox1.RowSource = テーブル & "[列2]"   '再度RowSourceを設定しなければならない
        .ComboBox1.DropDown
    End With
End Sub

[返信 3] Re : コマンドボタンの値とテーブル
投稿者 : らたたた     投稿日時 : 2024/10/21(Mon) 16:03:33
ComboBox1.List = Range("D4:D9").Value

[返信 4] Re : コマンドボタンの値とテーブル
投稿者 : VBA初心者     投稿日時 : 2024/10/21(Mon) 21:41:09
ありがとうございます。
テーブルを反映させるのはそんなに簡単ではないのですね…。
教えていただいたのを参考にやってみます。

[返信 5] Re : コマンドボタンの値とテーブル
投稿者 : tek     投稿日時 : 2024/10/23(Wed) 08:17:43
■[返信 4] VBA初心者さん(2024-10-21 21:41:09)の記事

> テーブルを反映させるのはそんなに簡単ではないのですね…。

この問題はテーブルの問題では無く、コンボボックスのListCountが名前の定義に連動しないという仕様(バグ?)のようですね。
https://yone.synapse-site.jp/excel2010/excel2010_nyukisoku4.html
にあるような数式を使った名前の定義を設定したり、テーブルを参照させたりした場合、入力規則のリスト数は即連動するが、
コンボボックスのListCountは再定義しないと連動しませんでした。

[返信 6] Re : コマンドボタンの値とテーブル
投稿者 : らたたた     投稿日時 : 2024/10/28(Mon) 05:58:40
RowSourceを使っているのなら
RowSource = nullstring
とかで1度消してから

ComboBox1.List = Range("D4:D9").Value
の場合はいらなかったような

[返信 7] Re : コマンドボタンの値とテーブル
投稿者 : tek     投稿日時 : 2024/10/28(Mon) 09:30:54
■[質問] VBA初心者さん(2024-10-20 22:40:52)の記事
> もしテーブル1から反映することができれば、行列数が変わっても自動的にコンボボックスの値をテーブル1から取れるのではないか…?と思ったからです。
これが、入力規則の自動拡張のように、リストに関すプロパティを都度変更しなくても実施させたいという意味なら、
RowSourceプロパティを名前定義で使用しなければ不可能と捉え、しかしそれは仕様で無理でしょうと言う意味で書きました。

■[返信 6] らたたたさん(2024-10-28 05:58:40)の記事
>ComboBox1.List = Range("D4:D9").Value
>の場合はいらなかったような
この方法では、行列数もデータも一切連動はしません。

ListプロパティでもRowSouceプロパティでも一度消さなくとも都度再設定するのならデータとリストは一致します。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-05 18:09:15 )
タイトルとURLをコピーしました