VBAでセルの値取得と書き換え

投稿日: 2024年6月1日

VBAを使用してセルの値を取得したり書き換えたりするのは、Excelでデータを操作する上で基本的な操作です。

セルの値を取得する

Rangeオブジェクトを使用する場合

Sub GetValueFromRange()
    Dim cellValue As Variant
    cellValue = Range("A1").Value ' A1セルの値を取得
    MsgBox cellValue ' メッセージボックスに表示
End Sub

このコードを実行すると、A1セルの値がメッセージボックスに表示されます。

Cellsプロパティを使用する場合

Sub GetValueFromCells()
    Dim cellValue As Variant
    cellValue = Cells(1, 1).Value ' 1行1列、つまりA1セルの値を取得
    MsgBox cellValue ' メッセージボックスに表示
End Sub

Cellsプロパティを使ってセルの値を取得します。A1セルの値がメッセージボックスに表示されます。

セルの値を書き換える

Rangeオブジェクトを使用する場合

Sub SetValueToRange()
    Range("A1").Value = "Hello, World!" ' A1セルの値を書き換え
End Sub

このコードを実行すると、A1セルに「Hello, World!」という値が入力されます。

Cellsプロパティを使用する場合

Sub SetValueToCells()
    Cells(1, 1).Value = "Hello, VBA!" ' 1行1列、つまりA1セルの値を書き換え
End Sub

Cellsプロパティを使ってセルの値を書き換えます。A1セルに「Hello, World!」という値が入力されます。

テーブルからデータを取得し、集計して結果を別のセルに書き込む

基本的な使い方はここまでにして次は複数のセルの値を取得して加工し、結果を別のセルに書き込むやり方です。

Excelのシートに以下のようにA列とB列にデータを準備します。
データの準備でこのテーブルの「商品名」から「15」まで囲ってコピーしてExcelに貼り付けすると簡単にできます。

商品名数量
商品A10
商品B20
商品C15

VBAコードを記述して、B列の販売数量を合計し、D1セルにその結果を書き込みます。

Sub SumSales()
    Dim lastRow As Long
    Dim totalSales As Long
    Dim i As Long

    ' 最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ' 合計を初期化
    totalSales = 0

    ' 2行目から最終行までループ
    For i = 2 To lastRow
        totalSales = totalSales + Cells(i, 2).Value ' B列の値を合計
    Next i

    ' 合計結果をD1セルに書き込む
    Range("D1").Value = totalSales
End Sub

このコードを実行すると、B列の販売数量が合計され、その結果がD1セルに書き込まれます。

特定の条件に基づいてセルの値を変更する

ここでは、次のようなシナリオを想定します。

  • A列に商品名があり、B列に販売数量がある。
  • 販売数量が15以上の場合、C列に「High」、それ以外の場合は「Low」と書き込む。

以下のようにA列とB列にデータを準備します。

商品名数量評価
商品A10
商品B20
商品C15

次に、VBAコードを記述して、B列の販売数量に基づいてC列に評価を書き込みます。

Sub EvaluateSales()
    Dim lastRow As Long
    Dim i As Long

    ' 最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ' 2行目から最終行までループ
    For i = 2 To lastRow
        If Cells(i, 2).Value >= 15 Then
            Cells(i, 3).Value = "High" ' B列の値が15以上ならC列に「High」と書き込む
        Else
            Cells(i, 3).Value = "Low" ' それ以外なら「Low」と書き込む
        End If
    Next i
End Sub

このコードを実行すると、販売数量が15以上の行に対して「High」、それ未満の行に対して「Low」がC列に書き込まれます。

データのコピーと貼り付け

ここでは、次のようなシナリオを想定します。

  • A列にデータがあり、そのデータをC列にコピーする。

以下のようにA列にデータを準備します。

データ1
データ2
データ3

次に、VBAコードを記述して、A列のデータをC列にコピーします。

Sub CopyData()
    Dim lastRow As Long
    Dim i As Long

    ' 最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ' 2行目から最終行までループ
    For i = 1 To lastRow
        Cells(i, 3).Value = Cells(i, 1).Value ' A列のデータをC列にコピー
    Next i
End Sub

このコードを実行すると、A列のデータがC列にコピーされます。

これらの例を通じて、VBAでセルの値を取得したり書き換えたりする基本的な方法を学ぶことができます。

少し複雑な例

少し複雑な例として、特定の条件に基づいてデータを処理するシナリオを紹介します。以下の例では、データをループで処理し、条件に基づいてセルの値を変更する方法を説明します。

シナリオ

  • Excelシートに商品名、販売数量、価格、合計がそれぞれA列、B列、C列、D列に入力されている。
  • 販売数量が10以上の行については、合計を計算してD列に書き込む。
  • 合計は「販売数量 × 価格」で計算される。
  • 合計が200以上の行については、その行の背景色を黄色にする。

データの準備

商品名数量価格合計
商品A520
商品B1510
商品C825
商品D1218

以下のコードは、上記のシナリオを実現するためのVBAコードです。

Sub ProcessSalesData()
    Dim lastRow As Long
    Dim i As Long
    Dim quantity As Long
    Dim price As Double
    Dim total As Double

    ' 最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ' 2行目から最終行までループ
    For i = 2 To lastRow
        quantity = Cells(i, 2).Value ' B列の数量
        price = Cells(i, 3).Value    ' C列の価格

        ' 販売数量が10以上の場合、合計を計算してD列に書き込む
        If quantity >= 10 Then
            total = quantity * price
            Cells(i, 4).Value = total

            ' 合計が200以上の場合、その行のA列からD列までの背景色を黄色にする
            If total >= 200 Then
                Range(Cells(i, 1), Cells(i, 4)).Interior.Color = RGB(255, 255, 0)
            End If
        End If
    Next i
End Sub

最終行の取得

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

この行は、A列の最後の行番号を取得します。これにより、データが何行目まで入力されているかを動的に確認できます。

ループで各行を処理

For i = 2 To lastRow

2行目から最終行までループを回して、各行を順番に処理します。

販売数量と価格の取得

quantity = Cells(i, 2).Value ' B列の数量
price = Cells(i, 3).Value    ' C列の価格

各行の販売数量と価格をそれぞれ変数に取得します。

条件に基づく処理

販売数量が10以上の場合、合計を計算してD列に書き込む。

If quantity >= 10 Then
    total = quantity * price
    Cells(i, 4).Value = total

合計が200以上の場合、その行のA列からD列までの背景色を黄色にする。

If total >= 200 Then
    Range(Cells(i, 1), Cells(i, 4)).Interior.Color = RGB(255, 255, 0)
End If

実行結果

このコードを実行すると、販売数量が10以上の行について合計が計算され、合計が200以上の行のA列からD列までの背景色が黄色に変更されます。

この例では、VBAを使って複雑な条件に基づいてセルの値を取得し、計算結果を別のセルに書き込み、その結果に基づいてセルのフォーマットを変更する方法を紹介しました。これにより、Excelのデータ処理を自動化し、効率的に管理することができます。

記事