5.4 セルへ文字列、数値、数式を書込む2
この例では、書込むセルが可変の場合を説明します。なお、セルへ文字列や数値、数式などを書き込むときの方法(RangeまたはCellsValueプロパティを操作)は同じです。

ちなみに、Excel97以降ではRangeまたはCellsの標準プロパティ(省略したときのプロパティ)がValueプロパティになっているので省略しても平気ですが、Happy! Happy! Islandでは付けるようにしています。
使用例1/縦方向への書き込み
まず最初に縦方向に書込んでいく場合を、「A1〜A10までの連続したセルに何らかの値を入れる」という例を基にして説明します。
(ワークブック・ワークシート共に、1つ目とします)


以下の例では、セルA1〜A10へそれぞれ1〜10の数値を入れています。Rangeの所で"A" & iとしているのがポイントで、Rangeに指定するセル名のうちの部分を変数 i の値で指定しています。

Sub prcCellA1toA10_1()

    Dim i As Long
    
    For i = 1 To 10

        '行の部分はiの値を指定
        Range("A" & i) = i

    Next

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです


ちなみに、Cellsを使った場合と、RangeCellsの組み合わせだと次のようになります。こちらの例では、CellsA1〜A10へ、RangeCellsの組み合わせはB1〜B10へセットしています。

Sub prcCellA1toA10_2()

    Dim i As Long

    For i = 1 To 10

        'Cellsは「行, 列」で指定。列をiで指定し可変にする
        '列1はA列
        Cells(i, 1) = i

        'RangeとCellsの組み合わせ
        '列2はB列
        Range(Cells(i, 2), Cells(i, 2)) = i * 10

    Next

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです


もう一つの方法も書いておきます。オブジェクトを使ってループする方法です。次の例では、2番目の例と全く同じ事をしています。繰り返しの基準はRangeによる範囲指定で行い、B列のセルはOffsetプロパティを使って指定してます。Offsetプロパティというのは、元の範囲から指定した分だけずらした同じ大きさの範囲を参照せよというプロパティです。

Sub prcCellA1toA10_3()

    Dim rngCell As Range
    Dim i As Long

    i = 0

    For Each rngCell In Range("A1:A10")

        i = i + 1

        'A列のセル
        rngCell.Value = i

        'B列はOffsetを使いセット
        rngCell.Offset(0, 1).Value = i * 10

    Next

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです
使用例2/横方向への書き込み
次に横方向(列方向)に書込んでいく場合です。「A1〜J1までの連続したセルに何らかの値を入れる」という例を基にして説明します。

横方向(列方向)に書込む場合、セル名(A1やC1など)で指定するとムダにややこしくなるので、CellsRangeCellsの組み合わせが適しています。以下の例では、A1〜J1の連続したセルに値を入れています。

Sub prcCellA1toJ1_1()

    Dim i As Long

    For i = 1 To 10

        'Cellsは「行, 列」で指定。列をiで指定し可変にする
        Cells(1, i) = i

    Next

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです


RangeCellsの組み合わせの場合は、次の通りです。

Sub prcCellA1toJ1_2()

    Dim i As Long

    For i = 1 To 10

        'RangeとCellsの組み合わせ
        Range(Cells(1, i), Cells(1, i)) = i

    Next

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです


オブジェクトを使ってループする例も書いておきます。繰り返しの基準はRangeによる範囲指定で行い、2行目のセルはOffsetプロパティを使って指定してます。

Sub prcCellA1toJ1_3()

    Dim rngCell As Range
    Dim i As Long

    i = 0

    For Each rngCell In Range("A1:J1")

        i = i + 1

        '1行目のセル
        rngCell.Value = i

        '2行目はOffsetを使いセット
        rngCell.Offset(1, 0).Value = i * 10

    Next

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです
Copyright(C) 1999-2006 結城圭介。 All rights reserved