Eine oder mehrere Zeilen aus einer Matrix entfernen

 

Bei den folgenden Aufgaben geht es darum, aus einer Matrix, also einem zweidimensionalen Array, eine oder mehrere Zeilen zu löschen. Alle Aufgaben sollen mit Funktionen gelöst werden.

 

Verwenden Sie für Arrays, die Sie in diesen Funktionen verwenden, stets die Indexuntergrenze 1. Liefert eine der Funktionen ein Array, so sollte dieses auch für alle Dimensionen die Index­unter­grenze 1 haben. Datentyp für die Elemente der Matrizen soll Double sein.

 

 

 

Aufgabe 1: aus einer Matrix eine Zeile löschen

 

Die Funktion soll die Kopfzeile

 

Public Function deleteRow (ByRef m() as Double, ByVal rowno As Integer) as Double()

 

haben und eine Matrix liefern, welche alle Zeilen der Matrix m enthält außer der Zeile rowno.

 

Beachten Sie dass diese, wie auch alle anderen Funktionen, die Sie im Rahmen dieser Aufgaben programmieren, ohne Nebeneffekte sein soll. Hier bedeutet dies konkret, dass die Originalmatrix, welche der Funktion beim Aufruf übergeben wird, an der aufrufenden Stelle nach der Ausführung der Funktion unverändert sein muss.  Angenommen, die Funktion deleteRow wird folgendermaßen aus einer Prozedur heraus aufgerufen:

Dim r() as Double

r = deleteRpw(a, 3)

Nach Ausführung des Aufrufs ist die Matrix a unverändert, lediglich die Matrix r sollte gegenüber der Matrix a um die dritte Zeile vermindert sein.

 

Hinweis: Weil deleteRow ein Double-Array als Parameter hat, ist sie nicht als benutzerdefinierte Funktion (UDF) zugelassen. Sie müssen also, um diese Funktion zu testen, eine kleine Prozedur schreiben.

 

 

 

 

Aufgabe 2: aus einer Matrix mehrere Zeilen löschen

 

Wir wollen dabei stillschweigend voraussetzen, dass die Matrix mindestens eine Zeile mehr hat als die Anzahl der zu löschenden Zeilen beträgt. Das Ergebnis der Funktion ist also eine Matrix mit mindestens einer Zeile. Verwenden Sie die folgende Kopfzeile:

 

Public Function deleteRows (ByRef m() as Double, ByRef r() as Integer) As Double()

 

Das Array renthält dabei die Nummern der zu löschenden Zeilen. Wenden Sie bei der Programmierung das Prinzip der Delegation an, indem Sie aus der Funktion heraus die bereits im Rahmen von Aufgabe 1 programmierte Funktion deleteRow aufrufen.

 

Schreiben Sie eine kleine Prozedur, um die Funktion zu testen.

 

 

 

 

Aufgabe 3: mehrere Zeilen löschen mit benutzerdefinierter Funktion (UDF).

 

Schreiben Sie nun eine Funktion, welche mehrere Zeilen löscht und auch von einem Arbeitsblatt aus eingesetzt werden kann, also eine benutzerdefinierte Funktion.  Die Kopfzeile dieser Funktion soll lauten:

 

Public Function deleteRowsUDF  (ByVal  rng as Range, ParamArray r() as Variant) As Double()

 

Wenden Sie beim Programmieren der Funktion die Einwickeltechnik an und verwerten Sie auf diese Weise die Lösung aus Aufgabe 2.

 

Das folgende Bild zeigt ein Anwendungsbeispiel für die Funktion. Aus der Originalmatrix (links) werden die Zeilen 3 und 4 gelöscht. Vergessen Sie nicht, beim Testen mit dem Funktionsassistenten die Tastenkombination <Strg> + <^> zu drücken, wenn Sie nach der Eingabe der Parameter die Eingabetasten drücken.