実現したいこと
転記元表から転記先表へ以下条件をもとに計算し記入するVBAを作成したくご協力のほどよろしくお願いします。
<詳細>
転記先Noと合致する転記元表Noを以下条件のもと集約し計算して記入
例1.青木さん(V列)の場合、No1.A×12=2点×12=24点、記入結果(平均値)=24点/12行=2点、
よって転記先セル(E7)へAと記入※条件2より
例2.井川さん(W列)の場合、No2.A×1+B×1+C×1=2点+1点+0.5点=3.5点、記入結果(平均値)
=3.5点/3行=1.2(1.166..)点、よって転記先セル(F8)へBと記入
<条件>
1.ランクと点数の関係
A:2点
B:1点
C:0.5点
空白:0点
2.ランク算出式
2点以上はA
1点以上2点未満はB
0.5点以上1点未満はC
0点以上0.5点未満は空白
3.空白は0点としてカウント
4.作業者、Noとも場所は固定になります。
●対象excelの配置
●転記先
●転記元_1
●転記元_2
●転記元_3
発生している問題・エラーメッセージ
思考錯誤しながら現コードにたどりついたのですが、以下壁にあたりました。
①該当Noを集約した計算が出来ませんでした。
②作業者、Noの組み合わせ数が多いため、私のやり方だと処理に時間がかかると考えた為、処理スピードもあげる方法も教えていただきたいです。
該当のソースコード
VBA
1Sub 作業者能力計算() 2Dim TF As Workbook 'VBA搭載ファイル宣言 3Set TF = ThisWorkbook 'VBA搭載ファイル格納 4 5Dim i As Long '転記元項番カウント 6Dim j As Long '転記先項番カウント 7Dim k As Long '転記元作業者カウント 8Dim l As Long '転記先作業者カウント 9Dim m As Long '平均値の分母 10Dim total As Double '転記元合計 11Dim hantei As Double '判定 12total = 0 13hantei = 0 14 15For k = 22 To 33 16 For l = 5 To 16 17 For i = 7 To 64 18 For j = 7 To 15 19 m = m + 1 20 If Cells(i, 2) = Cells(j, 19) Then '転記元と転記先の項番照合 21 If Cells(i, k) = "A" Then 22 hantei = 2 23 ElseIf Cells(i, k) = "B" Then 24 hantei = 1 25 ElseIf Cells(i, k) = "C" Then 26 hantei = 0.5 27 ElseIf Cells(i, k) = "" Then 28 hantei = 0 29 End If 30 total = hantei + total 31 total = total / m 32 If total >= 2 Then 33 Cells(j, l) = "A" 34 ElseIf total < 2 And total >= 1 Then 35 Cells(j, l) = "B" 36 ElseIf total < 1 And total >= 0.5 Then 37 Cells(j, l) = "C" 38 ElseIf total < 0.5 And total >= 0 Then 39 Cells(j, l) = "" 40 End If 41 End If 42 Next j 43 total = 0 44 hantei = 0 45 Next i 46 Next l 47Next k 48

回答2件
あなたの回答
tips
プレビュー