人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセル マクロ ポイント100以上

質問が長くなりましたので、http://d.hatena.ne.jp/esecua/20100131 を御覧下さい。


●質問者: esecua
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:エクセル ポイント マクロ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Mook
●100ポイント ベストアンサー

一応マクロを作成してみましたが、

仕様の解釈に誤りがある場合はコメントください。

(特に結果がE列ではなくF列の場合は、コメントがある行の "E" を "F" に変更ください。)


一連の商品IDは連続していることを想定しています。


Option Explicit

Sub EstimationCalc()
 Dim startRow As Long
 Dim endRow As Long
 Dim lastRow As Long
 lastRow = Range("A" & Rows.Count).End(xlUp).Row
 
 Dim avCount As Double
 Dim avSum As Double

 Dim isSold As Boolean
 Dim r As Long
 
 startRow = 2
 Do While startRow <= lastRow
 endRow = startRow
 Do While Cells(startRow, "A") = Cells(endRow + 1, "A")
 endRow = endRow + 1
 Loop
 avSum = 0
 avCount = 0
 isSold = False
 For r = startRow To endRow
 If Cells(r, "C").Value > 0 And Cells(r, "D").Value > 0 Then
 If Cells(r, "E").Value = 0 Then
 Cells(r, "E").Value = Cells(r, "D").Value / Cells(r, "C").Value
 End If
 avCount = avCount + 1
 avSum = avSum + Cells(r, "E").Value
 isSold = True
 End If
 Next
 If isSold = False Then
 Range("E" & startRow).Resize(endRow - startRow + 1, 1).Interior.ColorIndex = 3
 Else
 Range("E" & startRow).Resize(endRow - startRow + 1, 1).Interior.ColorIndex = 0
 For r = startRow To endRow
 If Cells(r, "D").Value = 0 And avCount > 0 Then
 Cells(r, "E").Value = avSum / avCount ' 結果の出力がF列なら、EをFに変更してください。
 End If
 Next
 End If
 startRow = endRow + 1
 Loop
End Sub
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ