Excel VBA質問箱 IV

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

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


552 / 13645 ツリー ←次へ | 前へ→

【79750】コンボボックスのリスト表示について VICH 18/3/30(金) 8:31 質問[未読]
【79754】Re:コンボボックスのリスト表示について りった 18/3/30(金) 14:12 回答[未読]
【79757】Re:コンボボックスのリスト表示について VICH 18/3/31(土) 18:04 質問[未読]
【79758】Re:コンボボックスのリスト表示について VICH 18/4/1(日) 22:27 お礼[未読]

【79750】コンボボックスのリスト表示について
質問  VICH  - 18/3/30(金) 8:31 -

引用なし
パスワード
   初めて投稿させていただきます。
vbaを始めたばかりで分からない箇所がありましたので質問させていただきます。

Sheet9のセルA2:A6に入力された内容をユーザーフォームに設置したコンボボックスに表示させたいと思っております。
また、今後のため、新たに追加されたデータにも対応できるようにしたいです。
そこで、以下のようなコードを記述しました。

Private Sub UserForm_Initialize()
  Dim i As Long
  Dim LastRow As Long
  LastRow = Sheet9.Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To LastRow
     ComboBox01.AddItem Sheet9.Cells(i, 0).Value
    Next i
End Sub

しかし、これを実行すると下記のエラーが発生しました。
「実行時エラー '1004':アプリケーション定期またはオブジェクトの定義エラーです」
また、一度間違えて上記コードの4行目(LastRow = Sheet9.Cells(Rows.Count, 1).End(xlUp).Row)を抜いて実行してしまった時があったのですが、なぜかうまくいきました。
さらに、この現象を検証するため、以下のようなコードを記述したのですが、結果としてうまく実行されました。

Private Sub UserForm_Initialize()
  Dim i As Long
    For i = 2 To 0
     ComboBox01.AddItem Sheet9.Cells(i, 1).Value
    Next i
End Sub

そこで、質問なのですが、一つ目のコードから4行目(LastRow = Sheet9.Cells(Rows.Count, 1).End(xlUp).Row)を抜いてしまうと、変数LastRowには何も値が格納されないはずだと思うのですが、なぜうまくいったのでしょうか。
また、二つ目のコードのFor Next文で初期値2で、1ずつカウントアップされて繰り返されるはずにもかかわらず、最終値が0でうまくいくのはなぜなのでしょうか。

よろしくお願いいたします。

【79754】Re:コンボボックスのリスト表示について
回答  りった  - 18/3/30(金) 14:12 -

引用なし
パスワード
   ▼VICH さん:
>初めて投稿させていただきます。
>vbaを始めたばかりで分からない箇所がありましたので質問させていただきます。
>
>Sheet9のセルA2:A6に入力された内容をユーザーフォームに設置したコンボボックスに表示させたいと思っております。
>また、今後のため、新たに追加されたデータにも対応できるようにしたいです。
>そこで、以下のようなコードを記述しました。
>
>Private Sub UserForm_Initialize()
>  Dim i As Long
>  Dim LastRow As Long
>  LastRow = Sheet9.Cells(Rows.Count, 1).End(xlUp).Row
>    For i = 2 To LastRow
>     ComboBox01.AddItem Sheet9.Cells(i, 0).Value
>    Next i
> End Sub
>
>しかし、これを実行すると下記のエラーが発生しました。
>「実行時エラー '1004':アプリケーション定期またはオブジェクトの定義エラーです」

⇒ 誤: Cells(i, 0) 正:Cells(i, 1)


>また、一度間違えて上記コードの4行目(LastRow = Sheet9.Cells(Rows.Count, 1).End(xlUp).Row)を抜いて実行してしまった時があったのですが、なぜかうまくいきました。
>さらに、この現象を検証するため、以下のようなコードを記述したのですが、結果としてうまく実行されました。

⇒ うまく実行されたというより、何もしなかっただけかと思われます。

>
>Private Sub UserForm_Initialize()
>  Dim i As Long
>    For i = 2 To 0
>     ComboBox01.AddItem Sheet9.Cells(i, 1).Value
>    Next i
> End Sub
>
>そこで、質問なのですが、一つ目のコードから4行目(LastRow = Sheet9.Cells(Rows.Count, 1).End(xlUp).Row)を抜いてしまうと、変数LastRowには何も値が格納されないはずだと思うのですが、なぜうまくいったのでしょうか。

⇒ 「For i = 2 To 0」の意味は、
  「最初iに2を入れなさい。iが0以下だったら下記の処理を繰り返しなさい。」
  だから、一回も処理しなかったものと思います。

>また、二つ目のコードのFor Next文で初期値2で、1ずつカウントアップされて繰り返されるはずにもかかわらず、最終値が0でうまくいくのはなぜなのでしょうか。
>
>よろしくお願いいたします。

尚、質問とは異なりますが、「Rows.Count」と書くのは事故の元なので、Sheet9.Rows.Count」等と、シート名を書いた方が良いかと思います。

【79757】Re:コンボボックスのリスト表示について
質問  VICH  - 18/3/31(土) 18:04 -

引用なし
パスワード
   りった さん

返事が遅くなり申し訳ありません。
回答していただきありがとうございます。また、間違いの修正とアドバイスもいただき、まことにありがとうございます。

For Nextがなにも処理しなかったとのことですが、Sheet9のセルA2:A6に入力された内容をユーザーフォームに設置したコンボボックスに表示させることができたのはなぜなのでしょうか。試しに以下のコードを記述し、実行してみたのですが、エラーとなりました。

Private Sub UserForm_Initialize()
 ComboBox01.AddItem Sheet9.Cells(2, 1).Value
End Sub

つまり、For Nextが何らかの処理を行ったことで、Sheet9のセルA2:A6に入力された内容をコンボボックスに表示させることができたのだと思うのですが、何か上記コードに不備があるということでしょうか。

よろしくお願いいたします。

【79758】Re:コンボボックスのリスト表示について
お礼  VICH  - 18/4/1(日) 22:27 -

引用なし
パスワード
   りったさん

自己解決しました。
コンボボックスのプロパティのRow sourceに
Sheet9!A2:A6と入力していたのですが、
これを削除したら問題なくマクロが作動しました。

回答ありがとうございました。

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