データは行と列にまたがって広がっています。最高の値を持つ12個のセルの範囲を探したいと思います。隣同士は左から右を意味し、次に次の行から始める。すなわちA5, B5, ..., L5, A6, B6, ...
範囲内の最高12個の連続値を見つける
私はすべての可能な範囲、すなわちA5:L5, B5:A6...
合計を指定し、比較するが、これは物事を行くのは非常に効率的な方法のように見えるしていませんでした。
これはどうすればよいですか?
データは行と列にまたがって広がっています。最高の値を持つ12個のセルの範囲を探したいと思います。隣同士は左から右を意味し、次に次の行から始める。すなわちA5, B5, ..., L5, A6, B6, ...
範囲内の最高12個の連続値を見つける
私はすべての可能な範囲、すなわちA5:L5, B5:A6...
合計を指定し、比較するが、これは物事を行くのは非常に効率的な方法のように見えるしていませんでした。
これはどうすればよいですか?
これを試してください。範囲を強調表示するだけで、メッセージボックスは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
本当に「シーケンス読んで上から下へ - - 左から右に」意味「隣同士に」これがそう
大きな配列を実行する予定がある場合は、すべての整数参照をlongに変更する必要があります。 – jcarroll
完璧 - ありがとう –
権利ではない場合、私に教えてください? – MikeD
左から右 - 上から下 - 私は、うまくいけば、より明快に質問を編集しました –