2016-04-14 9 views
0

データは行と列にまたがって広がっています。最高の値を持つ12個のセルの範囲を探したいと思います。隣同士は左から右を意味し、次に次の行から始める。すなわちA5, B5, ..., L5, A6, B6, ...範囲内の最高12個の連続値を見つける

data

私はすべての可能な範囲、すなわちA5:L5, B5:A6...合計を指定し、比較するが、これは物事を行くのは非常に効率的な方法のように見えるしていませんでした。

これはどうすればよいですか?

+0

権利ではない場合、私に教えてください? – MikeD

+0

左から右 - 上から下 - 私は、うまくいけば、より明快に質問を編集しました –

答えて

1

これを試してください。範囲を強調表示するだけで、メッセージボックスは12の整数配列の開始位置を返します。

Sub test() 

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 

    Dim rng As Range 

    Dim FC As Integer 
    Dim LC As Integer 
    Dim FR As Integer 
    Dim LR As Integer 

    Dim r As Integer 
    Dim c As Integer 
    Dim i As Integer 
    Dim j As Integer 
    Dim k As Integer 
    Dim max As Integer 
    Dim maxI As Integer 
    Dim maxCol As Integer 
    Dim maxRow As Integer 

    Dim intArray() As Integer 

    Set rng = Selection 

    FC = rng.Column 
    FR = rng.Row 
    LC = FC + rng.Columns.Count - 1 
    LR = FR + rng.Rows.Count - 1 

    ReDim intArray(1 To (LC * LR)) 

    i = 1 

    For r = FR To LR 
     For c = FC To LC 
     intArray(i) = Cells(r, c) 
     i = i + 1 
     Next c 
    Next r 

    max = 0 

    For i = 1 To (UBound(intArray) - 11) 
     k = 0 
     k = intArray(i) 
     For j = 1 To 11 
      k = k + intArray(i + j) 
     Next j 
     If k > max Then 
      max = k 
      maxI = i 
     End If 
    Next i 

    maxCol = maxI Mod (rng.Columns.Count) 
    maxRow = ((maxI - maxCol)/rng.Columns.Count) + 1 

    MsgBox ("Max array begins in row " & maxRow & " column " & maxCol) 


Application.ScreenUpdating = True 
Application.Calculation = xlCalculationAutomatic 

End Sub 

本当に「シーケンス読んで上から下へ - - 左から右に」意味「隣同士に」これがそう

+0

大きな配列を実行する予定がある場合は、すべての整数参照をlongに変更する必要があります。 – jcarroll

+0

完璧 - ありがとう –

関連する問題