Function() statt sub() funk. nicht mit RANGE oder ARRAY
19.11.2023 11:21:51
Lir
zum ersten Mal muss ich kapitulieren und fragen.
Ich habe ein Programm geschrieben welches Schritt für Schritt eine Matrix in Zeilenstufenform bringen soll. Das funktioniert auch genau so wie es soll.
Jetzt habe ich folgendes Problem: Statt eines SUB (siehe Beispieldatei) würde ich gerne eine FUNCTION programmieren.
Bisher:
Sub Zeilenstufenform()
...
Set A = range("c4:f6")
Set B = range("c8:f10")
...
End Sub
Nachteil: Der Range ist hardcodiert - ich hätte gerne eine Funktion mit Übergabe des markierten Bereichs:
public function Zeilenstufenform(A as Range)
...
...
End Function
Das Ergebnis soll dann genau ab der markierten Zelle ("=Zeilenstufenform(Hier der markierte Bereich)" ausgegeben werden - dank der neuen Matrixfunktionen sollte das eigentlich kein Problem sein.
Problem: Egal was ich mache - er mag in der Funktion nicht mit Range oder (auch probiert) Arrays rechnen.
Selbst so etwas einfaches wie "B.Cells(k, j).Value = B.Cells(k, j).Value *2" will nicht in der FUNCTION (in SUB kein Problem) funktionieren - ohne "mal 2" gibt er zumindest wieder die Matrix aus.
An dieser Stelle muss ich einfach kapitulieren und auch euch hoffen.
Vielen Dank im Voraus
Hier noch der derzeitig Code (bin nicht sicher ob die Beispieldatei https://www.herber.de/bbs/user/164430.xlsm hochgeladen wurde - sorry):
Option Explicit
Option Base 1
Sub Zeilenstufenform()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim zaehler As Integer
Dim schritt As Byte
Dim faktor As Double
Dim A As range
Dim B As range
zaehler = 1
schritt = ActiveSheet.range("i2").Value
Set A = range("c4:f6")
Set B = range("c8:f10")
B.Value = A.Value
For i = 1 To B.Rows.Count - 1
For k = i + 1 To B.Rows.Count
If schritt = 1 Then
MsgBox zaehler & "-te Null erzeugen..."
End If
faktor = B.Cells(k, i).Value / B.Cells(i, i).Value
For j = 1 To B.Columns.Count
B.Cells(k, j).Value = Round((B.Cells(k, j).Value - faktor * B.Cells(i, j).Value) * B.Cells(i, i).Value, 4)
Next
zaehler = zaehler + 1
Next
Next
End Sub