Freigeben über

Index - Vergleich - WennNV in Vba

Anonym
2022-10-07T10:21:49+00:00

Hallo Liebe Community,

Ich komme an meine Wissensgrenze und würde mich tierisch über Hilfe freuen!

in a Nutshell: Ich möchte folgende Formel die ich ohne VBA nutze: [=WENNNV(INDEX(Datenbank!K:K;VERGLEICH(Kurzzeitnutzung!B2;Datenbank!D:D;0));"")]

in VBA einfügen.

Ich habe eine Userform erstellt, indem man Daten in Textboxen schreiben kann. Mit einem Commandbutton schreiben sich die daten dann in das Sheet Kurzzeitnutzung.

auf Basis der Daten die aus einer der Textboxen in die Spalte "B" im Tabellenblatt "Kurzzeitnutzung" geschrieben werden, sollen weitere Spalten mit einem Index-Vergleich immer aus Spalte "D" TabellenBlatt "Datenbank" die Ergebnisse aus Spalte "K" aus dem Tabellenblatt "Datenbank" befüllt werden. WennNV soll "Keine Daten" eingefügt werden.

Die Daten werden beim Hinzufügen immer in die letzte Zeile geschrieben. Daher weiß ich auch nicht wie ich die Formel umschreiben muss, weil der Wert in Spalte "B" in der Zeile variiert. Aktuell habe ich das so gelöst das ich die Zeilen im Tabellenblatt bis weit unten mit der Formel befüllt habe und die WennNV mit "" angegeben habe umgangen. Das ist aber kein Zustand.

Hier der code des Commandbuttons Hinzufügen:

____________________________________________________

Private Sub CommandButtonHinzufügen_Click()

Dim sh As Worksheet

Set sh = ThisWorkbook.Sheets("Kurzzeitnutzung")

Set dh = ThisWorkbook.Sheets("Datenbank")

Dim last_row As Long

Dim z As Long, s As Integer

last_row = Application.WorksheetFunction.CountA(sh.Range("A:A"))

sh.Range("A" & last_row + 1).Value = "=row() -1"

sh.Range("B" & last_row + 1).Value = Me.TextBoxzeichenanlegen.Value

sh.Range("I" & last_row + 1).Value = Me.ComboBoxFunk.Value

sh.Range("J" & last_row + 1).Value = Me.TextBoxEinganganlegen.Value

sh.Range("K" & last_row + 1).Value = Me.ComboBoxStatus.Value

sh.Range("M" & last_row + 1).Value = Me.ComboBoxDL.Value

sh.Range("N" & last_row + 1).Value = Me.TextBoxabgegebenanlegen.Value

sh.Range("O" & last_row + 1).Value = Me.TextBoxabgeholtanlegen.Value

sh.Range("L" & last_row + 1).Value = Me.TextBoxinfoanlegen.Value

sh.Range("P" & last_row + 1).Value = Now

sh.Range("Q" & last_row + 1).Value = Me.TextBoxauftrag

End sub

____________________________________________________

ich möchte hier sh.Range("G" & last_row +1).Value = =WENNNV(INDEX(Datenbank!K:K;VERGLEICH(Kurzzeitnutzung!B2;Datenbank!D:D;0));"")

Vielleicht irgendwie so?

sh.Range("G" & last_row + 1).Value = Application.WorksheetFunction.Index(dh.Range("K:K", Match(Max(Me.TextBoxKennzeichenanlegen.Value, dh.Range("D:D", 0)))))

P.S Die Spalte "A" wird mit einer Fortlaufenden Zahl versehen, die später als IDZähler fungiert um die Zeilendaten in einer Listbox anzuzeigen.

Die Listbox matcht nach der IDZahl. Die Textboxen werden nach Doppelklick in der Listbox auch wieder mit den Werten Befüllt um sie später nochmal zu bearbeiten.

Hilfe oder Codevorschläge würde mir wirklich sehr sehr weiter helfen!

Danke Vorab und schöne Grüße

Excel_Geoff

Microsoft 365 und Office | Excel | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare
{count} Stimmen
Antwort, die vom Frageautor angenommen wurde
  1. Anonym
    2022-10-07T10:52:17+00:00

    Hallo Geoff,

    probiere es mal mit:

    sh.Range("G" & last_row +1).Formula="=IFNA(INDEX(Datenbank!K:K,MATCH(Kurzzeitnutzung!B2,Datenbank!D:D,0)),"""")"

    Wenn du Werte einfügen willst, musst du das Ganze dann zu Werten wandeln:

    With sh.Range("G" & last_row + 1)

         .Formula="=IFNA(INDEX(Datenbank!K:K,MATCH(Kurzzeitnutzung!B2,Datenbank!D:D,0)),"""")"
    
         .value=.value
    

    end with

    Claus

    Eine Person fand diese Antwort hilfreich.
    0 Kommentare Keine Kommentare

2 zusätzliche Antworten

Sortieren nach: Am hilfreichsten
  1. Anonym
    2022-10-07T11:09:11+00:00

    Hallo Claus,

    das bringt mich schon ein stück weiter! Leider ändert sich der Wert wonach gematcht werden soll.

    Er wird immer in die letzte freie Zeile in Spalte "b" "Kurzzeitnutzung" aus der Textbox Me.TextBoxzeichenanlegen.Value

    Hast du eine Idee wie man das realisieren könnte?

    P.S das Problem habe ich umgangen indem ich den Wert der Textbox zusäzlich in eine feste Zelle schreiben lassen

    und entsprechen die Formel auf die feste Zelle verweise, sowie feste werte geschrieben werden. Denke das ist auch okay.

    Großes Danke!

    0 Kommentare Keine Kommentare
  2. Anonym
    2022-10-07T13:09:09+00:00

    Hallo Geoff,

    ich hoffe ich habe dich richtig verstanden.

    sh.Range("G" & last_row +1).Formula="=IFNA(INDEX(Datenbank!K:K,MATCH(Kurzzeitnutzung!B$" & Me.TextBoxzeichenanlegen.Value _ & ",Datenbank!D:D,0)),"""")"

    Claus

    0 Kommentare Keine Kommentare