VBAで次のSUMPRODUCT
式を使用したい:
=SUMPRODUCT((Sale!$J$5:$J$1048576=C12)*Sale!$D$5:$D$1048576,Sale!$M$5:$M$1048576)
このコードを使用しましたが、エラーが発生します
実行時エラー「13」:タイプの不一致
Dim slWks As Worksheet
Set slWks = Sheets("Sale")
ActiveSheet.Range("F12").Value = _
Application.WorksheetFunction.SumProduct((slWks.Range("J5:J1048576") = _
ActiveSheet.Range("C12")) * slWks.Range("D5:D1048576"), slWks.Range("M5:M1048576"))
Vbaを使用してその値を使用してその式を作成するにはどうすればよいですか?
ワークシート関数メソッドが、使用しているサイズの配列では機能しない場合、2つの可能な簡単な解決策があります。
まず、数式を追加してから、その値に置き換えます
With activesheet.Range("F12")
.Formula =" =SUMPRODUCT((Sale!$J$5:$J$1048576=C12)*Sale!$D$5:$D$1048576,Sale!$M$5:$M$1048576)"
.Value2 = .Value2
End With
次に、Evaluate
を使用します。
With Activesheet
.range("F12").Value2 = .Evaluate("SUMPRODUCT((Sale!$J$5:$J$1048576=C12)*Sale!$D$5:$D$1048576,Sale!$M$5:$M$1048576)")
End With
ユースケースを推測する:
C12
はあなたが興味を持っているいくつかの製品ですSale!$J$5:$J$1048576
はさまざまな製品です(Sale!$J$5:$J$1048576=C12)
は{1,1,1,0,0,0...}
のような配列を提供しますSale!$D$5:$D$1048576
は単価の範囲ですSale!$M$5:$M$1048576
は販売台数の範囲ですSUMPRODUCT
は、C12
の製品の収益を示しますしたがって、このサンプルデータの場合:
このコードを使用して、SUMPRODUCT
を活用できます。
Option Explicit
Sub SumProductWithVBA()
Dim ws As Worksheet
Dim strProduct As String
Dim dblRevenue As Double
Dim wsf As WorksheetFunction
Dim v1 As Variant, v2 As Variant, v3 As Variant, v4 As Variant
Dim i As Long
Set wsf = Application.WorksheetFunction
Set ws = ThisWorkbook.Worksheets("Sheet1")
' condition for SUMPRODUCT
strProduct = ws.Range("A1").Value
' get the values of the ranges
v1 = wsf.Transpose(ws.Range("A4:A15").Value)
v2 = wsf.Transpose(ws.Range("B4:B15").Value)
v3 = wsf.Transpose(ws.Range("C4:C15").Value)
' make the array like {1,1,1,0,0,0...etc}
' this is the equivalent of the SUMPRODUCT((range=value)... bit
ReDim v4(1 To UBound(v1))
For i = 1 To UBound(v1)
If v1(i) = strProduct Then
v4(i) = 1
Else
v4(i) = 0
End If
Next i
' now do the SUMPRODUCT with all the arrays set-up
dblRevenue = wsf.SumProduct(v4, v2, v3)
' test the output
MsgBox dblRevenue
End Sub
私はsumproduct関数で同じ問題を抱えていて、多くの実験の後、このコードで問題を解決しました。
Sub Test2()
Dim WS As Worksheet
Dim a, b, c, Criteria As Range
Dim data1, data2, data3, crite As String
Dim LasTRow As Long
Set WS = ThisWorkbook.Sheets("Sale")
LasTRow = WS.Cells(Rows.Count, 1).End(xlUp).Row
Set a = WS.Range("A5:A" & LasTRow)
Set b = WS.Range("b5:b" & LasTRow)
Set c = WS.Range("c5:c" & LasTRow)
Set Criteria = WS.Range("A1")
data1 = a.Address
data2 = b.Address
data3 = c.Address
crite = Criteria.Address
WS.Range("b1").Formula = "=sumproduct((" & data1 & " = " & crite & ") *( " & data2 & " ) * ( " & data3 & " ))"
End Sub