Excel VBAでセルに値を入れたいときはないでしょうか。
けど、そんな中で悩むことは、
・Excel VBAでセルに形式を指定して値を入れるやり方がわからない。
・Excel VBAで複数のセルに一括で値を入れがやり方がわからない。
ですよね。
今回はそんなお悩みを解決する
Excel VBAでセルに値を入れる方法について
まとめます!
もくじ
Excel VBAでセルに値を入れるパターン
本ページで取り上げているVBAでセルに値を入れるパターンは以下の通りです。詳細は各章をご参照ください。
①セルへ値を入力するオブジェクト
単体セルへの代入方法について説明します。
②選択シートのセルへ値を入力する
デフォルトのシートはどこを選択しているか、シートを選択するにはどうしたらよいか説明します。
③形式を指定した上セルへ値を入力する
Valueプロパティ以外に数式入力などどのような形式の指定方法があるか説明します。
④別シートのセルへ値を入力する
別シートのセルへ値を入力する方法について説明します。
⑤別ブックのセルへ値を入力する
別ブックのセルへ値を入力する方法について説明します。
⑥複数のセルへ値を入力する
複数のセルへ値を入力する方法について説明します。
それではさっそくやってみましょう。
①セルへ値を入力するオブジェクト
セルへ値を入力する際に使用するオブジェクトはRangeオブジェクトです。
取得方法はRangeオブジェクトのRangeプロパティとCellsプロパティの2種類があります。
Rangeプロパティ
Rangeプロパティはセル、セル範囲を扱うことができます。
A1形式でセルの位置を記述します。
Valueプロパティでセルの値を入出力していきます。
Sub セルへ入力する1_1()
Dim objRrange As Range
Set objRrange = Range("A1")
objRrange.Value = "テスト入力"
End Sub
実行結果です。
Cellsプロパティ
Cellsプロパティは単体のセルを扱うことができます。列、行番号でセルの位置を指定します。
Valueプロパティでセルの値を入出力していきます。
Sub セルへ入力する1_2()
Dim objCells As Range
Set objCells = Cells(1, 1)
objCells.Value = "テスト入力"
End Sub
②選択シートのセルへ値を入力する
選択シートのセルへ値を入力する方法について説明します。
現在選択されているシートを扱うActiveSheetオブジェクトを使用して、RangeやCellsプロパティでセルを指定しValueプロパティで値を指定していきます。
Rangeプロパティ
Sub セルへ入力する2_1()
Dim objRrange As Range
Set objRrange = ActiveSheet.Range("A1")
objRrange.Value = "テスト入力"
End Sub
Cellsプロパティ
Sub セルへ入力する2_2()
Dim objCells As Range
Set objCells = ActiveSheet.Cells(1, 1)
objCells.Value = "テスト入力"
End Sub
なお、ActiveSheetオブジェクトは省略可能です。
Sub セルへ入力する2_1()
Dim objRrange As Range
Set objRrange = Range("A1")
objRrange.Value = "テスト入力"
End Sub
③形式を指定した上セルへ値を入力する
セルに値を入れるときに、書式などの形式を指定したい場合があります。
例えば数式/関数として入力したい場合はFormulaプロパティを使います。
Formulaプロパティ
使い方はRangeオブジェクトにFormulaプロパティを指定します。
Range(“<挿入先セルA1値>”).Formula = “<数式>”
Cells(“<挿入先セル番号>”).Formula = “<数式>”
Sub セルへ入力する3_1()
ActiveSheet.Cells(1, 3).Formula = "=SUM(A1:B1)"
End Sub
④別シートのセルへ値を入力する
これまで選択されたシートを対象にオブジェクトを取得してきましたが、別シートのオブジェクトも取得し、別シートのセルへ入力することが可能です。
Sub セルへ入力する4()
Worksheets("Sheet2").Range("A1").Value = "テスト入力2"
End Sub
⑤別ブックのセルへ値を入力する
これまで選択されたシートを対象にオブジェクトを取得してきましたが、別ブックのオブジェクトも取得し、別ブックのセルへ入力することが可能です。
Sub セルへ入力する5()
Workbooks.Open "F:\test\Book1.xlsx"
Workbooks.Open "F:\test\Book2.xlsx"
Workbooks("Book2.xlsx").Worksheets("Sheet1").Range("A1").Value = _
Workbooks("Book1.xlsx").Worksheets("Sheet1").Range("A1").Value
End Sub
⑥複数のセルへ値を入力する
これまで1つのセルに対しての入力処理でしたが、行(右)方向、列(下)方向、行列双方向の指定範囲に対して値を入力することが可能です。
Rangeプロパティでと配列で一括代入
Rangeプロパティで範囲指定し、配列で一括代入します。
列(下)方向
(1, 2, 3, 4)を代入した配列で、列(下)方向”A1:A4″へ一括代入していきます。
Sub セルへ入力する6_1()
Dim arrTmp(3, 0) As Integer
arrTmp(0, 0) = 1
arrTmp(1, 0) = 2
arrTmp(2, 0) = 3
arrTmp(3, 0) = 4
Worksheets("Sheet1").Range("A1:A4") = arrTmp
End Sub
行(右)方向
(1, 2, 3, 4)を代入した配列で、”A1:D1″へ一括代入していきます。
Sub セルへ入力する6_2()
Worksheets("Sheet1").Range("A1:D1").Value = Array(1, 2, 3, 4)
End Sub
行列双方向
行列双方向の範囲に対して指定するには、二次元配列を使います。
二次元配列へ値を代入し、配列のままRangeプロパティへ代入すると配列のインデックス番号に応じてRangeの範囲で配列の値が一括代入されます。
サンプルでは二次元配列の値を”A1:B2″へ一括代入をしています。
Sub セルへ入力する61()
Dim arrTmp(1, 1) As String
arrTmp(0, 0) = "A1"
arrTmp(1, 0) = "A2"
arrTmp(0, 1) = "B1"
arrTmp(1, 1) = "B2"
Worksheets("Sheet1").Range("A1:B2").Value = arrTmp
End Sub
また、応用技で、Rangeプロパティから配列へ一括取得をし、別の指定範囲に同じくRangeプロパティをつかえば、
2行で一括代入することができてしまいます。
Sub セルへ入力する6_5()
Dim arrTmp As Variant
arrTmp = Worksheets("Sheet1").Range("A1:B2").Value
Worksheets("Sheet1").Range("D1:E2").Value = arrTmp
End Sub
ForNextステートメントと配列で順次処理
ForNextステートメントと配列で順次処理をしていく方式となります。
Rangeプロパティの一括代入方式と比べ、件数に応じて処理は重くなりますが、条件追加などによる小回りの利いた処理をすることができます。
列(下)方向
(1, 2, 3, 4)を代入した配列で、”A1:A4″へ一括代入していきます。
Sub セルへ入力する6_2()
Dim arrTmp As Variant
arrTmp = Array(1, 2, 3, 4)
For n = LBound(arrTmp) To UBound(arrTmp)
Worksheets("Sheet1").Cells(1, n + 1) = arrTmp(n)
Next n
End Sub
行(右)方向
(1, 2, 3, 4)を代入した配列で、”A1:D1″へ一括代入していきます。
Sub セルへ入力する6_3()
Dim arrTmp As Variant
arrTmp = Array(1, 2, 3, 4)
For n = LBound(arrTmp) To UBound(arrTmp)
Worksheets("Sheet1").Cells(n + 1, 1) = arrTmp(n)
Next n
End Sub
行列双方向
サンプルでは二次元配列の値を”A1:B2″へ一括代入をしています。
Sub セルへ入力する6_4()
Dim arrTmp(1, 1) As String
arrTmp(0, 0) = "A1"
arrTmp(1, 0) = "A2"
arrTmp(0, 1) = "B1"
arrTmp(1, 1) = "B2"
For n = LBound(arrTmp, 1) To UBound(arrTmp, 1)
For o = LBound(arrTmp, 2) To UBound(arrTmp, 2)
Worksheets("Sheet1").Cells(n + 1, o + 1) = arrTmp(n, o)
Next o
Next n
End Sub
オートフィルで連続コピー
オートフィルで連続コピーする方法となります。
コピー元から指定範囲まで連続コピーをしていきます。
連続する数値を指定した場合は加算された形で値がコピーされていきます。
データを以下のように準備します。
列(下)方向
“A1:A2″を参照し、”A1:A4″まで連続コピーしていきます。
Sub セルへ入力する6_7()
Worksheets("Sheet1").Range("A1:A2").AutoFill Destination:=Worksheets("Sheet1").Range("A1:A4"), Type:=xlFillDefault
End Sub
行(右)方向
“A1:B1″を参照し、”A1:D1″まで連続コピーしていきます。
Sub セルへ入力する6_6()
Worksheets("Sheet1").Range("A1:B1").AutoFill Destination:=Worksheets("Sheet1").Range("A1:D1"), Type:=xlFillDefault
End Sub
⑦行列すべてのセルへ値を入力する
行列すべてのセルへ値を入力する方式となります。
行、列の最終セルまで処理されますので、最終セルまで代入させたいときに便利です。
列(下)方向
列の選択はRowsプロパティを使います。
サンプルはC列選択を意味する3を指定しています。
Sub セルへ入力する7_1()
Worksheets("Sheet1").Rows(3) = Array(1, 2, 3, 4)
End Sub
行(右)方向
行の選択はColumnsプロパティを使います。
サンプルは3行目選択を意味する3を指定しています。
Sub セルへ入力する7_2()
Dim arrTmp(3, 0) As Integer
arrTmp(0, 0) = 1
arrTmp(1, 0) = 2
arrTmp(2, 0) = 3
arrTmp(3, 0) = 4
Worksheets("Sheet1").Columns(3) = arrTmp
End Sub
VBAの実装手順
実装手順は以下の通りです。
今回はExcel側にこのVBAを実装します。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。
②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。
③右ペインのウインドウに上記のVBAを入力します。
こちらで完了です。
VBAを実行する
では早速VBAの実行をしてみましょう。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。
②処理がされたことが確認できれば完了です。
※完了メッセージやステータス管理など必要に応じて実装してもらえばと思います。
さいごに
いかがでしょうか。
今回は、
Excel VBAでセルに値を入れる方法について
まとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す