Private Type tBlock
nr As Integer 'Aktuelle Nr des Blockes
startRowNr As Integer 'Start Zeile des Blocks
startCell As Range 'Start Zelle
endRowNr As Integer 'End Zeile
endCell As Range 'End Zelle
rng As Range 'Der Black als Range
End Type
Private Type tParams
blockSize As Integer
searchColNr As Integer
targetColNr As Integer
End Type
'/**
' * Die zu startende Methode
' * @param <Integer> Grösse des Blockes
' * @param <Integer> Spalte in welcher die Zahlenreihen stehen
' * @param <Integer> Spalte in welche die Formenln geschrieben werden
' */
Public Sub startMe( _
Optional ByVal iBlockSize As Integer = 4, _
Optional ByVal iSearchColNr As Integer = 1, _
Optional ByVal iTargetColNr As Integer = 2 _
)
Dim block As tBlock
Dim params As tParams
'Parameter übernehmen
With params
.blockSize = iBlockSize
.searchColNr = iSearchColNr
.targetColNr = iTargetColNr
End With
'Ein Block vorrücken solange Daten vorhanden sind
Do While moveBlock(block, ActiveSheet, params)
'Formel in die Zieltabelle schreiben
ActiveSheet.Cells(block.nr, params.targetColNr).Formula = "=MIN(" & block.rng.Address & ")"
Loop
End Sub
'/**
' * Verschibt den Block und gibt true/false zurück. Je nachdem ob Daten vorhanden sind oder nicht
' * @param <tBlock> Eine Referenz auf den Block. Die übergeben Variable wird somit verändert
' * @param <Worksheet> Das Worksheet auf dem das ganze abläuft
' * @param <tParams> Paramter
' * @return <Boolean> Trae/False. Aussage darüber ob der Block Daten enthält
' */
Private Function moveBlock(ByRef ioBlock As tBlock, ByVal iSh As Worksheet, ByRef iParams As tParams) As Boolean
With ioBlock
.nr = .nr + 1
.startRowNr = .endRowNr + 1
.endRowNr = .endRowNr + iParams.blockSize
Set .startCell = iSh.Cells(.startRowNr, iParams.searchColNr)
Set .endCell = iSh.Cells(.endRowNr, iParams.searchColNr)
Set .rng = iSh.Range(.startCell, .endCell)
'http://ewbi.blogs.com/develops/2006/03/determine_if_a_.html
moveBlock = (WorksheetFunction.CountBlank(.rng) <> .rng.Count)
End With
End Function