VBA Excel-Funktion für Zell-Offset gesucht

Hallo Zusammen,

Ich habe ein VBA-Modul erstellt mit eigenen Excel Funktionen. Nun will ich mit einer solchen Funktion nicht auf den Inhalt der im Parameter angegebenen Zelle, sonder auf eine anliegende Zelle zugreifen.

Beispiel:
Public Function TestB(Wert)
TestB = Wert
End Function

Ich will jedoch nicht auf die im Parameter „Wert“ angegebene Zelle zugreifen, sondern auf eine neben dieser Zelle stehende Zelle.

Die im Excel vorhandene Funktion „OFFSET(reference;rows;cols;height;width)“ macht genau das, was ich in meiner Funktion (unter anderem) tun möchte.

Kann mir jemand weiterhelfen, wie ich diese Offset Funktion in VBA manuell programmieren kann?

Besten Dank für Eure Unterstützung
Armin

Hallo Armin,
ich bin mir nicht ganz sicher, ob ich Dich richtig verstanden habe; ich probier’s einfach mal.

Man kann auf eine andere Zelle zugreifen mit

AdresseDerAusganzgzelle.offset(Zeile,Spalte)
Wenn man also auf eine Zelle zugreifen will, die direkt rechts neben der ursprünglichen Zelle (hier z.B. D3) liegt, schreibt man

Range("D3).Offset(0,1) (man geht 0 Zeilen nach unten und 1 nach rechts).

Mit negativen Zahlen kann man nach oben und links gehen.

Hilft das weiter?
Gruß Mala

Funktioniert so noch nicht
Hallo Mala

Vielen Dank für deine Antwort.
Das ganze funktioniert jedoch noch nicht so, wie ich das gerne hätte…

Ich habe folgende Funktion in mein Excel-Modul eingefügt:

Public Function TestOffset(Wert)
TestOffset = Range(Wert).Offset(0, 1)
End Function

Wenn ich nun in die Zelle B3 reinschreibe: =TestOffset(E3)
meldet Excel einen „#VALUE“ Fehler.

Wenn ich nun ändere auf =TestOffset(„E3“), dann funktionierts: Es wird der Inhalt der Zelle F3 ausgegeben. Wobei mir dies nicht viel nützt. Ich will ja eine „richtige“ Excel Formel mit Zellbezug, welche man auch kopieren kann u.s.w.

Im Verleich dazu die Excel Funktion Offset:
=Offset(E3, 0, 1) liefert den Inhalt der Zelle F3
—> so was müsste ich haben… aber halt selber programmiert, weil ich mit den entsprechenden Werten andere Berechnungen ausführen muss.

Ich hoffe, damit wird klarer, was ich genau tun möchte.

Gruss
Armin

Hallo Armin,

wenn die Excel-Funktion „offset“ genau das ist, was Du suchst, kannst Du vielleicht einen direkten zugriff auf diese Excel-Funktion in das Modul einbauen mit:

Application.WorksheetFunction.Offset()

Gruß
Mala

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Mala

Das Einbinden der Excel-Funktionen wäre „die Lösung“ für viele Problemstellungen. Aber bis jetzt ist mir dies nicht gelungen.

Hab’s mit deinem Vorschlag probiert. Aber so funktioniert das bei mir nur mit Macros. Nicht aber mit Funktionen in einem Excel Modul…

Public Function Test2Offset(Wert, Zeile, Spalte)
Test2Offset = Application.WorksheetFunction.Offset(Wert, Zeile, Spalte)

End Function

Es erscheint die „#VALUE“ Fehlermeldung.

Vielen Dank für deine Unterstützung

Gruss
Armin

Hallo Armin,

schwierig schwierig…noch eine (Rück-)Frage:

Hast Du Kommas gesetzt? In meiner Version will er für diese Funktion Semikolons. Sonst fällt mir leider auch nix mehr ein…

Gruß Mala

Public Function Test2Offset(Wert, Zeile, Spalte)
Test2Offset = Application.WorksheetFunction.Offset(Wert,
Zeile, Spalte)

End Function

Es erscheint die „#VALUE“ Fehlermeldung.

Hallo Mala,

Hab’s mit Kommas geschrieben, genau so:
Public Function Test2Offset(Wert, Zeile, Spalte)
Test2Offset = Application.WorksheetFunction.Offset(Wert, Zeile, Spalte)
End Function

Mit Semikolons kommt bei mir ein Compiler Error…
Beim Aufufen dann natürlich mit Semikolons: =Test2Offset(J30;0;1)

Wird bestimmt noch jemand eine Lösung finden… :smile:
Gruss Armin

Hi Armin,

Das Einbinden der Excel-Funktionen wäre „die Lösung“ für viele
Problemstellungen. Aber bis jetzt ist mir dies nicht gelungen.

Offset sit scheinbar eine besondere Funktion. Du hast eine englische Excelversion. Im deutschen Excel ist deine Excel-Funktion Offset die Funktion
=Bereich.Verschieben(Zelle,Zeilen,Splaten,Höhe,Breite)
in Vba (deutsch) würde man wie es ja bei euch geschah, diese Excel-Funktion mit
x=application.worksheetfunction.offset(Zelle,Zeilen,Splaten,Höhe,Breite)
ansprechen
Ich vermuute mal dass Bereich.Verschieben noch aus Excel4Makros-Zeiten stammt und deshalb nicht als Worksheetfunction impletiert ist, denn es erscheint nicht als „Offset“ in der Liste der Worksheetfunctionen in der vBa Hilfe.
Auch in der vbaliste.xls (die es auf jedem Rechner gibt, bei dir vbalist.xls) ist Bereich.verschieben nihct zu finden. Denn nahezu alle anderen Excelfunktionen gibt es auch in Vba (Im Deutschen in der Tabelle der deutsche Name, in Vba der englische Name)
also =Summe(A1:A3) entspricht x=application.worksheetfunction.sum(range(„A1:A3“)

Nimm mal:

Option Explicit
Public Function Test2Offset(Wert As Range, Zeile As Long, Spalte As Integer)
Test2Offset = Wert.Offset(Zeile, Spalte)
End Function

Gruß
Reinhard

Union.Offset
Hi Armin,
vielleicht ist dass ja was für dich:
http://xcell05.free.fr/english/morefunc/union.offset…
Gruß
Reinhard

Lösung gefunden
Hallo Zusammen

Habe inzwischen eine gute Lösung gefunden:

Public Function NewOffset(Zelle, Zeile, Spalte)
NewOffset = Range(Zelle.Address).Offset(Zeile, Spalte)
End Function

Aufruf-Beispiel: =NewOffset(J31;1;1)

Für die gute Unterstützung danke ich allen Beteiligten recht herzlich

Viele Grüsse
Armin

*ggg die hatteste schon um 13:41 erhalten o.w.T.

Hallo Reinhard

Die Lösung von 13:41 hat bei mir leider nicht funktioniert… (#VALUE!), habe nicht rausgekriegt wiesos’ nicht getan hat.

Gruss
Armin

Die Lösung von 13:41 hat bei mir leider nicht funktioniert…
(#VALUE!), habe nicht rausgekriegt wiesos’ nicht getan hat.

Hallo Armin,

Option Explicit
Public Function Test2Offset(Wert As Range, Zeile As Long, Spalte As Integer)
Test2Offset = Wert.Offset(Zeile, Spalte)
End Function

unter Benutzung als
=Test2Offset(F5;0;2)

läuft bie mir (dt Excel2000) problemlos und holt den Wert aus H5.
Ich sehe da nichts was in einer engl. Version nicht klappen sollte *grübel*
Gruß
Reinhard

Hallo Reinhard

Hab’s jetzt zu Hause nochmals probiert:
Microsoft Excel 2000, SP3, Deutsch --> alles ok
Microsoft Excel 2003, SP2, English --> läuft auch tip top

Ich bin mir jedoch ziemlich sicher, dass es im Geschäft (Excel 2002, SP?, English) nicht funktioniert hat…

Ich werd’s morgen nochmals im Geschäft probieren. Sollte doch schon schon funktionieren!

Gruss, und vielen Dank für Deine Unterstützung
Armin

Hallo Reinhard

Lösung von 13:41 funktioniert wunderbar, auch hier mit dem Englischen Excel 2002…

Ich hatte mich mit der Anzahl Parameter vertippt.

Vielen Dank für deine Unterstützung

Gruss
Armin

Die Lösung von 13:41 hat bei mir leider nicht funktioniert…
(#VALUE!), habe nicht rausgekriegt wiesos’ nicht getan hat.