HOWTO · VBA

VBA でセルの数式を設定する

このチュートリアルでは、VBA でセル数式を設定および使用する方法を示します。

さまざまなタスクを実現するために VBA で実行できるさまざまなセル関数を例とともに紹介します。

VBA でセルの数式を設定する

Excel のワークシートには、データを保存するためのセルが含まれています。 これらのセルは、ワークシートの行と列を形成するように配置されます。

VBA コーディングには Excel ワークシートのセルを使用しますが、1つ以上のセルを含む範囲を使用します。 VBA セルに関連する重要な機能の一部を次に示します。

  • セルのアドレス
  • セル範囲
  • セルへの書き込み
  • セルからの読み取り
  • 交差するセル
  • 非連続セル
  • セルからのオフセット
    ・セルアドレス参照
  • すべてのセルを含む
  • セルのプロパティの変更
  • 最後のセルを見つける
  • 列で使用されている最後の行番号を見つける
  • 行で使用されている最後の列番号を見つける
  • セルのコピー&ペースト

VBA のセルのアドレス

セルのアドレスは、列の文字の名前を含め、セルの行番号を書き込む A1 表記で識別できます。 VBA では、範囲オブジェクトを含めることができます。

以下に示すように、セル B4 を参照してみましょう。

# vba
MsgBox Range("B4")

出力:

VBA でセルの値を取得

以下に示すように、別のワークシートからセルを参照したい場合は、シートを呼び出してセルを取得することで簡単に呼び出すことができます。

# vba
MsgBox Worksheets("Sheet2").Range("B4")

出力:

VBA で別のシートからセルの値を取得

以下に示すように、別のワークブックを開き、そのワークブックからワークシートを選択して、目的のセルの値を取得することもできます。

# vba
MsgBox Workbooks("My WorkBook").Worksheets("Sheet2").Range("B2")

セル アドレスを記述する別の方法は、文字 R と行番号を使用することです。 次に、文字 C とセルの列番号を書きます。

この方法はR1C1記法と呼ばれます。 以下に示すように、この表記法を例で使用してみましょう。

#vba
Sub callIt()

Cells(4, 2) = "Added"

End Sub

出力:

VBA で R1C1 表記を使用してセルの値を変更

VBAでセル範囲を選択

以下の関数Rangeに範囲値を与えることで、セルの範囲を選択することもできます。

# vba
Range("A1:B13")

上記の関数を使用して、その範囲に存在するセルのスタイルを変更できます。 以下に示すように、セルの境界線の色をその範囲から変更する例を見てみましょう。

# vba
Sub callIt()

Range("A1:B13").Borders.Color = RGB(255, 0, 255)

End Sub

出力:

範囲内のセルを使用して境界線の色を変更

上記の例からわかるように、セルの値を指定することにより、範囲関数を使用してスタイルを簡単に変更できます。

VBAでセルに書き込む

特定のセルを編集したり値を追加したりするシナリオはたくさんあります。 VBA を使用すると、セルの値を置き換えたり、セルの値を追加したりするのは非常に簡単です。 range() 関数を使用できます。

次に、range() 関数を使用して、値を追加および変更します。

# vba
Sub callIt()

Range("B4") = "Value Added"

End Sub

値が追加されたら、値を変更します。 そして、以下に示すように、同じセルを置き換えようとします。

# vba
Sub callIt()

Range("B4") = "Value Changed"

End Sub

出力:

VBA を使用してセルの値を追加および変更する

Cells メソッドを使用して同じ機能を実行することもできます。

# vba
Sub callIt()

Cells(4, 2) = "Value"

End Sub

出力:

VBA でセル メソッドを使用してセルの値を追加および変更する

値の範囲を格納する場合は、単純な変数を使用するよりも配列を使用する方が適切です。

VBA のセルから読み取る

セルから値を読み取りたい場合は、2つの関数を使用できます。 1つは Range で、もう 1つは Cells です。 セルのアドレスを呼び出すことで、その値を取得できます。

MsgBox メソッドを使用して値を表示できます。 例を見てみましょう。最初に Cells メソッドを使用して B4 の値を取得します。

# vba
Sub callIt()

cellValue = Cells(4, 2)

MsgBox (cellValue)

End Sub

出力:

VBA でセル メソッドを使用してセルから値を読み取る

以下の range() メソッドを使用して同じことを達成してみましょう。

# vba
Sub callIt()

cellValue = Range("B4")

MsgBox (cellValue)

End Sub

出力:

VBA で範囲メソッドを使用してセルから値を読み取る

上記の例からわかるように、これら 2つの関数を使用してセルの値を読み取るのは非常に簡単です。

VBA でセルを交差させる

Excel シートの数式を作成するために VBA で作業しているときに、2つの範囲の交点を見つけて、そこで特定のタスクを実行する必要がある場合があります。 または、これら 2つの範囲の交点に特定の値を配置します。

セル アドレスと VBA の間にはスペースが使用され、交差処理が行われます。

以下に示すように、両方の範囲に共通する範囲セルに値を追加する例を見ていきます。

# vba
Sub callIt()

Range("A1:B10 B1:C10") = "Common Cells"

End Sub

出力:

VBA で 2つの範囲を使用してセルを交差

上記の例からわかるように、2つの範囲間で交差するセル間の値を簡単に追加または置換できます。

VBA で連続していないセルの値を置き換える

連続していないセルの値を置き換える必要がある場合があります。 これは、複数のセルまたは単一のセルの範囲を使用して簡単に行うことができます。

連続していないセルの場合、異なるセル アドレスの間にカンマ (,) を挿入します。 以下に示すように、特定のセルの値を置き換える例を見てみましょう。

# vba
Sub callIt()

Range("A2,C3,B5") = 10

End Sub

出力:

VBA で非連続セルの値を変更

次に、以下に示すように、連続していない単一のセルの値を変更してみましょう。

# vba
Sub callIt()

Cells(5, 2) = "Hello"

End Sub

出力:

VBA で単一の非連続セルの値を変更

VBA のセルからのオフセット

Excel シートを使用して VBA で作業しているときに、オフセット セル値を取得したり、1つのセル アドレスに基づいてセルの値を置き換えたりする参照セルがある場合があります。

offset メソッドを使用して、このシナリオをスムーズに実現できます。

以下に示すように、この関数を使用して、range メソッドを使用して 1 列と 1 行を移動する例を見てみましょう。

# vba
Sub callIt()

Range("A1").Offset(1, 1) = "A1"

End Sub

出力:

VBA の範囲のオフセット メソッドを使用して値を追加

次に、以下の Cells メソッドを使用して同じシナリオを試してください。

# vba
Sub callIt()

Cells(1, 1).Offset(0, 0) = "A1"

End Sub

出力:

VBA のセルにオフセット メソッドを使用して値を追加

ここで、範囲のオフセット値に基づいて複数のセルに値を追加する場合を想像してみましょう。以下に示すようにこれを行うことができます。

# vba
Sub callIt()

Range("A1:B13").Offset(4, 2) = "Completed"

End Sub

出力:

VBA のセルでオフセット メソッドを使用して範囲に値を追加

VBA でセル アドレスを参照する

セルのアドレスを取得したい場合は、関数 Address を使用してすばやく取得できます。 以下に示すように、特定のセルのアドレスを取得しようとする例を見てみましょう。

# vba
Sub callIt()

Set cell = Cells(2, 4)

MsgBox cell.Address

End Sub

出力:

VBA でセルのアドレスを取得

上記の例からわかるように、VBA で address メソッドを使用して任意のセルのアドレスを簡単に取得できます。

VBA にすべてのセルを含める

すべてのセルからすべてのデータを消去したい場合があります。 このシナリオでは、以下に示すように次のコードを記述できます。

# vba
Sub callIt()

Cells.Clear

End Sub

出力:

VBA のすべてのセルをクリア

上記の例からわかるように、簡単に

VBA でセルのプロパティを変更する

特定のセルのプロパティを変更する必要がある場合があります。 VBA を使用すると、任意のセルのプロパティを簡単に変更できます。

以下に示すように、フォントの色を変更する例を見てみましょう。

# vba
Sub callIt()

Set NewCell = Range("A1")

NewCell.Activate

NewCell.Font.Color = RGB(255, 0, 0)

End Sub

出力:

VBA を使用してフォントの色を変更

次に、以下に示すように、セルのフォント ファミリとフォント サイズを変更してみましょう。

# vba
Sub callIt()

Set cell = Range("A1")

cell.Activate

cell.Font.Size = 20
cell.Font.FontStyle = "Courier"

End Sub

出力:

VBAによるフォントサイズとフォントスタイルの変更

VBA で最後のセルを見つける

列または行の最後のセルを見つけなければならない場合があります。 Row.countColumn.count を VBA で使用して、Excel ワークシートの最後の行を見つけることができます。

以下に示すように、例を見て、行と列から最後のセルを見つけてみましょう。

# vba
Sub callIt()

MsgBox ("Last cell row wise in the sheet: " & Rows.Count)

MsgBox ("Last cell column wise in the sheet: " & Columns.Count)

End Sub

出力:

VBA で列と行の最後のセルを検索

上記の例からわかるように、単純な関数 count を使用して、行または列の最後のセルを見つけるのは非常に簡単です。

VBA の列で使用されている最後のセルを見つける

格納しているデータの数を把握するために、列で最後に使用されたセルを知りたい場合があります。

以下に示すように、例を見て、特定の列で占有されている最後のセルを見つけてみましょう。

# vba
Sub callIt()

MsgBox (Cells(Rows.Count, "B").End(xlUp).Row)

End Sub

出力:

VBA で使用されている列の最後のセルを検索

上記の例からわかるように、最後に使用されたセルを 100% の精度で見つけることができます。 VBA は、これらのものを正確に見つけて、データを失わないための最良の方法です。

VBAで行で使用されている最後のセルを見つける

保存しているデータの数を把握するために、行で最後に使用されたセルを知りたい場合があります。

以下に示すように、例を見て、特定の行で占有されている最後のセルを見つけてみましょう。

# vba
Sub callIt()

MsgBox (Cells(9, Columns.Count).End(xlToLeft).Column)

End Sub

出力:

VBA で使用されている行の最後のセルを検索

上記の例からわかるように、最後に使用されたセルを 100% の精度で見つけることができます。 VBA は、これらのものを正確に見つけて、データを失わないための最良の方法です。

VBA でセル値をコピーして貼り付ける

特定の値をあるセルから別のセルにコピー アンド ペーストする必要がある場合があります。 または、以下に示すように、VBA を使用して 1つのシートから別のシートにコピー アンド ペーストすることもできます。

# vba
Sub callIt()

Worksheets("Sheet2").Range("A1:B13").Copy Destination:=Worksheets("Sheet1").Range("A1")

End Sub

出力:

VBA でのコピーと貼り付け

上記の例からわかるように、セルを使用して多くのタスクを実行できます。