セル値の読み取りと書き込み
メニューを表示するにはスワイプしてください
VBAが行う最も基本的な操作は、セルの値(Value)の読み取りと書き込み。
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
Debug.Print ws.Range("C2").Value ' Acme Corp
ws.Range("I2").Value = "Shipped" ' overwrite the Status cell
Cells(row, column)は、文字ではなく数値で同じことを行う。ループ処理で特に便利。ループ変数は文字ではなく数値。
Debug.Print ws.Cells(2, 3).Value ' same as Range("C2") — row 2, column 3
ws.Cells(2, 9).Value = "Shipped" ' same as Range("I2")
ValueとFormulaとFormula2の違い
これらは似ているが、同じではない。
ws.Range("H2").Value ' returns the calculated result: 202.5
ws.Range("H2").Formula ' returns the formula as typed: =E2*F2*(1-G2)
ws.Range("H2").Formula2 ' like Formula, but supports newer dynamic-array functions
数値のみが必要な場合は .Value を使用。セルに数式を書き込む場合は .Formula を使用(例:合計列をプログラムで作成する場合、手入力やコピーの代わりに使用):
ws.Range("H2").Formula = "=E2*F2*(1-G2)"
NumberFormat
値の表示形式を制御し、元の数値は変更しない:
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' currency
ws.Range("G2:G6").NumberFormat = "0%" ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy" ' date
この設定は見た目以上に重要。セルには 0.1 が格納されていても、同時に「10%」と表示でき、NumberFormat のみが表示部分を制御する。
課題
Subを作成し、注文 ORD1003 の顧客名と合計金額を2つの変数に読み込み、MsgBoxで表示する。- ORD1002 のステータスを Range ではなく Cells(row, column) を使って「Shipped」に変更する。
- 単価および合計金額の列に
NumberFormat = "$#,##0.00"を、割引率の列に「0%」を適用する。
1. ORD1003 の顧客名と合計金額の読み取り
- まず、ORD1003 がどの行にあるかを確認 — 第3章の冒頭データの表で数えると、ORD1001 が2行目なので、ORD1003 はさらに2行下。
- 顧客名と合計金額は異なる列 — ヘッダー行(Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status)を横に数えて、それぞれの列の位置を確認。
- 顧客名用の変数(
String型)と合計金額用の変数(Double型)を宣言し、第3章で学んだ方法でシートを明示的に参照(ThisWorkbook.Worksheets("Orders"))、各セルの.Valueを対応する変数に読み込む。 - 2つの変数を
&で連結し、MsgBoxに渡して表示 — 第2章で行ったパターンと同じ。
2. Cells(row, column) を使った ORD1002 のステータス変更
Cells(row, column)は列記号ではなく数字を使う — ORD1002 の行番号は表から分かるので、列は位置を数えて指定(Status は9列目)。- これは単純な代入:
.Cells(row, column).Value = "Shipped"、事前に値を読み取る必要はなし。
3. 3つの列への NumberFormat の適用
NumberFormatはセル単体でも範囲でも同じ方法で設定 —F2:F6、H2:H6、G2:G6に適用(単価、合計金額、割引率がそれぞれどの列か再確認してから入力)。- 各列ごとに1行ずつ記述。単価・合計金額は通貨書式、割引率はパーセント書式 — 1行で両方の書式を適用しないこと。
- すでに設定した
ws変数で範囲を参照すれば、3行とも簡潔で統一感のある記述になる。
Sub ExploreOrdersData()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
' --- 1. Read ORD1003's Customer and Total ---
Dim customerName As String
Dim orderTotal As Double
customerName = ws.Range("C4").Value
orderTotal = ws.Range("H4").Value
MsgBox "Customer: " & customerName & " | Total: " & orderTotal
' --- 2. Change ORD1002's Status using Cells(row, column) ---
ws.Cells(3, 9).Value = "Shipped"
' --- 3. Apply NumberFormat to Unit Price, Total, and Discount % ---
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' Unit Price
ws.Range("H2:H6").NumberFormat = "$#,##0.00" ' Total
ws.Range("G2:G6").NumberFormat = "0%" ' Discount %
End Sub
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セル値の読み取りと書き込み
VBAが行う最も基本的な操作は、セルの値(Value)の読み取りと書き込み。
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
Debug.Print ws.Range("C2").Value ' Acme Corp
ws.Range("I2").Value = "Shipped" ' overwrite the Status cell
Cells(row, column)は、文字ではなく数値で同じことを行う。ループ処理で特に便利。ループ変数は文字ではなく数値。
Debug.Print ws.Cells(2, 3).Value ' same as Range("C2") — row 2, column 3
ws.Cells(2, 9).Value = "Shipped" ' same as Range("I2")
ValueとFormulaとFormula2の違い
これらは似ているが、同じではない。
ws.Range("H2").Value ' returns the calculated result: 202.5
ws.Range("H2").Formula ' returns the formula as typed: =E2*F2*(1-G2)
ws.Range("H2").Formula2 ' like Formula, but supports newer dynamic-array functions
数値のみが必要な場合は .Value を使用。セルに数式を書き込む場合は .Formula を使用(例:合計列をプログラムで作成する場合、手入力やコピーの代わりに使用):
ws.Range("H2").Formula = "=E2*F2*(1-G2)"
NumberFormat
値の表示形式を制御し、元の数値は変更しない:
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' currency
ws.Range("G2:G6").NumberFormat = "0%" ' percentage
ws.Range("B2:B6").NumberFormat = "dd/mm/yyyy" ' date
この設定は見た目以上に重要。セルには 0.1 が格納されていても、同時に「10%」と表示でき、NumberFormat のみが表示部分を制御する。
課題
Subを作成し、注文 ORD1003 の顧客名と合計金額を2つの変数に読み込み、MsgBoxで表示する。- ORD1002 のステータスを Range ではなく Cells(row, column) を使って「Shipped」に変更する。
- 単価および合計金額の列に
NumberFormat = "$#,##0.00"を、割引率の列に「0%」を適用する。
1. ORD1003 の顧客名と合計金額の読み取り
- まず、ORD1003 がどの行にあるかを確認 — 第3章の冒頭データの表で数えると、ORD1001 が2行目なので、ORD1003 はさらに2行下。
- 顧客名と合計金額は異なる列 — ヘッダー行(Order ID, Order Date, Customer, Product, Qty, Unit Price, Discount %, Total, Status)を横に数えて、それぞれの列の位置を確認。
- 顧客名用の変数(
String型)と合計金額用の変数(Double型)を宣言し、第3章で学んだ方法でシートを明示的に参照(ThisWorkbook.Worksheets("Orders"))、各セルの.Valueを対応する変数に読み込む。 - 2つの変数を
&で連結し、MsgBoxに渡して表示 — 第2章で行ったパターンと同じ。
2. Cells(row, column) を使った ORD1002 のステータス変更
Cells(row, column)は列記号ではなく数字を使う — ORD1002 の行番号は表から分かるので、列は位置を数えて指定(Status は9列目)。- これは単純な代入:
.Cells(row, column).Value = "Shipped"、事前に値を読み取る必要はなし。
3. 3つの列への NumberFormat の適用
NumberFormatはセル単体でも範囲でも同じ方法で設定 —F2:F6、H2:H6、G2:G6に適用(単価、合計金額、割引率がそれぞれどの列か再確認してから入力)。- 各列ごとに1行ずつ記述。単価・合計金額は通貨書式、割引率はパーセント書式 — 1行で両方の書式を適用しないこと。
- すでに設定した
ws変数で範囲を参照すれば、3行とも簡潔で統一感のある記述になる。
Sub ExploreOrdersData()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Orders")
' --- 1. Read ORD1003's Customer and Total ---
Dim customerName As String
Dim orderTotal As Double
customerName = ws.Range("C4").Value
orderTotal = ws.Range("H4").Value
MsgBox "Customer: " & customerName & " | Total: " & orderTotal
' --- 2. Change ORD1002's Status using Cells(row, column) ---
ws.Cells(3, 9).Value = "Shipped"
' --- 3. Apply NumberFormat to Unit Price, Total, and Discount % ---
ws.Range("F2:F6").NumberFormat = "$#,##0.00" ' Unit Price
ws.Range("H2:H6").NumberFormat = "$#,##0.00" ' Total
ws.Range("G2:G6").NumberFormat = "0%" ' Discount %
End Sub
フィードバックありがとうございます!