Office: (Office v.X. Mac) Verständnisfrage und Lösung für Namensliste (VBA)

Helfe beim Thema Verständnisfrage und Lösung für Namensliste (VBA) in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Salü zäme, ich bin neu hier und versuche mich an VBA. Grundkenntnisse sind vorhanden, dennoch stehe ich vor einem Problem, wo meine Logik im Moment... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von MarioMagnus, 8. Juli 2021.

  1. Verständnisfrage und Lösung für Namensliste (VBA)


    Salü zäme,
    ich bin neu hier und versuche mich an VBA. Grundkenntnisse sind vorhanden, dennoch stehe ich vor einem Problem, wo meine Logik im Moment aussetzt...

    Ich habe eine Namensliste auf Tabellenblatt1 und eine Vorlage für den Ausdruck auf Tabellenblatt2.
    Die Namensliste ist aufgebaut in der Form (SpalteA Vorname, SpalteB Nachname, usw.)
    Auf der Vorlage zum Ausdrucken gibt es in Zelle 1,1 ein Feld für Nachnamen und in Zelle 2,1 und 3,1 bzw. 4,1 ein Feld für die möglichen Vornamen.

    Ich nutze eine UserForm, wo der Nachname aus der ComboBox ausgewählt werden kann und dieser wird auch in die Zelle 1,1 geschrieben. Nun brauche ich eine Logik, die mir den Nachnamen checked und jeden möglichen Formnamen in die Zellen 2,1 ... einträgt.

    Also so in der Art, wenn der Nachname nur einmal vorkommt, nimm den Vornamen und trage ihn in Zelle 2,1 ein. Wenn der Nachname mehr als nur einmal vorkommt, dann trage die Vornamen in die Zellen 2,1 3,1 usw. ein.

    Wie kann ich das umsetzen.
    Danke und Gruss, Mario.
     
    MarioMagnus, 8. Juli 2021
    #1
  2. Lutz Fricke Erfahrener User
    Hallo MarioMagnus,

    nimm den Nachnamen und durchlaufe die Liste im Tabellenblatt1 bis zum Ende mit einer ForNext- oder ForEach-Schleife. Immer, wenn dein Name mit dem Namen in der Liste übereinstimmt, schreibe den Vornamen in die nächste freie Zelle in Blatt2.

    Gruß,
    Lutz
     
    Lutz Fricke, 8. Juli 2021
    #2
  3. Salü Lutz,
    danke für den Hinweis mit der ForNext Schleife...
    jetzt muss ich nur noch schauen, wie ich es in einen Codeschnipsel verpacke :)
    Gruss, Mario.
     
    MarioMagnus, 8. Juli 2021
    #3
  4. Lutz Fricke Erfahrener User

    Verständnisfrage und Lösung für Namensliste (VBA)

    Hallo Mario,

    vielleicht hilft dieser Ansatz:
    IntLetzteZeileMat = ActiveWorksheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    For IntZeileMat = 1 To IntLetzteZeileMat
    ...
    Next IntZeileMat​

    Ist ungetestet...

    Gruß,
    Lutz
     
    Lutz Fricke, 8. Juli 2021
    #4
  5. Salü Lutz,
    danke für den Ansatz, werde ich mir ansehen und testen.
    Gruss, Mario.
     
    MarioMagnus, 8. Juli 2021
    #5
  6. steve1da Office Guru
  7. Salü Steve,
    wie im anderen Forum schon geantwortet...
    Gruss, Mario.
     
    MarioMagnus, 8. Juli 2021
    #7
  8. Verständnisfrage und Lösung für Namensliste (VBA)

    Salü Lutz,
    ich versuche mein Glück, aber ich habe keine Ahnung, wie ich die gefunden Vornamen in die Zellen untereinander schreiben soll...
    ich verwende im Moment das (Asche auf mein Haupt, wenn es zu sehr nach Anfänger ausschaut):

    Dim nNames As Long
    Dim NachName As Variant

    nNames = Worksheets("Kinder").Range("B65536").End(xlUp).Row
    If nNames < 4 Then nNames = 5 'Die Nachnamen fangen erst in der 5. Zeile an
    NachName = Range("Kinder!B5:B" & nNames)

    For Each ComboBox_Familie.Value In NachName
    ... (hier fehlt mir der Ansatz, wie ich es formuliere...)
    Next ComboBox_Familie.Value

    Danke und gruss, Mario.
     
    MarioMagnus, 8. Juli 2021
    #8
  9. Exl121150 Erfahrener User
    Hallo,

    in der beiliegenden Excel-Datei habe ich dir eine kleine VBA-Funktion namens "GetVornamen(...)" eingebaut in ein allgemeines Codemodul.
    Diese Funktion greift auf die strukturierte Tabelle "TabNamen" zu.
    Sie ist eine Arrray-Funktion - deshalb im Bereich F2:F8 die geschweiften Klammern, während diese in H2:H8 nicht mehr nötig sind.

    In Zelle F1 kann ein Nachname eingegeben werden, zu dem dann im Bereich F2:F8 bzw. im Bereich H2:H8 die dazugehörigen Vornamen aufgelistet werden (je nachdem welche Version für dein Excel infrage kommt).

    Im Bereich F14:F21 bzw. H14:H21 habe ich dir 2 Formellösungen (mit Arbeitsblattfunktionen) eingefügt. Die dazugehörigen Formeln habe ich dir jeweils in brauner Farbe eingeblendet.

    Die VBA-Funktion "GetVornamen" sieht wie folgt aus:
    Code:
    Public Function GetVornamen(strNachname As String, Optional TabName As String = "TabNamen") As Variant
       Dim lstRow As ListRow, SpN As Integer, SpV As Integer
       Dim arrRet() As String, I As Integer
      
       On Error GoTo Err_GetVorname
       I = 0: arrRet(0) = "": I = -1
      
       With ActiveSheet.ListObjects(TabName)
          SpN = .ListColumns("Nachname").Index
          SpV = .ListColumns("Vorname").Index
        
          For Each lstRow In .ListRows
            With lstRow.Range
              If .Cells(SpN) = strNachname Then I = I + 1: arrRet(I) = .Cells(SpV)
            End With
          Next lstRow
        
       End With
      
       GetVornamen = WorksheetFunction.Transpose(arrRet)
       Exit Function
    
    Err_GetVorname:
       ReDim Preserve arrRet(I) As String
       Resume
      
    End Function
    
     
    Exl121150, 8. Juli 2021
    #9
  10. Salü Anton,
    danke Dir - schaue ich mir sofort an.
    Gruss, Mario.
     
    MarioMagnus, 8. Juli 2021
    #10
  11. Exl121150 Erfahrener User
    Hallo,

    einige Verbesserungen und Umgehungen von Excel-Tücken in der folgenden Dateiversion:
     
    Exl121150, 8. Juli 2021
    #11
  12. Salü Anton,

    zu meiner Schande muss ich gestehen, dass ich deine Function nicht verstehe - ich bin wohl doch zu sehr Laie.

    Ich habe Dir mal den Code hinzugefügt, den ich aktuell verwende - leider gibt er mir noch einen Fehler aus, das er die Variable nicht verwenden kann in der For Schleife...


    Code:
    Private Sub CommandButton_Druck_Click()
    
        Dim vorlageWs As Worksheet
        Dim nNames As Long, vNames As Long
        Dim NachName As Variant, VorName As Variant
        Dim saveLocation As String
        Dim x As Long
      
        Set vorlageWs = Worksheets("Vorlage")
    
        nNames = Worksheets("Kinder").Range("B65536").End(xlUp).Row
        If nNames < 5 Then nNames = 5
      
        vNames = Worksheets("Kinder").Range("A65536").End(xlUp).Row
        If vNames < 5 Then vNames = 5
    
        x = 8
        NachName = Range("Kinder!B5:B" & nNames)
        VorName = Range("Kinder!A5:A" & vNames)
    
        For Each ComboBox_Familie.Value In NachName
    
            vorlageWs.Cells(x, 6) = WorksheetFunction.XLookup(ComboBox_Familie.Value, NachName, VorName)
            x = x + 1
    
        Next ComboBox_Familie.Value
      
        vorlageWs.Cells(6, 6).Value = ComboBox_Familie.Value
        vorlageWs.Cells(3, 6).Value = ComboBox_Monat.Value
      
    '    Format(Date, "YYYY.MM")
      
        saveLocation = "/Users/.../.../.../Verrechnungen/Stundenblatt_" & vorlageWs.Cells(3, 6) & "_" & vorlageWs.Cells(6, 6)
      
        With vorlageWs.PageSetup
            .Orientation = xlPortrait
            .PrintArea = "A1:AB53"
            .Zoom = False
            .FitToPagesTall = 1
            .FitToPagesWide = 1
        End With
    
        vorlageWs.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            FileName:=saveLocation, _
            OpenAfterPublish:=True
    
        Unload Me
      
    End Sub
    Sorry wenn mein Code zu viel Unsinn enthält.
    Danke und Gruss, Mario.
     
    MarioMagnus, 8. Juli 2021
    #12
  13. Verständnisfrage und Lösung für Namensliste (VBA)

    ok, jetzt schreibt er mir endlich auch einen Namen hin, aber nur den ersten, und nicht den zweiten obwohl es zwei Vornamen gibt mit demselben Nachnamen:

    Code:
    Private Sub CommandButton_Druck_Click()
    
        Dim vorlageWs As Worksheet
        Dim nNames As Long, vNames As Long
        Dim NachName As Variant, VorName As Variant
        Dim saveLocation As String, xName As Variant
        Dim x As Long
        Dim intDaysInMonth As Integer
        Dim i As Integer
     
        Set vorlageWs = Worksheets("Vorlage")
    
        nNames = Worksheets("Kinder").Range("B65536").End(xlUp).Row
        If nNames < 5 Then nNames = 5
       
        vNames = Worksheets("Kinder").Range("A65536").End(xlUp).Row
        If vNames < 5 Then vNames = 5
    
        x = 8
        NachName = Range("Kinder!B5:B" & nNames)
        VorName = Range("Kinder!A5:A" & vNames)
    
        xName = ComboBox_Familie.Value
    
        For Each xName In NachName
    
            vorlageWs.Cells(x, 6) = WorksheetFunction.XLookup(ComboBox_Familie.Value, NachName, VorName)
            x = x + 1
    
        Next xName
       
        vorlageWs.Cells(6, 6).Value = ComboBox_Familie.Value
        vorlageWs.Cells(3, 6).Value = ComboBox_Monat.Value
       
        saveLocation = "/Users/.../.../.../Verrechnungen/Stundenblatt_" & vorlageWs.Cells(3, 6) & "_" & vorlageWs.Cells(6, 6)
       
        Application.Wait (Now + TimeValue("0:01:00"))
       
        With vorlageWs.PageSetup
            .Orientation = xlPortrait
            .PrintArea = "A1:AB53"
            .Zoom = False
            .FitToPagesTall = 1
            .FitToPagesWide = 1
        End With
    
        vorlageWs.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            FileName:=saveLocation, _
            OpenAfterPublish:=True
    
        Unload Me
       
    End Sub
    Irgendeine Idee, was ich noch anpassen muss, damit der Code mir beide Vornamen angibt?
    Danke und Gruss, Mario.
     
    MarioMagnus, 8. Juli 2021
    #13
  14. Exl121150 Erfahrener User
    Hallo,

    habe mir deinen VBA-Code angesehen - folgende Modifikationen würde ich vorschlagen:
    Code:
    Private Sub CommandButton_Druck_Click()
    
        Dim vorlageWs As Worksheet, kinderWs As Worksheet
        Dim saveLocation As String
        Dim x As Long
        Dim intDaysInMonth As Integer
        Dim i As Integer
    
        Dim NachName As Range, VorName As Range
        Dim xName As String, zelleName As Range
     
        Set vorlageWs = Worksheets("Vorlage")
        Set kinderWs = Worksheets("Kinder")
     
     
    '   Damit die folgende Anweisung funktioniert,
    '     - müssen im Bereich   A5:An   die Vornamen enthalten sein
    '     - müssen im Bereich   B5:Bn   die Nachnamen enthalten sein
    '     - muss  der Bereich   A5:Bn   von lauter Leerzellen umgeben sein
     
        Set NachName = kinderWs.Range("A5").CurrentRegion.Columns(2)
     
        x = 8
        xName = ComboBox_Familie.Value
    
        For Each zelleName In NachName.Cells
            If zelleName.Value = xName Then
               vorlageWs.Cells(x, 6).Value = zelleName.Offset(0, -1).Value
               x = x + 1
            End If
        Next zelleName
     
        vorlageWs.Cells(6, 6).Value = ComboBox_Familie.Value
        vorlageWs.Cells(3, 6).Value = ComboBox_Monat.Value
     
       '.... usw.
      '
     
    End Sub
    
     
    Zuletzt bearbeitet: 8. Juli 2021
    Exl121150, 8. Juli 2021
    #14
    1 Person gefällt das.
  15. Salü Anton,
    werde ich mir anschauen, und wollte gerade auch fragen, warum die umgebenen Zellen leer sein müssen, aber Google hat mir geholfen ".CurrentRegion" zu verstehen...

    Ich bin Dir absolut dankbar, denn das ist genau die Lösung und sie funktioniert einwandfrei!!!
    Danke und Gruss, Mario.
     
    MarioMagnus, 8. Juli 2021
    #15
Thema:

Verständnisfrage und Lösung für Namensliste (VBA)

Die Seite wird geladen...
  1. Verständnisfrage und Lösung für Namensliste (VBA) - Similar Threads - Verständnisfrage Lösung Namensliste

  2. VBA Lösung gesucht

    in Microsoft Excel Hilfe
    VBA Lösung gesucht: Guten Tag zusammen. Ich bin neu hier und auch sehr neu was VBA angeht und bin dabei zu lernen. Ich benötige für ein Projekt auf der Arbeit nun folgende Lösung. Ich möchte gerne Per Inputbox...
  3. If-Then-Else...Verständnisfrage zu Kriterium String > Zahl

    in Microsoft Access Hilfe
    If-Then-Else...Verständnisfrage zu Kriterium String > Zahl: Hallo, ich habe eine Funktion erstellt. Diese wird mit Werten gefüttert, generell Zahlen als String und "echte" Strings. Damit ich mit den Zahlen Vergleiche anstellen kann wandele ich diese mit...
  4. Schnellere Lösung als Index Vergleich gesucht um aus Zeileninfos Matrix zu bilden

    in Microsoft Excel Hilfe
    Schnellere Lösung als Index Vergleich gesucht um aus Zeileninfos Matrix zu bilden: Hallo ich habe folgenden Sachverhalt: Personaldaten und Veränderungen in Gehältern werden im Sheet 'Liste' in Listenform erfasst. Für jede Gehaltsänderung bekommt der jeweilige MA eine neue Zeile...
  5. Lösung gesucht

    in Microsoft Excel Hilfe
    Lösung gesucht: Hallo an Alle, ich versuche meine Frage zu formulieren. Als Ausgang habe ich eine Tabelle mit 3 Spalten. In der Spalte A habe ich die Artikelnummern. Diese können mehrfach enthalten sein. In...
  6. Verständnisfrage zu Access

    in Microsoft Access Hilfe
    Verständnisfrage zu Access: Hallo Community, vorab möchte ich erwähnen das ich ein Neuling im Bereich Access bin. Ich betreue eine größere Baustelle und möchte nun das erfassen des Aufmaße erleichtern. Es handelt sich um...
  7. Performance- bzw. Verständnisfrage

    in Microsoft Excel Hilfe
    Performance- bzw. Verständnisfrage: Hallo, ich habe früher mit einem ACCESS-basierten und selbst geschriebenen (nicht von mir) Warenwirtschaftssystem gearbeitet. Das größte Problem damals war, dass (wenn überhaupt) nur wenige...
  8. Verständnisfrage

    in Microsoft Excel Hilfe
    Verständnisfrage: Hallo zusammen, die Formeln ab H33 müste es da nicht "F1" und nicht "C1" heißen. Gruß Onkel22
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden