|
▼つぐみ さん:
おはようございます
処理の方法は、もっと処理時間を少なくする工夫も含めて、いろいろあります。
コードの書き方そのものも、セルの指定の方法も含めて、様々です。
ここでは、基本的な、できるだけわかりやすいコードにしてみました。
コードにコメントを入れてありますが、わからないことがあったら質問してください。
なお、Val関数についてはヘルプで検索して読んでみてください。例も含めてわかりやすく説明されています。
コードの中で使っている Row.Count は、今動かしているエクセルのバージョンでの最大行数です。
2003なら65536、2007以降なら1048576が入っています。End関数は、シートの最終行のセルから上方向に
空白ではないセルを見つけます。
Sub Sample()
Dim myRow As Long '処理する行
Dim maxRow As Long 'データの最終行
Dim qty As Long '数量
Dim amt As Long '金額
Dim prc As Double '計算結果の単価
'データの最終行を求める定番コード
maxRow = Range("A" & Rows.Count).End(xlUp).Row
'2行目からデータ最終行まで繰り返し処理
For myRow = 2 To maxRow
qty = Val(Range("B" & myRow).Value) '念のため、セルが数値以外の場合でも無理矢理数値に変換
amt = Val(Range("D" & myRow).Value) '念のため、セルが数値以外の場合でも無理矢理数値に変換
If qty <> 0 Then '単価がゼロでないときのみ処理
prc = amt / qty
'計算結果をシート関数のROUNDを使って小数点以下2桁までで丸める。
'丸めについては、つぐみさんの要件で調整してください。
prc = WorksheetFunction.Round(prc, 2)
Range("C" & myRow).Value = prc '計算結果を転記
Else
Range("C" & myRow).Value = "計算不能"
End If
Next myRow '次の行へ繰り返し
MsgBox "計算が終了しました"
End Sub
|
|