2017-01-17 12 views
0

複雑なExcelの問題に苦しんでいます。Excelは最高の価値を持つ17のセルを見つけます。そのうちの5つは特定の行の中で最高です

私は4列と、次の値

The highest |13|12|12|12| 
The two highest|11|12|11|11| 
The two highest|12|12|12|12| 
       |12|11|11|11| 
       |12|11|11|11| 
       |12|11|11|11| 

を持つテーブルを持っている私の問題は、それぞれ2つの最高値を最高を選択するために、最初の3行から必要です。完全な行列の上には、12の値の合計があるはずです。

残りの7つの最高値が必要です。私の現在のアプローチは、必要な行の合計を行い、残りを一緒に追加することですが、それはうまく動作しません。

|13|12|12|12|[MAX(B10:E10)]13| 
|11|12|11|11|[LARGE(B11:E11;1)+LARGE(B11:E11;2)23| 
|12|12|12|12|[LARGE(B12:E12;1)+LARGE(B12:E12;2)24| 
|12|11|11|11| 
|12|11|11|11| 
|12|11|11|11| 

アイデアや提案は高く評価されます。また、参照のためのより理解可能なタイトルは素晴らしいだろう。ありがとう!

+0

は、VBAはオプションですか? – elmer007

+0

もちろんこれはオプションです –

答えて

1

説明を返します。 をそれはずさんなVBAのですが、これは動作し、あなたがそれをする必要がある場合は、構造が一般的に拡張可能です。これをVBAモジュールに貼り付け、Sum57()を実行すれば、結果はデバッグウィンドウ(Ctl + G)に表示されます。他のアレイサイズのためにこれを変更するには、変更次

  • ラインにおけるusedアレイのサイズ1
  • 配列の開始を定義する線5,6にarrRとarrCの値を
  • 関数のパターンはSum57()

の本体のコールベースパターンは、次のとおり

For i = 1 To N 
     x = x + LargeOfRange([rStart], [rEnd], [cStart], [cEnd]) 
    Next 

ここで、Nは範囲内の上位N個の最大数値です。


VBA:

Public used(5, 3) As Boolean 
Public arrR, arrC As Integer 

Public Sub Sum57() 
    arrR = 10 
    arrC = 2 
    For a = LBound(used, 1) To UBound(used, 1) 
    For b = LBound(used, 2) To UBound(used, 2) 
     used(a, b) = False 
    Next 
    Next 

    Dim x As Integer 

     x = x + LargeOfRange(10, 10, 2, 5) 
    For i = 1 To 2 
     x = x + LargeOfRange(11, 11, 2, 5) 
    Next 
    For i = 1 To 2 
     x = x + LargeOfRange(12, 12, 2, 5) 
    Next 
    For i = 1 To 7 
     x = x + LargeOfRange(10, 15, 2, 5) 
    Next 
    Debug.Print x 
End Sub 


Public Function LargeOfRange(rStart As Integer, rEnd As Integer, _ 
          cStart As Integer, cEnd As Integer) As Integer 
    On Error GoTo SkipVal 
    Dim l, x, xR, xC As Integer 
    x = 0 

    For r = rStart To rEnd 
     For c = cStart To cEnd 
      If x < Cells(r, c).Value And used(r - arrR, c - arrC) = False Then 
       xR = r 
       xC = c 
       x = Cells(r, c).Value 
      End If 
     Next 
    Next 
    used(xR - arrR, xC - arrC) = True 
    LargeOfRange = x 
Exit Function 

SkipVal: 
    LargeOfRange = 0 
End Function 
0

範囲を拡張し、Large()の計算に要素を追加するだけではどうですか?

=LARGE(B13:E15,1)+LARGE(B13:E15,2)+LARGE(B13:E15,3)+LARGE(B13:E15,4)+ 
LARGE(B13:E15,5)+LARGE(B13:E15,6)+LARGE(B13:E15,7) 

これは80

+0

残りの7つの値は、上記の他のセルからも得られるはずなので、「使用されていません」。 ソリューションは、使用されていない行のみを扱います。 解決策は84を返すはずです。上から他の12秒を使用してから11秒の一部を追加する必要があります –

関連する問題