コンボボックスに値を読み込ませる方法ですが、基本はVBA講座2-10でご理解頂けたかと思います。

 

今回はより汎用性を高めるために、ちょっと書き方を変えて色々な場面で使いやすくします。

 

それでは早速いきましょう。

採用区分の値をワークシートから読み込ませてみよう

vba2-11-1まず上の画像を御覧ください。

 

コンボボックス単位と同じ方法で、コンボボックス採用区分のコードを続けて書いてみました(赤く囲った部分です)。

 

それでは順番に解説していきます。

 

1行目の変数の宣言

Dim i As Integer

は一緒ですね。

 

2行目

For i = 2 To 3

変えたのは17を3に。この意味はわかりますね?

 

vba2-11-2

上の画像を見て下さい。単位の方はB列2行目のTから17行目のUまでを追加しました。

 

今回はA列2行目の○と3行目の×を追加すればいいのでこうなります。

 

3行目

cboKubun.AddItem Worksheets(“基本マスタ”).Cells(i,1).Value

cboTaniをcboKubunに変えます。そしてCells(i,2)をCells(i,1)に変えます。

 

これも単位はB列(2列目)、採用区分はA列(1列目)だから変える必要があります。

 

4行目

Next

これは同じですね。

 

5行目

cboKubun.Value = cboKubun.List(0)

cboTaniをcboKubunに変えただけです。ではF5を押して実行して下さい。

 

vba2-11-3上の画像のようにエラーが発生するはずです。その理由を説明しますね。

変数宣言が重複するとエラーが出る

Private Sub UserForm_Initialize()

End Sub

の間では、変数宣言は1回でいいという事です。Dim i As Integerが重複していますね。

 

これは「さっき宣言したんだから2回言わなくていいよ」という意味です。

 

それではOKを押して、cboKubunの方の「Dim I As Integer」は削除しましょう。

 

そしてもう一度F5を押して実行すると…

 

vba2-11-4エラーが発生せず、しっかり採用区分のコンボボックスに○と×が追加されました。

データが入力された最終行を取得する方法~応用編

vba2-11-5それでは汎用性を高めたコードを解説します。上の画面を見て下さい。さっきとちょっと違いますね。

Dim LastRow As Integer
LastRow = Worksheets(“基本マスタ”).Range(“A65536”).End(xlUp).Row

この2行が追加になっています。

 

そして

For i = 2 To 3

For i = 2 To LastRow

に変わっています。「LastRow」これがメチャクチャ重要です。

 

それでは解説していきましょう。

超重要!Range(“A65536”).End(xlUp).Row

まず1行目はいいですね。

Dim LastRow As Integer

「変数LastRowを整数と宣言する」。今回は変数はわかりやすくするためにLastRowとしました。意味は文字通り最後の行です。

 

変数iと変数LastRowは別の数字を入れて同時に処理しますので、変数は2つ必要になります。

 

2行目がちょっとややこしいですね。

LastRow = Worksheets(“基本マスタ”).Range(“A65536”).End(xlUp).Row

=の左側は「変数LastRowは」これはいいですね。

 

=の右側ですが、ここは一つ一つ丁寧にいきましょう。

 

Worksheets(“基本マスタ”).

「ワークシート基本マスタの」

 

Range(“A65536”).

「A65536セルの」。セルの行は65536が最大となります。つまり「A列で一番下のセルの」という意味です。

 

End(xlUp).

「上に向かって」

 

Row

「行」

 

「.」を「の」と読むと今回は「上に向かっての行」となり意味不明です。今回は「上に向かってぶつかった行」と読み取って下さい。

 

つまりデータが入力された最終行に相当します。

 

まとめると「ワークシート基本マスタのA65536セルから上に向かってぶつかった行」という事になります。

 

ここではどれにあたりますか?そう、「3」になりますよね。一番下の行からずーっと上に向かっていきぶつかった行。

 

こちらの方が色々と応用が効きますのでぜひ覚えて下さいね。

 

例えば最初の方は単位に後からデータを1個追加した場合、17を18に修正しなければなりません。

 

データを追加する度にコードを書き直す必要があります。

 

しかしこちらの方法ではデータをいくら追加しようがこのままでOKです。どちらがいいかは一目瞭然ですよね。

 

それでは、同じようにコンボボックス単位の方も書き換えましょう。

 

vba2-11-6 まず

Dim LastRow As Integer

これは上にもっていきます。変数の宣言は最初に行うのが基本です。

 

そしてcboTaniの方はB列にデータがありますのでRange(“A65536)ではなく、

Range(“B65536”)

とします。あとは上の画像を参考にしてください。

 

では今回はこれで終了とします。お疲れ様でした。

 

次回はデータを登録する場所についてお話します。