• ベストアンサー

Excel で繰り返し計算

Excel2002で繰り返し計算を行いたいのですが・・・ 以下のシートがあります。   A列   B列  C列  D列   I列       製品1 製品2 製品3 ・・・  生産量   50  80   10  生産額   1000 2400  500  単価    20  30   50 単価(生産金額/生産量)の計算をVBAで行いたいのですが、 1行ずつ指定するのではなく、繰り返し(For Next?)で 行う方法があると思うですが・・・。 (計算はI列までです) 今は1行ずつ書いています。   Range("B2") = ・・・   Range("C2") = ・・・     ・   Range("I2") = ・・・ 効率が悪いのでこれを改善できないかと・・・。 よろしくお願いします。    

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

For I = 2 To 9 Cells(2,I) = 処理内容 Next I 又は Dim RG2 As Range For Each RG2 In Range("B2:I2") RG2 = 処理内容 Next RG2

pon_s
質問者

お礼

回答ありがとうございます。 できました。 お世話になりました。

その他の回答 (2)

noname#140971
noname#140971
回答No.3

エクセルの使用・操作経験はない門外漢ですので参考程度にされて下さい。 そして、既に、回答は出尽くしていますので別の角度から・・・。 ___________製品1__製品2__製品3 生産量______50_______80________9 生産額___1000____2400_____420 単価_________20________30______46 こういう形式であれば、生産量行ないし生産額行が更新された時に単価行を書き換えるのもありかと・・・。 Const 生産量行 = 2 Const 生産額行 = 3 Const 単価行 = 4 Private Sub Worksheet_Change(ByVal Target As Range)   Dim intRow As Integer   Dim intCol As Integer   Dim 生産量 As Currency   Dim 生産額 As Currency      intRow = Target.Row   intCol = Target.Column   If (intRow = 生産額行 Or intRow = 生産量行) And intCol > 1 Then     生産量 = Me.Cells(生産量行, intCol)     生産額 = Me.Cells(生産額行, intCol)     If 生産量 <> 0 And 生産額 <> 0 Then       Me.Cells(単価行, intCol) = Rounds(生産額 / 生産量, 1)     End If   End If End Sub 上述のコードで目的は達せられます。 なお、上述のコードでは単価計算で発生した小数点以下を<切り捨て>ています。 その際に使っている Rounds関数は VBA には存在しません。 そういうことで、 Rounds関数は標準モジュールに登録する必要があります。 ' ' Rounds関数用 ' Public Const 四捨五入 = 0 Public Const 切り捨て = 1 Public Const 切り上げ = 2 Public Function Rounds(ByVal M As Currency, _             ByVal A As Integer, _             Optional D As Integer = 0) As Variant   Rounds = Sgn(M) * Fix(Abs(M) * 10 ^ D + Abs((A = 0) * 0.5@ + (A = 2) * (Int(M * 10 ^ D) <> (M * 10 ^ D)))) / 10 ^ D End Function <別の角度の意味> 一つは、単価計算ですから、 Currenncy型を使うことも考慮すべき点。 二つは、単価計算ですから、小数点以下の処理も考慮すべき点。

pon_s
質問者

お礼

回答ありがとうございます。 詳しくお教えいただき感謝いたします。 参考にさせていただきます。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

普通は、VBAではなくてセルに計算式を設定して置くと思うのですが? Sub test1() Dim col As Integer For col = 2 To 256 If Cells(2, col) <> "" Then Cells(4, col) = Cells(3, col) / Cells(2, col) Else Exit For End If Next End Sub

pon_s
質問者

お礼

回答ありがとうございます。 最初はご指摘の通り計算式を置いていたのですが、 他にもマクロを使っているので、その一連の流れで質問の計算も 行うと思ったものですから・・。 お教えいただきありがとうございました。

関連するQ&A