実現したいこと
やりたい事:4パターン、8パターンシートの内容を照合し、照合結果シートのボタンで照合結果を出力したいです。
前提環境①:照合結果シートのA3~E3項目は、フォーマットとして用意されている。
条件①:4パターン、8パターンシートの行数は300行数を想定
条件②:4パターン、8パターンシートの照合キーは、部品コード
条件③:4パターン、8パターンシート毎で、以下データ集約を行った後、4パターン、8パターンシートの照合を行いたい。
●第一データ集約条件
①重複部品コードがあった場合、1つに集約する。その際、数量は加算、部品名は上書き集約
②重複しない部品コードは、数量、部品名そのまま
●第二データ集約条件
①部品コードに対して、4パターン、8パターンシートの数量を表示
②部品名は、上書き
※8パターンシート11行名の部品_Fと4パターンシート11行目の部品Fとなっているが、部品コードは同一の為、どちらかに上書きされる形にしたい。
③照合結果は以下条件のように表示させたい
完成イメージ
詳細①
詳細②
詳細③
発生している問題・エラーメッセージ
実行時エラー450 引数の数が一致していません。または不正なプロパティを指定しています。
該当のソースコード
VBA
Sub 重複データ集約し照合() Dim myDic As Object 'Dictionaryオブジェクト使用 Dim myPc As Variant '部品コード変数 Dim myQu As Variant '数量変数 Dim myPn As Variant '部品名変数 Dim myList As Variant '部品コード、数量、部品名配列 Dim i As Long '配列カウント数 Dim cWs As Worksheet '4パターンシート Set cWs = Worksheets("4パターン") '4パターン変数 Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "4パターン_仮" '4パターン_仮シート作成 Dim cWs1 As Worksheet '4パターンシートコピー Set cWs1 = Worksheets("4パターン_仮") '4パターン_仮変数 Set myDic = CreateObject("Scripting.Dictionary") '数量,部品コード,部品名のデータを配列に格納※社内外列は照合に不要だが、列分割での格納方法が分からない cWs.Activate myList = Range("A4", Range("A" & Rows.Count). _ End(xlUp)).Resize(, 4).Value '連想配列にデータを格納 1次元 For i = 1 To UBound(myList, 1) '部品コードが空欄かチェック If Not myList(i, 3) = Empty Then If Not myDic.exists(myList(i, 3)) Then '配列重複チェック '重複しない部品コードを取得※数量,部品コード,部品名を取得したいが、複数Itemの場合エラー発生 myDic.Add Key:=myList(i, 3), Item:=myList(i, 1), Item:=myList(i, 4) Else '数量を加算 myDic(myList(i, 3)) = myDic(myList(i, 3)) + Val(myList(i, 1)) End If End If Next '[部品コード] 重複していないリストを格納 myPc = myDic.keys '[部品名] 品目を格納 myPn = myDic.items '[数量] 品目コードの合計を格納 myItem = myDic.items 'リストを出力 For i = 0 To UBound(myPc) cWs1.Cells(i + 2, 1).Value = myPc(i) cWs1.Cells(i + 2, 2).Value = myPn(i) cWs1.Cells(i + 2, 3).Value = myQu(i) Next '開放※setで使用したものを閉じる(DBへのアクセス、変数) Set myDic = Nothing End Sub
試したこと
やりたい事から、以下方針でプログラムを考えたのですが、初期段階でつまづきました。
また、やりたい事が複雑であるため、道筋も見えず、お力添えをお願いします。
第一データ集約条件を目指して、4パターン、8パターンシート毎で集約処理を実施しようとしたら、
部品コード、数量、部品名の2つ以上の変数処理を行うとことでエラーが発生しました。
まだ回答がついていません
会員登録して回答してみよう