Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Function() statt sub() funk. nicht mit RANGE oder ARRAY

Function() statt sub() funk. nicht mit RANGE oder ARRAY
19.11.2023 11:21:51
Lir
Hallo Allerseits,

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

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Function() statt sub() funk. nicht mit RANGE oder ARRAY
19.11.2023 13:52:30
Lir
Hallo Ralf,

vielen Dank für deine Antwort und potzblitz - damit hätte ich jetzt nicht gerechnet. Normalerweise liegt der Fehler bei mir. Das hier scheint dann der entscheidende Satz zu sein: "Bestimmte Arten von Anweisungen, z. B. Anweisungen, mit denen Bereiche ausgewählt und formatiert werden, sind von den benutzerdefinierten Funktionen ausgeschlossen."

Das ist jetzt aber mal so richtig doof...

Hat irgendjemand eine Idee wie man das Problem dennoch lösen kann? Das kann doch nicht sein, dass noch niemand vor mir auf diese Idee gekommen ist.

Die SUB starte ich derzeit über einen Command-Button - wie kann ich da einen Bereich übergeben?

Anderer Ansatz: Eine FUNCTION welche zwei RANGE aufnimmt und die SUB aufruft?

Irgendwie gehen mir gerade die Ideen aus und ich weiß nicht ob das prinzipiell nicht funktioniert oder ich einfach zu doof bin...

Anzeige
AW: Function() statt sub() funk. nicht mit RANGE oder ARRAY
19.11.2023 14:01:05
onur
" Eine FUNCTION welche zwei RANGE aufnimmt und die SUB aufruft? " Eine UDF darf keine anderen Zellen verändern - das gilt auch für alle Subs, die diese UDF aufruft. Sobald die UDF eine Sub aufruft, die das macht, ist es das Selbe, als ob die Funktion das versuchen würde.
AW: Function() statt sub() funk. nicht mit RANGE oder ARRAY
19.11.2023 12:33:36
onur
Bei "Excel gut" solltest du eigentlich wissen, dass eine UDF als Excelformel eingesetzt u.A. NICHT fremde Zellen verändern darf.
Dass und WIE man mit UDFs Spillfunktionen benutzen kann, siehst du bei meiner primitivern UDF namens Spill().

https://www.herber.de/bbs/user/164431.xlsm

Anzeige
AW: Function() statt sub() funk. nicht mit RANGE oder ARRAY
19.11.2023 14:42:24
Lir
Tausend mal DANKE!

Das funktioniert und ich werde gleich mal recherchieren wieso ich das nicht selber hinbekommen habe und wo mein Fehler war.

Es funktioniert also doch!

Ganz ehrlich: Ich hatte schon einige Versuche gestartet und die sahen fast genauso aus wie deine Lösung - allerdings mit Fehlermeldung.

Irgendwie geht es am Ende immer.

Meinen herzlichsten Dank und ein schönes Wochenende
Gerne !
19.11.2023 14:43:24
onur
Nimm die korrigierte Version.
AW: Function() statt sub() funk. nicht mit RANGE oder ARRAY
19.11.2023 14:28:01
Lir
Hallo Onur,

leider gibt das Auswahlfeld kein "befriedigend" oder "ausreichend" her.

Mit Excel und VBA löse ich in der Regel numerische Probleme - da habe ich auch viel Erfahrung. Auch Funktionen habe ich schon viele programmiert, allerdings ist es das erste Mal, dass ich auf ein solches Problem gestoßen bin. Bislang konnte ich jedes Problem mit nachdenken und einer Recherche lösen. Hier leider nicht. Von daher ist auch die Antwort "Geht nicht" wertvoll für mich.

Ich hoffe Du kannst mir meine (offenbar) dumme Frage verzeihen.

Dann noch etwas: VBA wird zwar schon lange nicht mehr weiterentwickelt (2007?), Excel hingegen schon (man bedenke nur die neuen Matrixformeln). Es wäre also durchaus möglich, dass sich mein Problem mit einer neuen (mir noch nicht bekannten) Funktion lösen lässt. Zudem kann ich kaum glauben, dass noch niemand vor mir so etwas gebraucht hat.

Das war jetzt ein ziemlich langer Text zu
Zitat: Bei "Excel gut" solltest du eigentlich wissen

Dann noch zu deinem Ansatz mit der Spill-Funktion: Das werde ich mir mal genau anschauen - vielen DANK!

Vielleicht hat ja noch jemand eine Idee wie man das Problem lösen kann. Ich bin in keiner Weise auf einen speziellen Ansatz angewiesen. Vielleich geht es ja auf anderem Weg viel einfacher und ich drehe mich nur im Kreis.

Vielen Dank im Voraus
Anzeige
AW: Function() statt sub() funk. nicht mit RANGE oder ARRAY
19.11.2023 14:29:32
onur
Habe dir eben eine Lösung gepostet.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige