- ベストアンサー
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") = ・・・ 効率が悪いのでこれを改善できないかと・・・。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
For I = 2 To 9 Cells(2,I) = 処理内容 Next I 又は Dim RG2 As Range For Each RG2 In Range("B2:I2") RG2 = 処理内容 Next RG2
その他の回答 (2)
エクセルの使用・操作経験はない門外漢ですので参考程度にされて下さい。 そして、既に、回答は出尽くしていますので別の角度から・・・。 ___________製品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型を使うことも考慮すべき点。 二つは、単価計算ですから、小数点以下の処理も考慮すべき点。
お礼
回答ありがとうございます。 詳しくお教えいただき感謝いたします。 参考にさせていただきます。
- hana-hana3
- ベストアンサー率31% (4940/15541)
普通は、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
お礼
回答ありがとうございます。 最初はご指摘の通り計算式を置いていたのですが、 他にもマクロを使っているので、その一連の流れで質問の計算も 行うと思ったものですから・・。 お教えいただきありがとうございました。
お礼
回答ありがとうございます。 できました。 お世話になりました。