| 
    
     |  | チョット、意味が理解できない部分が有り怪しいのですけれど? 乗算の結果をE列以降に、D列の行数だけ書き込みます
 
 Public Sub TestCalc2()
 
 Dim i As Long
 Dim j As Long
 Dim lngTop As Long
 Dim lngEnd As Long
 Dim vntData As Variant
 Dim vntResult As Variant
 
 'データ先頭行
 lngTop = 4
 'データ最終行取得
 lngEnd = Cells(65536, 1).End(xlUp).Row
 '結果書き込み用配列の確保
 ReDim vntResult(1 To (lngEnd - lngTop + 1), _
 1 To (lngEnd - lngTop + 1))
 
 'データを配列に取得
 vntData = Range(Cells(lngTop, 1), Cells(lngEnd, 4)).Value
 
 '最終行まで繰り返し
 For i = 1 To lngEnd - lngTop + 1
 'D列の最終行まで繰り返し
 For j = 1 To lngEnd - lngTop + 1
 '集計用配列に計算結果を代入
 If vntData(i, 2) <> "S" Then
 'B列が"S"以外の場合
 vntResult(i, j) = vntData(i, 1) * vntData(i, 2)
 Else
 'B列が"S"の場合、D列の値に因り計算
 vntResult(i, j) = vntData(i, 1) * vntData(j, 4)
 End If
 Next j
 Next i
 
 '集計用配列をセルに書き込み
 Range(Cells(lngTop, 5), _
 Cells(lngEnd, 5 + lngEnd - lngTop)).Value = vntResult
 
 End Sub
 
 
 |  |