|    | 
     ▼掛橋 さん: 
 
ご参考までに。 
 
まず、アップされたコードはすべて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 
 | 
     
    
   |