|
こんにちは。かみちゃん です。
>このコード私も動作させてみたのですがメモリ不足と
>出てしまいました。???
kazuoさん、申告ありがとうございます。
こちらで再度検証しましたところ、[#41865]で提示したコードにあきらかな間違い(エラーが出るはずです)と、
[#41871]のNedさんアドバイスによる改善点がありますので、再度コードを提示させていただきます。
Sub Macro2()
Dim lngRow As Long
Dim intCol As Integer
Dim vntData As Variant
Dim c As Range
Dim LastCell As Range
With Sheets("Sheet2")
ReDim vntData(1 To .Range("A65536").End(xlUp).Row - 1, _
1 To .Range("IV1").End(xlToLeft).Column - 2)
End With
Set LastCell = Range("A65536").End(xlUp) '★
For Each c In Range("A2", LastCell)
'「ロット」の位置を検索
lngRow = Application.Match(c.Value, Sheets("Sheet2").Columns(1), 0) '★
'「不良内容」の位置を検索
intCol = Application.Match(c.Offset(, 2).Value, Sheets("Sheet2").Rows(1), 0) '★
'内訳欄の計算
vntData(lngRow - 1, intCol - 2) = _
vntData(lngRow - 1, intCol - 2) + c.Offset(, 3).Value
'合計欄の計算
vntData(lngRow - 1, UBound(vntData, 2)) = _
vntData(lngRow - 1, UBound(vntData, 2)) + c.Offset(, 3).Value
Next
'集計結果を書き込む
Sheets("Sheet2").Range("C2").Resize(UBound(vntData, 1), UBound(vntData, 2)).Value = vntData
End Sub
なお、[#41860]の提示イメージのSheet2の「不良合計」より右側および最終のロットより下側に
値がないことが大前提です。
1行目およびA列の値が入っている最後の位置を探して、集計表の大きさを決めています。
あまりにも大きい表だと「メモリ不足」は起こるようですが、少なくとも提示いただいたイメージ
だけですと、動作することを確認しています。
必要であれば、確認したブック差し上げますので、ご連絡ください。
これでも駄目でしたら、配列を使わない方法を提案したいと思います。
|
|