他にも質問しているのですが、優先順位がこちらが先なのでまた質問させてください。
現在VBAで集計を行おうとしています。
合計に関しては下のコードで集計できていますが、合計ではなく加重平均を求めたいと思っています。
VBA
1コード 2Sub 集計() 3 4 5Application.ScreenUpdating = False 6Application.Calculation = xlCalculationManual 7 8 9 Call 縦軸項目設置 10 Call 横軸項目設置 11 12 13 '---変数を宣言--- 14 Dim cmax0, cmax1, cnt, x, j, k As Long 15 Dim ws0, ws1 As Worksheet 16 Dim tate, yoko, tate2, yoko2, way As String 17 Dim goukei, ross As Long 18 19 tate = Cells(4, 9) 20 yoko = Cells(5, 9) 21 way = Cells(6, 9) 22 23 24 '---ワークシートを設定--- 25 Set ws0 = Worksheets("集計画面") 26 Set ws1 = Worksheets("お試し集計") 27 28 29 '---に格納--- 30 31'準備 32 cmax0 = ws0.Cells(Rows.Count, "A").End(xlUp).Row 33 cmax1 = ws1.Cells(Rows.Count, "A").End(xlUp).Row 34 35 cnt = ws1.Range("XFD10").End(xlToLeft).Column 36 37 For k = 11 To cmax1 38 39 tate2 = ws1.Range("A" & k).Value 40 41 '---照合したい条件でデータベースを検索--- 42 For j = 0 To cnt - 4 43 goukei = 0 44 yoko2 = ws1.Range("C10").Offset(0, j + 1).Value 45 46 For x = 2 To cmax0 47 If ws0.Range(tate & x).Value = tate2 Then 48 If ws0.Range(yoko & x).Value = yoko2 Then 49 goukei = goukei + ws0.Range(way & x).Value 50 51 End If 52 End If 53 54 Next 55 56 '---Resultシートの表に出力--- 57 ws1.Range("C" & k).Offset(0, j + 1).Value = goukei 58 59 Next 60 61 Next 62 63 Application.ScreenUpdating = True 64 Application.Calculation = xlCalculationAutomatic 65 66 67End Sub 68 69
加重平均の式としては
VBA
1コード 2 3Sub ロス率計算() 4 5 '=========================================== (仕損不良数量/消費数量合計)の加重平均 6 7Dim rngN As String 8Dim rngO As String 9Dim Sh1 As Worksheet 10 11rngN = Range("N1", Cells(Rows.Count, 1).End(xlUp)).Address 12rngO = Range(rngN).Offset(, 1).Address 13Set Sh1 = ThisWorkbook.Worksheets("集計画面") 14 15With Sh1 16Range("T1").Formula = "=SUMPRODUCT(" & rngN & "," & rngO & ")/SUM(" & rngO & ")" 17End With 18 19 20End Sub 21
この式を上手く使えないかと考えていますが上手くいっていません。
やりたいこととしましては、集計したい縦軸と横軸(都道府県×製品ごとなど)を条件にして
集計画面のN列とO列を使って加重平均を求めたいです。(N列*O列/O列)
way = 20 の場合のみ計算させたいので、For x = 2 To cmax0 の前にIf式を入れるイメージです。
よろしくお願いします。
上が集計するシートで下がデータになります。
wayの値は右上の黄色で塗りつぶした部分で変動するようにしています。
データシートは省略していますが、上に書いている列にあります。赤字の部分は式が入っている部分です。
①の抽出準備を押すと、縦軸と横軸の設定が出来るので縦軸と横軸と合計値の表示が変わります。
②の計算を押すと選択した集計方法によって集計シートの数量が変わります。
データシートは都道府県順ではないです。
SUMPRODUCTとSUMを使って加重平均を計算しようとしているのは正しい方向だと思います。 しかし『上手くいっていません』だけでは何が起きているのか判らないので回答できません。 何が問題なのですか? どこで困っているのですか????
提示した式は、すべての条件での加重平均しか求められません。
やりたいこととして書いてあります通り、指定した条件内での加重平均を求めたいと思っています。
現状は全データの加重平均しか求められないのが問題です。
>指定した条件内での加重平均
う~ん。ちょっと条件がなんなのかイメージできません。
元データと結果のシート上のイメージを提示してみませんか?
画像でも文字でもいいですが。
「way = 20 の場合のみ計算させたい」と質問には書いてますが、wayの値は"way = Cells(6, 9)"で決まる。でも、wayの値が20かどうかを判断するIF文などがプログラムには含まれていません。 何がしたいのかを整理しては如何ですか? 「集計したい縦軸と横軸(都道府県×製品ごとなど)」の製品とか都道府県って何なんですか??? 使っているワークシートがどうなっているのかを示していない事に気づいていますか?
回答3件
あなたの回答
tips
プレビュー