|
▼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」等と、シート名を書いた方が良いかと思います。
|
|