dポイントプレゼントキャンペーン実施中!

F2からF1201にある値を、条件を幾つか指定して
(J7→F2:F1201の値で、100以上4000以下のもの、
K7→F2:F1201のうち、同じ行のD列の値が1、G列の値が1で、100以上4000以下のもの、
L7→F2:F1201のうち、同じ行のD列の値が2、G列の値が1で、100以上4000以下のもの...以下省略)
平均しようと、以下に挙げるコードを書いてみたのですが「構文エラー」と出てうまくいきません。
どなたかどこを変更したらいいかご教示頂けないでしょうか。


Sub test()

Sheets(1).Range("J7").Value = "=AVERAGEIFS(F2:F1201, F2:F1201, " >= 100" F2:F1201,"<=4000")”
Sheets(1).Range("K7").Value ="=AVERAGEIFS(F2:F1201, D2:D1201, 1, G2:G1201,1,F2:F1201, ">=100", F2:F1201, "<=4000")”
Sheets(1).Range("L7").Value ="=AVERAGEIFS(F2:F1201, D2:D1201, 2,G2:G1201,1, F2:F1201, ">=100", F2:F1201, "<=4000")”
Sheets(1).Range(“M7”).Value ="=AVERAGEIFS(F2:F1201, D2:D1201, 1,G2:G1201,2, F2:F1201, ">=100", F2:F1201, "<=4000")”
Sheets(1).Range(“N7”).Value ="=AVERAGEIFS(F2:F1201, D2:D1201, 2,G2:G1201,2, F2:F1201, ">=100", F2:F1201, "<=4000")”
Sheets(1).Range(“O7”).Value =“=AVERAGEIFS(F2:F1201, D2:D1201, 0,G2:G1201,1, F2:F1201, ">=100", F2:F1201, "<=4000")”
Sheets(1).Range("P7").Value = "=AVERAGEIFS(F2:F1201, D2:D1201, 0,G2:G1201,2, F2:F1201, ">=100", F2:F1201, "<=4000")”


End Sub

A 回答 (4件)

なぜ、こんなふうに書くかというと、VBEditorのコンパイルの設定の仕方によっては、たいへんに重くなることがあります。

だから、本来は、数式は、分解していれるようにしたほうがよいのです。ただ、常にこのような書き方は出来ないかもしれません。そういう場合は、数式を一旦、
Debug.Print 数式
で出力してやって、その中身を確認するとよいです。
それと、うまく行ったものを元の数式と対比してサンプルとして残しておきます。

数式
=AVERAGEIFS(F2:F1201, D2:D1201, 1, G2:G1201, 1,F2:F1201, ">=100", F2:F1201, "<=4000")

マクロの数式(数式の中の" ->"" と増えています。)
"=AVERAGEIFS(F2:F1201, D2:D1201, 1, G2:G1201,1,F2:F1201, "">=100"", F2:F1201, ""<=4000"")"

数式の中で、空白部分が誤認識することがありますから、コードの余分な空白は注意してください。

コンパクト化した数式
'//
Sub TestLoop()
Dim a, b
Dim i As Long
a = Array(, 1, 2, 1, 2, 0, 0)
b = Array(, 1, 1, 2, 2, 1, 2)
With Worksheets(1)
For i = 0 To 5
  If i = 0 Then
  Cells(7, 10 + i).FormulaLocal = "=AVERAGEIFS(F2:F1201,F2:F1201, " & _
      """>=100"",F2:F1201,""<=4000"")"
  Else
  Cells(7, 10 + i).FormulaLocal = _
    "=AVERAGEIFS(F2:F1201,D2:D20," & a(i) & _
    ",G2:G20," & b(i) & ",F2:F1201,"">=100"",F2:F1201,""<=4000"")"
 End If
Next
End With
End Sub
    • good
    • 0

念の為ですが、気づいていたら無視してください。


式の最後の「”」は「"」にしてくださいね。
    • good
    • 1

たとえば「"=AVERAGEIFS(F2:F1201, F2:F1201, " >= 100" F2:F1201,"<=4000")”」は「"=AVERAGEIFS(F2:F1201,F2:F1201,"">=100"",F2:F1201,""<=4000"")"」のように直してください。

    • good
    • 1

式の代入ならば「.Value」ではなく「.Formula」です。

    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。.Formulaに直してみたところ今度は平均する値を選択する条件の1つ目と2つ目の間の クオーテーションマーク、カンマ、クオーテーションマークと3つ並んでいる 部分にエラーが出ます。この部分はどうしたらよいのでしょうか。

お礼日時:2016/11/18 11:57

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