Excel VBA 逆引き集 | セルに値を代入

Excel VBA
スポンサーリンク

セルに値を代入

「1セルに入れる」「複数セルへ一括」「数式や書式もセット」「選択セルへ」「別シート・別ブックへ」まで、初心者がつまずきやすいポイントを避けながら使えるテンプレートと例題でまとめます。


基本:セルに値を入れる最短パターン

Sub SetCellValue_Basic()
    'アクティブシートのA1へ文字列
    Range("A1").Value = "こんにちは"

    'B2へ数値(.Valueは省略可)
    Range("B2") = 123

    'C3へ日付(リテラルは # # で囲む)
    Range("C3").Value = #2025/6/13#

    '行列指定(Cells(row, col))
    Cells(1, 1).Value = "左上" 'A1と同じ
End Sub
VB
  • ポイント: Range(“A1”).Value が基本。行・列で指定したい場合は Cells(row, col)。日付はリテラルで正しく代入でき、表示はセルの書式に依存します。
  • 省略形: Range(“B2”) = 123 のように .Value は省略可能です。

複数セルへ一括で同じ値を入れる

Sub SetSameValueToRange()
    'B4:B6 の3セル全てに同じ文字列
    Range("B4:B6").Value = "在庫あり"

    '数値も同様
    Range("D4:D6").Value = 300
End Sub
VB
  • ポイント: 範囲に .Value を代入すると「全セル同一値」になります。列・行方向どちらでも同様に働きます。

異なる値を複数セルに一括で入れる(2次元配列)

Sub SetDifferentValuesWithArray()
    Dim data(1 To 3, 1 To 1) As Variant '3行×1列(縦方向)
    data(1, 1) = "A"
    data(2, 1) = "B"
    data(3, 1) = "C"
    Range("E2:E4").Value = data        '2次元配列を代入

    '行×列どちらも可能な例(2行×3列)
    Dim grid(1 To 2, 1 To 3) As Variant
    grid(1, 1) = "X": grid(1, 2) = "Y": grid(1, 3) = "Z"
    grid(2, 1) = 10:  grid(2, 2) = 20:  grid(2, 3) = 30
    Range("G2:I3").Value = grid
End Sub
VB
  • ポイント: 1次元配列は使えません。複数セルに異なる値を入れたい時は「範囲サイズと一致する2次元配列」を .Value に渡します。1次元での Array(…) 代入は意図通り動作しないので注意。

数式や書式を合わせて設定する

Sub SetFormulaAndFormat()
    '数式(合計)を代入
    Range("F5").Formula = "=SUM(F2:F4)"

    '通貨書式を設定
    With Range("F2:F5")
        .NumberFormatLocal = "#,##0;[赤]-#,##0" '負数は赤
        .Font.Bold = True
    End With
End Sub
VB
  • ポイント: 計算は .Formula で文字列として代入。見た目は NumberFormat(Local) や Font などで整えます。

選択中のセルだけに代入(作業グループ対応)

Sub SetValueToSelectedCells()
    If TypeName(Selection) = "Range" Then
        Selection.Value = "選択中"
    End If
End Sub
VB
  • ポイント: Selection が範囲なら、そのすべてのセルに同じ値が入ります。多選択に強い簡易パターンです。

別シート・別ブックのセルに代入

Sub SetOtherSheetAndWorkbook()
    '別シートを明示
    Worksheets("顧客").Range("A1").Value = "顧客ID"

    '別ブック(すでに開いている前提)
    With Workbooks("月次集計.xlsm").Worksheets("売上")
        .Cells(2, 1).Value = "商品A"
        .Cells(2, 2).Value = 1200
    End With
End Sub
VB
  • ポイント: 対象のワークシート・ブックを明示すると取り違えを防げます。

入力値をセルへ書き込む(安全な最短)

Sub WriteFromInputBox()
    Dim text As String
    text = InputBox("A1に入れる文字を入力してください")
    If Len(text) = 0 Then Exit Sub
    Range("A1").Value = text
End Sub
VB
  • ポイント: 空入力をスキップするだけで「意図しない上書き」を減らせます。

例題で練習

例題1:A列に1〜10を縦に連続で代入

Sub FillNumbersA1ToA10()
    Dim i As Long
    For i = 1 To 10
        Range("A1").Offset(i - 1, 0).Value = i
    Next
End Sub
VB

例題2:売上表の見出しと初期値を一括セット

Sub SetupSalesTable()
    With Range("B2:E2")
        .Value = Array("商品", "単価", "数量", "金額") '横方向の見出し
        .Font.Bold = True
    End With
    Range("E3:E12").Formula = "=C3*D3" '金額計算式を下まで(相対参照)
End Sub
VB

例題3:複数セルに異なる文字列を一括代入(2×3)

Sub SetGridTexts()
    Dim arr(1 To 2, 1 To 3) As Variant
    arr(1, 1) = "A": arr(1, 2) = "B": arr(1, 3) = "C"
    arr(2, 1) = "D": arr(2, 2) = "E": arr(2, 3) = "F"
    Range("H2:J3").Value = arr
End Sub
VB

実務の落とし穴と対策

  • 全セル同一値の仕様: 範囲.Value の一括代入は「同一値」しか入らない。異なる値は2次元配列かループを使う。
  • 型の誤解: 日付や数式は文字列として扱われる文法がある。日付リテラルは # #、数式は .Formula で正しく代。
  • 対象の取り違え: Worksheets(“名前”).Range(“…”) とブック・シートを明示するとミスが減る。
  • Selection依存の不安定さ: 選択状態に左右される処理は誤操作のもと。必要時のみ使い、基本は対象を明示。
  • パフォーマンス: 大量代入は ScreenUpdating を False に、可能なら配列で一括代入にするのが速い。
タイトルとURLをコピーしました