コンボボックスのインデックスが不正

このQ&Aのポイント
  • ExcelのVBAを使用して、コンボボックスを表示しています。指定した範囲内に多くのデータが保存されていれば問題ないのですが、最低限のデータしかなければ、LastRowが「2」となりエラーが表示されます。
  • 実行時エラー '381'が発生しており、Listプロパティを設定できません。プロパティの配列のインデックスが不正です。指定した範囲が「A2:A2」となるのが原因だと思われます。
  • 回避策としては、LastRow+1とすることができますが、コンボボックスの一番下に空白ができてしまうため、別の方法を検討しています。
回答を見る
  • ベストアンサー

コンボボックスのインデックスが不正

ExcelのVBAを使用して、コンボボックスを表示しています。 With Sheets("Sheet1").cb型式 .List = Sheets("マスタ").Range("A2:A" & LastRow).Value End With 指定した範囲内に多くののデータが保存されていれば問題ないのですが、 最低限のデータしかなければ、LastRowが「2」となり下記のようなエラー が表示されます。 実行時エラー '381': List プロパティを設定できません。プロパティの配列のインデックスが 不正です。 指定した範囲が、「A2:A2」となるのが原因だと思うのですが、回避する 方法はありませんでしょうか? (LastRow+1とする方法もありますが、コンボボックスの一番したに空白 ができてしまうため、これ以外の方法を検討しています。) よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

していることが多少分からない点があるのですが、たぶん、コントロールツールのコンボボックスだとして、List プロパティは配列を入れるためですから、 .List = 配列 で、代入式が配列になっていないからエラーになるのではありませんか? With Sheets("Sheet1").cb型式   .ListFillRange = Sheets("マスタ").Range("A2:A" & LastRow).Address End With のようにすればよいのではありませんか?

level30
質問者

お礼

ありがとうございます。 試してみましたが、「マスタ」シートの範囲ではなく、「Sheet1」シート の範囲が表示されてしまいます。 なぜでしょう?

level30
質問者

補足

下記のようにしたら、うまく動作しました。 .ListFillRange = "マスタ!A2:A" & LastRow

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

一応、もうこちらは読まないかもしれませんが、別の場所で、私の書き込みを読み落とされたようなので、念のために書いておきますが、 With Sheets("Sheet1").cb型式   .ListFillRange = Sheets("マスタ").Range("A2:A" & LastRow).Address End With 「cb型式」の部分を、サブルーチンで、引数に取りたい時は、 With Sheets("Sheet1").Shapes.("cb型式").DrawingObject とします。このような方法を使うか使わないかは、ご自由です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

level30さん、Wendy02 です。 With Sheets("Sheet1").cb型式   .ListFillRange = Sheets("マスタ").Range("A2:A" & LastRow).Address End With >試してみましたが、「マスタ」シートの範囲ではなく、「Sheet1」シート >の範囲が表示されてしまいます。 そのとおりですね。 Sheets("マスタ").Range("A2:A" & LastRow).Address これでは、単に、Range("A2:A" & LastRow).Address のアドレスと同じことでした。 シート名が入っていませんね。 .ListFillRange  = "マスタ!" & Range("A2:A" & LastRow).Address か、 .ListFillRange = "マスタ!A2:A" & LastRow ですね。 失礼しました。

関連するQ&A

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

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

  • ExcelVBAコンボボックスの値の入力

    ExcelVBAでマルチページでユーザーフォームを作っています。 マルチページを作製しているシートのシート2とシート3にそれぞれコンボボックスに当てはめる値を入れてあります。 コンボボックス1には「シート2のA2から最後」まで。 コンボボックス2には「シート3のA1から最後」まで。 というように設定してあります。 コードの記述としてはこんな感じでしました。 Private Sub ComboBox1_DropButtonClick() Dim i As Integer Dim lastRow As Integer lastRow = Cells(Row.Count, 1).End(xlUp).Row With ComboBox1 For i = 2 To lastRow If ComboBox1 = "" Then .AddItem Worksheets("Sheet2").Cells(i, 1).Value End If Next i End With End Sub これはコンボボックス1の場合なのですが、2は一部を変えています。 コンボボックスを選択時にシートに記載してある内容は表示されるのですが、行が多い方に引っ張られる感じになっています。 コンボボックス1の方は今のところ30行ちょっとなので、その分のデータが表示されます。コンボボックス2の方は今のところ10行程度なので、全てを表示した後に空白が表示されています。見た感じで、シート3のデータと空白分を合わせて、シート2つまりは、コンボボックス1と同じ分だけ表示しようとしているみたいなのです。 よく分からないエラーなのですが、これを回避する方法はありますでしょうか?

  • エクセルVBAコンボボックスについて

    図の左のように、商品リスト欄のセルA3から下方向に大分類(A16まで14種類) セルB3~O3(Bから数えて14個目のO)列から下方向に小分類があります。 P2~P11には1から10までの数字が入っています。 図の右側がユーザフォームで、コンボボックスの番号を入れています。 コンボボックス「1.4.・・・28.」までは大分類を選べるようにして、 コンボボックス「2.5.・・・29.」までは左の大分類に応じた小分類の値を表示させたいと思っています。 大分類「111」→小分類「あ~そ」 大分類「222」→小分類「た~と」といった具合です。 そのコンボボックスの値を指定したセルに入力しようと思っています。 下のように記述した結果、問題が発生しました。 (1)大分類で14個ほどあるリストの3つほどしかでてこない。 (2)Select Caseの構文を使用していて、大分類が14個だから「Case 13」までと しているが、「大分類の数-1」までの変えられる数までにしたい。 アドバイスをいただけると助かります。 ------------------------------------------------------------------ Private Sub UserForm_Initialize() Dim MyVar1 As Variant MyVar1 = Sheets("商品リスト").Range("A3:A" & Range("A3").End(xlDown).Row) Dim MyVar20 As Variant MyVar20 = Sheets("商品リスト").Range("P2:P" & Range("P2").End(xlDown).Row) '種類欄を指定 With ComboBox1 .List() = MyVar1 End With ※・・・(省略)・・・ コンボボックス4から25まで※ With ComboBox28 .List() = MyVar1 End With '数量欄を指定 With ComboBox3 .List() = MyVar20 End With ※・・・(省略)・・・ コンボボックス6から27まで※ With ComboBox30 .List() = MyVar20 End With End Sub '1番目 Private Sub ComboBox1_Change() Dim MyVar1 As Variant ※・・・(省略)・・・ MyVar2~13 As Variant※ Dim MyVar14 As Variant Dim MyVar20 As Variant MyVar1 = Sheets("商品リスト").Range("A3:A" & Range("A3").End(xlDown).Row) ※・・・(省略)・・・ B列からN列まで※ MyVar15 = Sheets("商品リスト").Range("O3:O" & Range("O3").End(xlDown).Row) MyVar20 = Sheets("商品リスト").Range("P2:P11") Select Case ComboBox1.ListIndex Case 0 With ComboBox2 .List() = MyVar2 End With ※・・・(省略)・・・ Case1~ Case12 ※ Case 13 With ComboBox2 .List() = MyVar15 End With End Select End Sub

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

    はじめまして、コンボボックスで選択したデータをセルに書き出すプログラムを作成しております。 コンボボックスプロパティのListFillRangeで範囲を指定していますが、途中空白のセルがあるため、空白セルまでコンボボックスに取り込まれてしまいます。 このListFillRangeの範囲を設定したまま、空白はコンボボックスに取り込まないようにする方法ってあるんでしょうか??お分かりになる方いらっしゃいましたら、お願い致します。

  • エクセル、コンボボックス/フォームのとコントロールツールボックスの

    エクセル2000です。 今まではワークシートにフォームのコンボボックスを貼って使ってきました。 でも色を変えたり出来ないので、今度はコントロールツールボックスからコンボボックスを貼ってみました。 質問ですが、コンボボックスに表示させるリストを設定するのに、これまでのフォームのコンボボックスだと書式設定で入力範囲をカーソルをあてて一度に簡単に指定できたのですが、コントロールツールボックスのコンボボックスだとそれが出来ません。VBEditorのプロパティのところのListFillRangeの右側にいちいち手でSheet1!A1:A5のように打ち込まなければならないようです。これではけっこう手間がかかってしまいます。 わたしのやりかたが間違っているのでしょうか?

  • エクセルVBAコンボボックスについて

    リスト欄のセルA3から下方向に大分類(A16まで14種類)があります。 コンボボックス1に大分類をリスト化して選べるようにしたいと思っています。 しかし、(1)のようにVBAを記入して、マクロを実行すると、コンボボックス1には、 大分類で14個あるリストの4つしか出てきません。 -(1)(抜粋)--------------------------------------------------------- Private Sub UserForm_Initialize() Dim MyVar1 As Variant MyVar1 = Sheets("リスト").Range("A3:A" & Range("A3").End(xlDown).Row) ------------------------------------------------------------------ (2)のように記述してマクロを実行すると、コンボボックス1には、14個全てが表示されます。 -(2)(抜粋)--------------------------------------------------------- Private Sub UserForm_Initialize() Dim MyVar1 As Variant MyVar1 = Sheets("リスト").Range("A3:A16") ------------------------------------------------------------------ 原因がわかる方、いらっしゃいませんか? 出来れば、リスト欄のA列は14個よりも増える可能性があるので、Range("A3:A" & Range("A3") .End(xlDown).Row)のような範囲の指定がしたいです。 なお、リストシートのA3を選択して、「Ctrl+↓」でA16が選択されました。

  • コンボボックスの設定  【エクセル】

    エクセルのコンボボックスについてです。 コンボボックスのリストとして 赤 青 黄色 というリストをコンボボックスの‘入力範囲’に指定します。 コンボボックスの ‘コントロールの書式設定’→‘リンクするセル’ でセルを指定すると、赤を選んだとき リンクさせたセルには 「1」とでますが、なぜ1と出るのか、というのと 私は「赤」と表示させたいのですが、そのやり方を教えて頂きたいです。 コンボボックスを初めて使うので初心者的な質問だと思いますが宜しくお願いします。

  • VBAを使用しコンボボックスにリストを設定する方法

    いつもお世話になっております。 現在コンボボックスにリストを設定する方法について悩んでいます。 バージョンはExcel2003です。 コンボボックスに指定したい列がA列とB列なら通常下記のようにすると思います。     With ComboBox1       .ColumnCount = 2       .ColumnWidths = "50;50"       .RowSource = "Sheet1!A2:B5"     End With ただ今回はA列とC列をリストに設定したいと思い、下記のような設定にしたのですがうまく設定できません。     With ComboBox1       .ColumnCount = 2       .ColumnWidths = "50;50"       .RowSource = "Sheet1!A2:A5;C2:C5"     End With そもそもRowSource は連続的なデータを設定する場合のプロパティだと思うのですが、このように飛んだ列のデータを効率的に指定するにはどのようにするのが一番いいのでしょうか? 分かる方がいっらしゃいましたらご教授願います。

  • コンボボックスの参照先(ListFillRange)が反映されない

     「Excelで使うMySQL活用ガイド」という本のサンプルプログラム(付属CD-ROMより)で、顧客と商品を追加した直後に、そのデータ(それぞれ別ワークシートにある)を用いて売上を追加あるいは修正しようとするとコンボボックスにそのデータがリストされません。  コンボボックスの参照先(商品一覧、顧客一覧)を確認すると、ちゃんと新しいデータを含む範囲が含まれて指定されています。  つまり、別ワークシートにあるデータの2列をコンボボックスにリストさせて、選択したものをセルに入れようとしているときに、範囲指定が正しいにもかかわらず、すべての範囲がコンボボックスにリストされない、という問題です。  一度、ブックを閉じて再び開くとコンボボックスにすべてのデータがリストされます。  原因をご存知の方は教えていただければ助かります。なお、Excelのバージョンは2000です。

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

    ACCESSのコンボボックスに「012/015/028/125」等が設定されているて、 コンボボックスのプロパティの「入力チェック」は「はい」の設定になっております。 そういった場合、「12」と入力した場合、「012」とすることは可能でしょうか? テキストボックスの場合には、そのテキストボックスの更新後処理で Me.コード = Format(Me.コード, "000") のように記述し変更していたのですが・・・。 コンボボックスでは、「指定した値はリストにありません」と表示され、更新後処理がが実行されません。

専門家に質問してみよう