前提・実現したいこと
Excel VBAで配列のデータをFor Each文を使ってワークシートに転記したいと思います。
A列の1行目に右に向かってデータを順番に転記したいので、開始セルはA1セルになります。
For Each文の中で列番号を+1しながら転記していくイメージです。
その際For Each文に入る前に列番号の初期値を設定しようと思っているんですが、初期値に普通に1を代入とした場合は1はマジックナンバーになるのでしょうか?
下記のソースコードだと変数iです。
該当のソースコード
VBA
1Private Const TENKI_COL As Long = 1 2Private Sub test() 3 '~何らかの処理~ 4 Dim i As Long 5 i = 1 6 Dim v 7 For Each v In 配列 8 ActiveSheet.Cells(TENKI_COL, i) = v 9 i = i + 1 10 Next v 11End Sub
補足情報
マジックナンバーだった場合、どのような方法でマジックナンバーを消すのが良いでしょうか?
⓵モジュール上部に初期値の列番号を列挙型で設定しておいて、ローカル変数iに代入する事で初期値とする
②モジュール上部に初期値の列番号を定数で設定しておいて、ローカル変数iに代入する事で初期値とする
③ソースコードは今のままで、ローカル変数iの所にコメントを入れて意味を持たせる
これ以外に方法があれば教えて頂きたいです。
お求めの回答とは思えないのでコメントで。
私の場合の例です。
変数名が i ということで通常カウンタに使われる変数だとわかりますし。
i = 0 または i = 1 はインデックスの最初からと受け止めることができるので、
通常そのまま使っています。
あとは、見出し行があるデータの場合などでは、
Const numTitleRows As long = 2
lastRow As long
With sheet
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End with
Dim i As Long
For i = numTitleRows + 1 To lastRow
...
Next i
などとすることもあります。
だだ、この場合でも
For i = numTitleRows + 1 To lastRow
の + 1 で数字をそのまま使っていますが、
見出しの次の行という意味が伝わるので
nextRow などの変数は用いず使っています。
変数名だけでも伝わる事もあるんですね。
掲載して頂いたソースコードは、見出し行以外のデータ部分をループするのが良く分かります。
参考にさせて頂きます。
ありがとうございました。

回答1件
あなたの回答
tips
プレビュー