Eine oder mehrere Spalten aus einer Matrix entfernen

 

Bei den folgenden Aufgaben geht es darum, aus einer Matrix, also einem zweidimensionalen Array, eine oder mehrere Spalten 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 Spalte löschen

 

Die Funktion soll die Kopfzeile

 

Public Function deleteColumn(ByRef m() as Double, ByVal colno As Integer) as Double()

 

haben und eine Matrix liefern, welche alle Spalten der Matrix m enthält außer der Spalte colno.

 

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 deleteColumn wird folgendermaßen aus einer Prozedur heraus aufgerufen:

Dim r() as Double

r = deleteColumn(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 Spalte vermindert sein.

 

Hinweis: Weil deleteColumn 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 Spalten löschen

 

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

 

Public Function deleteColumns(ByRef m() as Double, ByRef c() as Integer) As Double()

 

Das Array c enthält dabei die Nummern der zu löschenden Spalten. 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 deleteColumn aufrufen.

 

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

 

 

 

 

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

 

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

 

Public Function deleteColumnsUDF (ByVal rng as Range, ParamArray c() 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 Spalten 2 und 3 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.