病院で処方された薬や病気についてわかりやすく解説します

VBA講座2-11 コンボボックスの値をワークシートから取得(改)

ノートパソコンとハーブ

コンボボックスに値を読み込ませる方法ですが、基本は前回の講座でご理解頂けたかと思います。今回はより汎用性を高めるために、ちょっと書き方を変えて色々な場面で使いやすくします。それでは早速いきましょう。

スポンサーリンク

変数宣言の重複

 

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

 

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

 

1行目の変数の宣言

Dim i As Integer

は一緒ですね。

 

vba2-11-22行目

For i = 2 To 3

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

 

上の画像を見て下さい。単位の方は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エラーが発生せず、しっかり採用区分のコンボボックスに○と×が追加されました。

データが入力された最終行を取得する Range(“A65536”).End(xlUp).Row

 

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

に変わっています。それでは解説していきましょう。

 

まず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列にデータがありますのでA65536ではなく、

Range(“B65536”)

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

 

では今回はこれで終了とします。お疲れ様でした。次回はデータを登録する場所についてお話します。
次の講座

スポンサーリンク

こちらの記事もおすすめです

関連記事

サイト内検索