Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1189 / 13645 ツリー ←次へ | 前へ→

【75739】Valueと変数の使い方 芸人 14/6/25(水) 1:00 質問[未読]
【75740】Re:Valueと変数の使い方 γ 14/6/25(水) 5:45 回答[未読]
【75746】Re:Valueと変数の使い方 芸人 14/6/25(水) 23:12 お礼[未読]
【75752】Re:Valueと変数の使い方 γ 14/6/26(木) 21:22 発言[未読]
【75756】Re:Valueと変数の使い方 芸人 14/6/29(日) 16:48 お礼[未読]

【75739】Valueと変数の使い方
質問  芸人  - 14/6/25(水) 1:00 -

引用なし
パスワード
   こんにちは。
初心者本を見ながらコードを書いていましたが
よくわからないうちに期待してた結果が出てしまいました。
しかし本当に正しいのかどうかわからないのでアドバイス願います。

Sub セルへの入力()
'
n = Cells(3, 21).Value
m = Cells(3, 23).Value

For A = n + 5 To m + 3
Cells(3, A).Value = "→"
Next A

End Sub

Cells(3, 21)と Cells(3, 23)には日付の日にち部分の数字が書いてあります。
E列から1日が始まるように考え、日にちCells(3, 21)と日にち Cells(3, 23)の
間の部分が→と書き込まれるように考えています。

アドバイスしていただきたいのは
1.Valueプロパティは文字列だけではなく、数字は数字として処理してくれると考えていいですか?

2.For A = n + 5 To m + 3 のように変数の中に変数を入れるのは問題はないですか?

毎度初歩的な質問で申し訳ないですが、ご回答いただけたら幸いです。

【75740】Re:Valueと変数の使い方
回答  γ  - 14/6/25(水) 5:45 -

引用なし
パスワード
   >1.Valueプロパティは文字列だけではなく、数字は数字として処理してくれると考えていいですか?
そうです。
ヘルプを見ると、
>Range.Value プロパティ
>指定されたセル範囲の値を表すバリアント型 (Variant) の値を設定します。値の取得および設定が可能です
とあります。Variant型ですから、数値も文字列もOKです。
MsgBox TypeName(n)などとすると、Doubleと表示されます。(数値のデフォルトはDoubleです)

ただし、この場合、
>Cells(3, 21)と Cells(3, 23)には日付の日にち部分の数字
ということが解っているわけですから、
Dim n As Long
Dim m As Long
と型宣言しておくべきです。(下記補足(1)参照)

> 2.For A = n + 5 To m + 3 のように変数の中に変数を入れるのは問題はないですか?
問題ありません。
(なお、counterのstartとendの値は一度設定されるだけで、
  繰り返しの都度計算されるわけではありません。)

-----------------
なお、
(1)
変数は必ず宣言すべきです。
これがないと、変数のタイプミスがあっても、発見が遅れます。
宣言があれば、宣言せずに使った変数には警告が出ます。
また、特定の型にしておけば実行効率が上がると言われています。

Option Explicit
を一行目に挿入するようにして下さい。
そうすれば、今回のような未宣言の変数には警告が出ます。

また、
ツール − オプション − 編集 で
「変数の宣言を強制する」にチェックを入れておけば、
モジュールを作成した時点で、Option Explicitが自動的に挿入されるので、
手間が省けます。

(2)
繰り返しに使う変数は、Aといった変数名ではなく,i,j,k,l,m,nといったものを
使うのが普通です。これは多くの人が使う慣例のようなものです。
iは1,l と誤認しやすいので、一つだけの繰り返しなら、私は k を使うことが多いですね。

(3)
最後の繰り返しのところは、
Range(Cells(3, n + 5), Cells(3, m + 3)).Value = "→"
といった書き方もできますね。

【75746】Re:Valueと変数の使い方
お礼  芸人  - 14/6/25(水) 23:12 -

引用なし
パスワード
   γ さん、今回も早くて明瞭で丁寧なアドバイスありがとうございます。
最終的に
Option Explicit

Sub セルへの入力()

Dim n As Integer
Dim m As Integer
n = Cells(3, 21).Value
m = Cells(3, 23).Value

Range(Cells(3, n + 5), Cells(3, m + 3)).Value = "→"

End Sub

としました。
Option ExplicitはSubの次に書いたらプロシージャ内は無効ですと出ました。
Subの前に書かないとダメなんですね。勉強になります。変数宣言されてないというメッセージも確かめました。
前回変数にAを使ったのは、私の初心者本ですと変数に漢字が使われているのです。
さすがに漢字は違和感が強くてためらわれました。

Range(Cells(3, n + 5), Cells(3, m + 3)).Value = "→"

ですが変数使ってないのに何でこれでいいいのかわかりませんが
Rangeについて検索したら初心者には若干ハードルが高いと書かれているサイトがありました。
しかし変数使わずにすむならありがたいので、これを機会に理解していこうと思います。
ありがとうございました。

【75752】Re:Valueと変数の使い方
発言  γ  - 14/6/26(木) 21:22 -

引用なし
パスワード
   コメントは求めておられないと思いますが、ついでに。

> 前回変数にAを使ったのは、私の初心者本ですと変数に漢字が使われているのです。
> さすがに漢字は違和感が強くてためらわれました。
ちなみに何という漢字なんでしょう。

For 列 = n + 5 To m + 3
   Cells(3, 列).Value = "→"
Next 列
とかですか? まあ、それもありますけどね。
i,j,k,l,m,n がいいでしょう。
  ↑ちなみに、これはintegerの頭2文字の間に入る、と覚えるといいかも。

> Range(Cells(3, n + 5), Cells(3, m + 3)).Value = "→"
> ですが変数使ってないのに何でこれでいいいのかわかりませんが
> Rangeについて検索したら初心者には若干ハードルが高いと書かれているサイトがありました。

 Range(Cells(3, 10), Cells(3, 15)).Value = "→"
 はOKですか?
 10のかわりに n + 5 、 15 のかわりに m + 3 と変数n , m を使っていると
 考えればいいでしょう。

 Excelの操作対象は、殆どがRangeに関連するものですから、
 これをマスターすることが必要ですよ。
 ht tp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html
 などを熟読ください。 

【75756】Re:Valueと変数の使い方
お礼  芸人  - 14/6/29(日) 16:48 -

引用なし
パスワード
   γ さん、いつも丁寧な解説ありがとうございます。

>ちなみに何という漢字なんでしょう。

数、とか列とか、ワークシート、セル範囲とか
何でもアリみたいなかんじです。わかりやすいんですが
違和感があります。

>i,j,k,l,m,n がいいでしょう。
>  ↑ちなみに、これはintegerの頭2文字の間に入る、と覚えるといいかも。

覚えやすいですね。

> Range(Cells(3, 10), Cells(3, 15)).Value = "→"
> はOKですか?

難しく考えすぎてました。
Range("D5:I5") .Value = "→"
という感じでFor Toは必要なかったですね。
勉強になりました。

1189 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free