WorksheetFunction.Sum を使用して、結果のすべての行で同じフィールドを合計しようとしていますが、そうではないようです。エラーはスローされず、何も合計されません。実際、一部の行は複数の行の結果をスローする必要があることを知っています。
これは私がやろうとしていることです:
For Each Code In BomCodes
With InventorySheet
.AutoFilterMode = False
.Range("B1").AutoFilter Field:=2, Criteria1:="Project"
.Range("D1").AutoFilter Field:=4, Criteria1:="ContractNumber"
.Range("N1").AutoFilter Field:=14, Criteria1:="Code"
.Range("Q1").AutoFilter Field:=17, Criteria1:=">0"
End With
'Do a search through the filtered inventory
Set rangeFilteredInventory = InventorySheet.Range("Q2:Q" & Cells(Rows.Count, "Q").End(xlUp).Row)
'Get the sum of all results
With InventorySheet
TotalQty = WorksheetFunction.Sum(rangeFilteredInventory.SpecialCells(xlCellTypeVisible))
If TotalQty <> 0 Then
Debug.Print TotalQty, vbNewLine, vbNewLine
End If
End With
Next Code
使わずにやってみた
Applicaiton.WorksheetFunction.Sum
、
Set rangeFilteredInventory = InventorySheet.Range("Q2:Q" & Cells(Rows.Count, "Q").End(xlUp).Row)
すべてをループしますが、If 構造にコメントを付けると、常に 0 と表示されます。
の変更
Set rangeFilteredInventory = InventorySheet.Range("Q2:Q" & Rows.Count).End(xlUp).Row
最初のレコードにもアクセスしません
また、
Set rangeFilteredInventory = InventorySheet.Range("Q" & Rows.Count).End(xlUp).Row
最初のレコードにもアクセスしません。
だから、私の考えは、範囲を間違っているということです。そのシートのすべての「Q」を合計する必要があります。
そのシートにマクロを作成すると、
With Worksheets("sbom")
.AutoFilterMode = False
.Range("B1").AutoFilter Field:=2, Criteria1:="5522970"
.Range("D1").AutoFilter Field:=4, Criteria1:="0008621302140U"
.Range("N1").AutoFilter Field:=14, Criteria1:="LVE70001372"
.Range("Q1").AutoFilter Field:=17, Criteria1:=">0"
End With
複数のレコードを返します。
間違った方法でそこに新しいものがある場合は申し訳ありません。私は VBA を初めて使用し、独学で学んでいます。
編集:
Subtotal の SUM を切り替えましたが、ループは実行されますが、TotalQty はまだ 0 です。BK201 がくれた回答の一部を使用して、いくつかの点を改善しました。
For Each Code In BomCodes
Debug.Print "Grabbed Code:", Code, vbNewLine
With InventorySheet
.AutoFilterMode = False
LRowOnQ = .Columns("Q").End(xlUp).Row
.Range("B1").AutoFilter Field:=2, Criteria1:="Project"
.Range("D1").AutoFilter Field:=4, Criteria1:="ContractNumber"
.Range("N1").AutoFilter Field:=14, Criteria1:="Code"
.Range("Q1").AutoFilter Field:=17, Criteria1:=">0"
Set rangeFilteredInventory = .Range("Q2:Q" & LRowOnQ)
End With
'Do a search through the filtered inventory
'Get the sum of all results
' With InventorySheet
TotalQty = WorksheetFunction.Subtotal(9, rangeFilteredInventory.SpecialCells(xlCellTypeVisible))
If TotalQty <> 0 Then
Debug.Print TotalQty, vbNewLine, vbNewLine
End If
Next Code