【25】VBAでエクセルのセルに値を入力しよう

記事で紹介しているエクセル
・エクセル2019 [64ビット版]

目次

VBAは、エクセル操作を自動化・プログラミング化できる

本サイトでは、プログラミングの基本を理解する事に重点をおいていたため、これまで構文や概念などの基礎を中心に説明してきました。

今回から、より実務で使えるVBAを紹介していきたいと思います。

そもそもエクセルVBAは、人間がマウスやキーボードでエクセルに対して操作してきた事の大半が、VBAを用いる事で実現可能です。

今回はエクセルのセルへ値を入力する方法について説明します。

VBAを使って、セルに値を入力する

それではセルへの入力方法を解説いたします。

以下にサンプルコードを用意しました。

Sub test22()
    
    'セルA1に値を入力
    Range("A1").Value = "AAA"
    
    'セルA2(行2, 列1)に値を入力
    Cells(2, 1) = "BBB"
        
    'セルA3~A5に値を入力
    Range("A3:A5").Value = "CCC"
    
    '変数「ws」を「Worksheet型」で宣言
    Dim ws As Worksheet
    '変数「ws」に操作するシートをセットする
    ' ※この場合は「シート名:25」を指定
    Set ws = Sheets("25")
    
    'セルB1に値を入力
    ws.Range("B1").Value = 10
    
    'セルB2(行2, 列2)に値を入力
    ws.Cells(2, 2) = 5
    
    'セルB3~B5に値を入力
    ws.Range("B3:B5").Value = 3
    
    'セルC1~C5に値(数式)を入力
    ws.Range("C1:C5") = "=B1*10"
    
End Sub
画像1:値入力コードの結果

このサンプルコードを実行すると、画像1のような結果が得られます。

1つずつ解説していきます。

    'セルA1に値を入力
    Range("A1").Value = "AAA"
    
    'セルA2(行2, 列1)に値を入力
    Cells(2, 1) = "BBB"

    'セルA3~A5に値を入力
    Range("A3:A5").Value = "CCC"

こちらのコードでは、セルA1に「AAA」、セルA2に「BBB」を入力しています。

エクセルVBAには、標準モジュールである「Range」や「Cellsがあります。

これらは「Rangeオブジェクト」の「Rangeプロパティ」「Cellsプロパティに該当します。

Rangeオブジェクト:Range

Rangeプロパティは、セルの範囲を指定します。
 ※「Range(“A1”)」や「Range(“A3:A5”)」

次にメソッドを指定します。

ドット(.)を入力すると、候補になるメソッドやプロパティが表示されます。

画像2:候補となるメソッド・プロパティ一覧

この中に「Value」というメソッドがあります。

こちらを指定して、値を代入するとか、そのセルの範囲に値が代入されます。

Rangeオブジェクト:Cells

Cellsプロパティは、セルの行番号と列番号を指定します。

Cells(<行番号>, <列番号>)

後はRangeプロパティと同じように「Value」メソッドを指定すれば、値を代入できます。

Worksheetオブジェクトで値を代入する

次にWorksheetオブジェクトを使った入力方法を說明します。

    '変数「ws」を「Worksheet型」で宣言
    Dim ws As Worksheet
    '変数「ws」に操作するシートをセットする
    ' ※この場合は「シート名:25」を指定
    Set ws = Sheets("25")
    
    'セルB1に値を入力
    ws.Range("B1").Value = 10
    
    'セルB2(行2, 列2)に値を入力
    ws.Cells(2, 2) = 5
    
    'セルB3~B5に値を入力
    ws.Range("B3:B5").Value = 3

基本はRangeオブジェクトと全く同じです。

違う点は、まずは「Worksheet型」で変数宣言します。

次にSETでWorksheet型で宣言した変数「ws」にオブジェクトを格納します。

この「Sheets(“25”)」は操作対象となるシート名を指定します。

このサンプルでは操作対象シート名が「25」になります。

Set <Worksheet型の変数> = Sheets(<シート名>)
画像3:対象となるシート名(25)

後は変数「ws」にあるRangeプロパティを使います。

これは、RangeオブジェクトのRangeプロパティと全く同じです。

というのも、WorksheetオブジェクトのRangeプロパティは、Rangeオブジェクトを参照しているからです。

この辺は小難しいので、基本的に同じものと思っていただければ良いと思います。

数式も代入可能

最後に、C列1行目~5行目に数式を代入しています。

    'セルC1~C5に値(数式)を入力
    ws.Range("C1:C5") = "=B1*10"

この書き方では、C1~C5まで全てに「=B1*10」が代入されるのではなく、相対的に入力されます。

つまりセルC2には「=B2*10」が代入されます。

画像4:C列への数式代入

これは、C1に数式「=B1*10」が入力されていた際、同じように手動でC5までコピーすれば同じ結果になるのと同様です。

以上のように「Rangeオブジェクト」「Worksheetオブジェクト」を使うことで、エクセルのセルに値を代入する事が可能です。

オブジェクトプロパティ
WorksheetRange
WorksheetCells
RangeRange
RangeCells
表1:Worksheet・Rangeオブジェクト

<補足情報>Worksheet・Rangeオブジェクトの使い分け

今回のサンプルでは、Worksheet・Rangeオブジェクト共に紹介しました。

これらの使い分けについてですが、大きな違いを見れば、Worksheetオブジェクトではシート名が指定できる点です。

エクセルには、アクティブという概念が存在します。

現在開いているシートがアクティブシートであり、現在選択されているセルがアクティブセルとなります。

Rangeオブジェクトでは、アクティブになっているシートが操作の対象です。

一方で、Worksheetオブジェクトは、アクティブでないシートも操作する事ができます

その変わり、必ずオブジェクトをセットする必要がありますが、Rangeオブジェクトはオブジェクトをセットしなくても、そのまま手軽に使う事ができます。

書きやすさなどに合わせて、使い分ければ良いと思います。

RangeオブジェクトをSETした書き方

Sub test22a()

    Dim r As Range
    Set r = Range("D1")

    'セルD1に「555」が入力される
    r.Value = 555
    
End Sub
よかったらシェアしてね!
目次
閉じる