VBAを使ったセルの値への入力をしていきます。
まずは先ほどのExcelブックに新規にシートを追加します。
追加したシートに次の画像のようにセルに値を入力していきます。実際に入力する値は基本的にどんなものでも構いません。
次に「開発」タブのマクロボタンを押し「Macro1」というものが選択されているので「編集」ボタン押します。
すでにマクロを記録するために作成した「Module1」というファイルが表示されるので以下のコードの追記します。
'
' Macro1 Macro
' テスト用マクロ
'
MsgBox "Hello World!"
'
End Sub
'前回作成したHello Worldを出力するプログラムの下に書いていきます
Sub EnterCellValue()
'先頭をアポストロフィーにするとコメントアウトできます
'ExcelのBook名を指定します
Dim sample_book As Workbook
Set sample_book = Workbooks("SampleBook.xlsm")
'ExcelのSheet名を指定します
Dim sheet_a As Worksheet
Set sheet_a = sample_book.Worksheets("Sheet1")
'Sheet2のE4の値をsheet_aの3行3列目に代入します
sheet_a.Cells(3, 3) = sample_book.Worksheets(2).Range("E4")
'Sheet2のC6からE6までの値をsheet_aのB6,C6,D6にそれぞれ代入します
sheet_a.Range("B6,C6,D6").Value = ThisWorkbook.Worksheets("Sheet2").Range("C6:E6").Value
'Sheet2の8行2列から8行6列までの値をsheet_aの8行2列から8行6列に代入します
sheet_a.Range(sheet_a.Cells(8, 2), sheet_a.Cells(8, 6)).Value = Worksheets("Sheet2").Range(Worksheets("Sheet2").Cells(8, 2), Worksheets("Sheet2").Cells(8, 6)).Value
End Sub
編集画面だと以下のようになります。
ここでExcelBookのウィンドウを開き「Sheet1」を選択後、再度「開発」タブから「マクロ」をクリックします。
すると先ほど作成した「EnterCellValue」というマクロが表示されるので実行を押します。
すると「Sheet1」に値が入力されます。
ここから解説に入ります。
単純にセルに値を入力といってもやり方はいろいろあるので初見だと良く分からないものが多いのではないかとも思います。
最初にSub ~ End Subですがこれは「Subプロシージャー」と呼ばれるものです。構文(書き方)としては
Sub プロシージャー名()
End Sub
となります。
Excelマクロを実行する場合これが一つの塊となって実行されます。今回は「ExcelCellValue」というのがプロシージャー名となります。プログラミングの命名規則をご存じの方ならこれはパスカルケースだとすぐにわかると思います。名前の付け方は自分がわかれば良いのですが適当につけると量が増えたときに困るので最初からある程度決めておくと良いと思います。ちなみにプロシージャー名はパスカルケースですがそれ以降(変数部分)はスネークケースと呼ばれる命名規則に則って書いています。あくまで個人の趣味です。
次にDim~やSet~と書かれた部分ですがここが変数宣言になります。通常の数字や文字の変数はDimだけでも良いですが今回はそれだと上手くいかないのでDim+Setで記述しています。そして最初の部分ですが
'先頭をアポストロフィーにするとコメントアウトできます
'ExcelのBook名を指定します
Dim sample_book As Workbook
Set sample_book = Workbooks("SampleBook.xlsm")
これでExcelのBook名を指定しています。これは何かというと実務ではExcelファイルを複数開きながら作業する場合があり、その時に異なるExcelファイルで同じシート名を使用していると名前の衝突が起こるため事前にBook名というのを指定して衝突を避けようということです。これも構文にすると
'ExcelのBook名を指定します
Dim 変数名 As Workbook
Set 変数名 = Workbooks("(拡張子を含めたExcelファイル名)")
となります。