Excel VBA質問箱 IV

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

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


10788 / 76734 ←次へ | 前へ→

【71491】Re:意味がいまいち分かりません
発言  UO3  - 12/3/11(日) 17:49 -

引用なし
パスワード
   ▼掛橋 さん:

ご参考までに。

まず、アップされたコードはすべて1桁目から記述されています。
このようなコードを「インデントがつけられていないコード」といいます。
たとえば Do/Loopの内側等、ある条件下で実行されるコードは、その条件を制御しているコードより
3桁ないしは4桁右から記述を始めます。
(コードを打つときにタブキーをおすと、設定されたインデントの桁数分、右にカーソルが自動スキップします)

Sample1は、アップされたコードのまま、インデントをつけたものです。

で、次に、hintさんからもでていましたが、Select は、できるだけ避けるように記述します。
マクロ記録すると、Selectのオンパレードになりますので、VBA始めてbもない人にとっては、
理解しづらいかもしれません。
でも、「無駄な動き」ですし、場合によっては、Selectのためにエラーになるケースもあります。

また、ActiveCellを相手にしたコードもできるだけ避けたほうがよろしいです。
ちゃんと、処理するセルを明記しましょう。

もう1つ、total をSingle型で定義しておられます。実際のデータは、これぐらいで、十分だという判断でしょうけど
(入力間違いも含めて)もっと大きな数値がセルに入っているかもしれません。
小数点付きの変数の定義は Double型で行ったほうが無難です。
ほんの少々、確保されるメモリーサイズが増えますが「顕微鏡でのぞく」ぐらいの差ですので。

同じように、整数の場合は、それが、どんなに小さな数値を相手にする場合でも、Integer ではなく Long 規定が
望ましいですね。こちらの場合は、内部の計算効率がLong型のほうが、Integer型より優れているということもあります。

上記のようなことを加味したものが、Sample2です。

で、実は、このケース、Do/LoopよりFor/Nextのほうが適しています。
For/NextにかえたものがSample3です。

Sub Sample1()
  Dim total As Single
  Range("C11").Select
  Do While ActiveCell.Value <> ""
    total = total + ActiveCell.Value
    ActiveCell.Offset(0, 1).Value = total
    ActiveCell.Offset(1, 0).Select
  Loop
End Sub

Sub Sample2()
  Dim total As Double
  Dim i As Long
  i = 11 '開始行
  Do While Range("C" & i).Value <> ""
    total = total + Range("C" & i).Value
    Range("C" & i).Offset(0, 1).Value = total
    i = i + 1
  Loop
End Sub

Sub Sample3()
  Dim total As Double
  Dim i As Long
  Dim z As Long
  Range("C11").Select
  i = 11 '開始行
  z = Range("C" & Rows.Count).End(xlUp).Row  'C列のデータ最終行番号
  For i = 11 To z               '11行目からデータ最終行まで処理する
    total = total + Range("C" & i).Value
    Range("C" & i).Offset(0, 1).Value = total
  Next
End Sub
7 hits

【71488】意味がいまいち分かりません 掛橋 12/3/11(日) 12:18 質問
【71489】Re:意味がいまいち分かりません hint 12/3/11(日) 12:56 発言
【71490】Re:意味がいまいち分かりません UO3 12/3/11(日) 14:29 発言
【71491】Re:意味がいまいち分かりません UO3 12/3/11(日) 17:49 発言

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