Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1600to1604
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

VBA-in Range suche, eigene Funktion

VBA-in Range suche, eigene Funktion
22.01.2018 16:02:17
Herrmann
Hallo liebes Forum,
anbei eine Datei mit einem Versuch eine VBA-Funktion zu schreiben.
Dabei werden 2 Ranges definiert, einmal Spalte B und einmal Spalte C in Tabelle 2.
Die Funktion soll sein: =TBNr(Ort,Nr)
eingegeben werden hier als Bedingungen Werte aus Spalte A und B in Tabelle 1.
Anhand dieser 2 Bedingungen soll dann in Spalte D in Tabelle 1 der entsprechende Wert aus Tabelle 2, Spalte A hineingeschrieben werden.
Leider versuche ich das schon den ganzen Tag und komme einfach nicht weiter, da meine Eingabe im range.find(a) als leer angezeigt wird.
Datei ist angehängt.
https://www.herber.de/bbs/user/119162.xlsm
Für Hilfe bin ich sehr dankbar.
Viele Grüße
Herrmann

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-in Range suche, eigene Funktion
22.01.2018 16:55:35
Daniel
HI
da ist ne ganze menge falsch.
1. der Hautpfehler dürfte das hier sein:
Standort = a
FeldN = b

hier meinst du sicherlich:
a = Standort
b = FeldN

denn bei der Variablenzuweisung mit "=" steht die Variable, die den Wert erhalten soll links, und der Wert den sie bekommen soll rechts
allerdings brauchst du a und b nicht, du kannst Standort und FeldNr auch in der .Find-Funktion verwenden:
Set o = Worksheets("Standort-Tabelle").Range("Z2:Z8000").Find(Standort, x1values)

2. dir ist schon klar, dass du diese Function nicht in einer Formel in einer Excelzelle verwenden kannst, sondern nur als Function innerhalb eines Makros?
3. das Tabellenblatt, das du im Code verwendest, ist in der Datei nicht vorhanden.
4. die .Find-Funktion hat viele Parameter, du hast nur 2 davon im Code angegeben. Für die fehlenden Parameter werden die zuletzt gemachten Einstellungen verwendet, dh wenn der Anwender zuletzt eine ganz spezielle Sucheinstellung hatte, kann sich das auf dein suchergebnis auswirken.
Hier solltest du mehr Parameter angeben.
5. Schreibe nicht nur die Parameter hin, sondern benenne sie!.
ohne Benennung der Parameter kommt es bei der Eingabe auf die korrekte Reihenfolge an und auch Parameter, die du nicht setzen willst, müssen berücksichtigt werden.
Wenn man die Parameter bennennt, spielt die Reihenfolge keine Rolle und man hat auch so die bessere Übersicht.
bei dir steht das xlvalues an 2. Stelle, und das ist nunmal der Paramter After:= und nicht LookIn:=
daher besser:
....Find(What:=a, LookIn:=xlvalues)
Gruß Daniel
Anzeige
AW: VBA-in Range suche, eigene Funktion
23.01.2018 14:33:48
Herrmann
Hallo Daniel,
danke schonmal für die Nachricht.
Habe nun einiges umgestellt:
Public Function TPNr(Standort As String, FeldN As String) As String
Worksheets("Standort-Tabelle").Activate
Dim o As Range
Dim f As Range
Dim result As Range
Dim a As Range
Dim b As Range
Set o = Worksheets("Standort-Tabelle").Range("Z2:Z8000")
Set f = Worksheets("Standort-Tabelle").Range("AA2:AA8000")
a = o.Find(what:=Standort, LookIn:=x1values).Row
b = f.Find(what:=FeldNr, LookIn:=x1values).Row
If a.Row = b.Row Then
result = a.Row
Else
MsgBox "Kein Ergebnis"
End If
If result Is Nothing Then
MsgBox "Kein Ergebnis Gefunden"
End If
TPNr = result.Row
Fin:
End Function
Allerdings wird wenn ich in Excel dann =TPNr(Bedingung1,Bedingung2) eingebe kommt immer noch nicht die Zeile heraus.
Wie schaffe ich es, dass bei result die zugehörige Zeile hinterlegt wird, mit der ich dann weiterarbeiten kann?
Danke und viele Grüße
Herrmann
Anzeige
AW: VBA-in Range suche, eigene Funktion
23.01.2018 15:26:05
Daniel
hi
was willst du eigentlich mit der Funktion machen?
soll die in einer Zellformel verwendet werden oder innerhalb eines Makros eingesetzt werden?
kennst du überhaupt die Bedeutung der Variblentypen?
Weisst du, was eine Range-Variable ist?
so wie das aussieht, hast du keinen blassen Schimmer von dem was du da tust.
ums mal halbwegs vernünftig zu machen:

Public Function TPNr(Standort As String, FeldN As String) As Variant
Dim o As Range
Dim f As Range
Dim a As Range
Dim b As Range
Set o = Worksheets("Standort-Tabelle").Range("Z2:Z8000")
Set f = Worksheets("Standort-Tabelle").Range("AA2:AA8000")
set a = o.Find(what:=Standort, LookIn:=x1values)
Set b = f.Find(what:=FeldNr, LookIn:=x1values)
if a is nothing And b is nothing then
TPNr = "Weder Standort noch Feld gefunden"
ElseIf a is nothing then
TPNr = "Standort nicht gefunden"
ElseIf b is Nothing then
TPNr = "Feld nicht gefunden
ElseIf a.Row  b.Row Then
TPNr = "Standort und Feld gefunden, aber Zeile unterschiedlich"
Else
TPNr = a.Row
end If
If a.Row = b.Row Then
result = a.Row
End Function
jetzt kannst du das zumindest auch mal in einer Zelle einsetzen und bekommst eine Meldung, die dir genauer sagt, was Sache ist.
Gruß Daniel
Anzeige

327 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige