繰り返し処理For~Nextで変数をセルの値から格納・取得する方法

Excel-VBA ユーザーフォーム

複数のセルの値を繰り返し取得させてラベルキャプションに使う時にi+1のように使う時に定数ではなく、変数i+セルB1みたいに変数と一緒に数値も変えたいと思ったことありませんか?

例えばFor i = 1 To 20としてセルB1の値が0だったら、ラベルiのキャプション(表示名)はセルA1~A20の値を順に表示するが、B1の値が20だったら、セルA21~A40にするなんて事。

IFステートメントでもできないことないのですが、VBAコードが大変なのでセルの値を変数に置き換えてあげればシンプルなVBAコードで出来るようになります。

スポンサーリンク

セルの値を変数として格納する

まずセルの値は数字を今回は使うので、整数型(Long)の変数(a)を宣言します。

そしてここでは、ユーザーフォームに配置したテキストボックスに入力した値をセルB1に記載することにより、このセルB1の値を変数として格納することにより変数はもちろん数値も変化できるようになります。

セルの値を変数にする

Private Sub CommandButton1_Click()
Range(“B1”).Value = TextBox1.Value
Dim a As Long
a = Cells(1, 2).Value
For i = 1 To 20
With UserForm1.Controls(“Label” & i)
.Caption = Cells(i + a, 1)
End With
Next i
End Sub

VBA解説
  1. コマンドボタン1がクリックされたら
  2. セルB1の値はテキストボックス1に入力された値とする
  3. 整数型の変数「a」を宣言する
  4. 変数「a」はセル1行目の2列目(セルB1)の値を格納する
  5. 変数「i」は1~20とする
  6. ユーザーフォーム1のラベル「i」(1~20)の
  7. キャプション名はセル「i」+「a」行目のの1列目から取得する
  8. Withステートメント終了
  9. 繰り返し処理をする
  10. マクロ記録終了

これで、テキストボックスに入力した数字(値)を変数iに加算することができるようになるので、同じような内容のコマンドボタンを複数作ることなく、シンプルにできるようになります。