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

ユーザーフォームのコンボボックスの実行エラー381の解決方法について

投稿者 : お願いします(o*。_。)o     投稿日時 : 2025/03/04(Tue) 14:55:48     OS : Windows 10     EXCEL : Excel 2016
以下の内容で実行エラー381 「listプロパティを設定できません プロパティの配列のインデックスが無効です 」が起こります。


▪機能/デザイン
ユーザーフォーム上にはコンボボックスとコマンドボタンだけが配置してあります。
コンボボックスのリストには顧客名が入力されているセル範囲(表の1列分)を反映させています。
コンボボックスはリストと手動の両方から入力可能です。
コマンドボタンを押下したら、特定のセルにコンボボックスの値が転記される仕組みになっています。


▪ユーザーフォーム起動時のコード抜粋(エラー箇所)
Dim ws As Worksheet
Dim tbl As Range, tblBody As Range

'初期値
Private Sub UserForm_Initialize()
    Set ws = ThisWorkbook.Worksheets("顧客")
    Set tbl = ws.Range("A1").CurrentRegion

    If tbl.Rows.Count > 1 Then
        Set tblBody = tbl.Resize(tbl.Rows.Count - 1).Offset(1)
        Me.ComboBox1.List = tblBody.Columns(3).Value '顧客名の列(3列名)をリストに反映  ←ここでエラーが起こっているようです
    End If


'以下、省略
End Sub


▪エラーが起こるタイミング
上記でもリスト化でき、上手く動作はします。
ところが、リスト化した列のセル数(表の行数)を減らす(削除する)と冒頭のエラーが起こります。
解決法・原因をご教授頂ければと存じます。
宜しくお願い致します。

スポンサーリンク
[返信 1] Re : ユーザーフォームのコンボボックスの実行エラー381の解決方法について
投稿者 : ごんぼほり     投稿日時 : 2025/03/04(Tue) 15:46:45
tblBody が一行しかない場合、tblBody.Columns(3).Value が配列になりません

Private Sub UserForm_Initialize()
    Set ws = ThisWorkbook.Worksheets("顧客")
    Set tbl = ws.Range("A1").CurrentRegion

    If tbl.Rows.Count > 1 Then
        Set tblBody = tbl.Resize(tbl.Rows.Count - 1).Offset(1)
        CustomerNames = tblBody.Columns(3).Value
        If IsArray(CustomerList) Then
           Me.ComboBox1.List = CustomerNames          '顧客名の列(3列名)をリストに反映  ←ここでエラーが起こっているようです
        Else
           Me.ComboBox1.List = Array(CustomerNames)
        End If
    End If
End Sub

[返信 2] Re : ユーザーフォームのコンボボックスの実行エラー381の解決方法について
投稿者 : お願いします(o*。_。)o     投稿日時 : 2025/03/04(Tue) 15:58:35
■[返信 1] ごんぼほりさん(2025-03-04 15:46:45)の記事
> tblBody が一行しかない場合、tblBody.Columns(3).Value が配列になりません

> Private Sub UserForm_Initialize()
> Set ws = ThisWorkbook.Worksheets("顧客")
> Set tbl = ws.Range("A1").CurrentRegion

> If tbl.Rows.Count > 1 Then
> Set tblBody = tbl.Resize(tbl.Rows.Count - 1).Offset(1)
> CustomerNames = tblBody.Columns(3).Value
> If IsArray(CustomerList) Then
> Me.ComboBox1.List = CustomerNames '顧客名の列(3列名)をリストに反映  ←ここでエラーが起こっているようです
> Else
> Me.ComboBox1.List = Array(CustomerNames)
> End If
> End If
> End Sub


ご回答ありがとうございます。
CustomerListは変数でしょうか、CustomerNamesのことでしょうか。
一行しかないとListプロパティに反映できない、ということでしょうか。
宜しくお願い致します。

[返信 3] Re : ユーザーフォームのコンボボックスの実行エラー381の解決方法について
投稿者 : ごんぼほり     投稿日時 : 2025/03/04(Tue) 16:33:09
ごめんなさい

CustomerNames = tblBody.Columns(3).Value
If IsArray(CustomerNames ) Then
Me.ComboBox1.List = CustomerNames
Else
Me.ComboBox1.List = Array(CustomerNames)
End If

>一行しかないとListプロパティに反映できない、ということでしょうか。
配列じゃないとListプロパティに設定できないということです

[返信 4] Re : ユーザーフォームのコンボボックスの実行エラー381の解決方法について
投稿者 : お願いします(o*。_。)o     投稿日時 : 2025/03/04(Tue) 16:52:49
■[返信 3] ごんぼほりさん(2025-03-04 16:33:09)の記事
> ごめんなさい

> CustomerNames = tblBody.Columns(3).Value
> If IsArray(CustomerNames ) Then
> Me.ComboBox1.List = CustomerNames
> Else
> Me.ComboBox1.List = Array(CustomerNames)
> End If

> >一行しかないとListプロパティに反映できない、ということでしょうか。
> 配列じゃないとListプロパティに設定できないということです


ありがとうございます。
セルは一つでも(1,0)のように勝手に配列になるものと思っておりました。
ちなみにですが、リスト化の際にセル番地(Address)を参照する場合では上記のコードがどのような記述になるのか気になりました。
この場合、一つのセルでも参照可能になりますでしょうか。
度々で恐縮ですが宜しくお願い致します。
また他の方もご回答頂けますと幸いです。

[返信 5] Re : ユーザーフォームのコンボボックスの実行エラー381の解決方法について
投稿者 : お願いします(o*。_。)o     投稿日時 : 2025/03/04(Tue) 17:16:25
■[返信 4] お願いします(o*。_。)oさん(2025-03-04 16:52:49)の記事
> ■[返信 3] ごんぼほりさん(2025-03-04 16:33:09)の記事
> > ごめんなさい
> >
> > CustomerNames = tblBody.Columns(3).Value
> > If IsArray(CustomerNames ) Then
> > Me.ComboBox1.List = CustomerNames
> > Else
> > Me.ComboBox1.List = Array(CustomerNames)
> > End If
> >
> > >一行しかないとListプロパティに反映できない、ということでしょうか。
> > 配列じゃないとListプロパティに設定できないということです


> ありがとうございます。
> セルは一つでも(1,0)のように勝手に配列になるものと思っておりました。
> ちなみにですが、リスト化の際にセル番地(Address)を参照する場合では上記のコードがどのような記述になるのか気になりました。
> この場合、一つのセルでも参照可能になりますでしょうか。
> 度々で恐縮ですが宜しくお願い致します。
> また他の方もご回答頂けますと幸いです。


すみません、Valueは値の配列化のことを指していたのでしょうか。

[返信 6] Re : ユーザーフォームのコンボボックスの実行エラー381の解決方法について
投稿者 : お願いします(o*。_。)o     投稿日時 : 2025/03/05(Wed) 06:28:08
解決しました
ありがとうございました。

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

ステータス  :

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




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