餃子を食べるとき、何をつけますか?

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") = ・・・

効率が悪いのでこれを改善できないかと・・・。
よろしくお願いします。
   

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/08 12:13

エクセルの使用・操作経験はない門外漢ですので参考程度にされて下さい。


そして、既に、回答は出尽くしていますので別の角度から・・・。

___________製品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型を使うことも考慮すべき点。
二つは、単価計算ですから、小数点以下の処理も考慮すべき点。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/08 12:19

普通は、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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/02/08 12:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報