Office: (Office 2016) Makro für variable Anzahl von Datensätzen

Helfe beim Thema Makro für variable Anzahl von Datensätzen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ich habe wieder einmal ein kleines Excel-Problem, bei dem Ihr mir sicherlich helfen könnt. Ich habe eine Excel-Liste, das ist ein... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von msdd79, 9. April 2024.

  1. msdd79 Erfahrener User

    Makro für variable Anzahl von Datensätzen


    Hallo zusammen,

    ich habe wieder einmal ein kleines Excel-Problem, bei dem Ihr mir sicherlich helfen könnt.

    Ich habe eine Excel-Liste, das ist ein Export aus einem anderen Programm (siehe Beispiel). Diese Liste enthält eine variable Anzahl von Datensätzen.

    In diese Liste sollen nun mit Hilfe eines Makros und dem SVERWEIS (in die Spalten I und P) Daten aus einem anderen Tabellenblatt zugeordnet werden. Soweit so gut.

    Da die Tabelle aber immer eine andere Anzahl an Datensätzen hat, möchte ich nun, dass das Makro immer bis zum Ende der Tabelle geht.


    Gibt es eine Möglichkeit über eine Abfrage dem Makro mitzuteilen, wie weit er die Formeln runterkopieren soll?

    Also man startet das Makro, dann kommt ein Fenster „Wie viele Datensätze hat der Export?“ … nun gibt man 62 an (für das aktuelle Beispiel) und der schreibt die Formeln in die Zellen I8:I70 und P8:P70.

    Alternativ könnte man dem Makro ohne Abfrage sagen: schreibe die Formel von I8 bis zur letzten Zellen mit Umrandung?

    Vielen Dank schon einmal im Voraus.
    Micha
     
    msdd79, 9. April 2024
    #1
  2. Beverly
    Beverly Erfahrener User
    Hi Micha,

    weshalb schreibst du deine SVERWEIS-Formel nicht einfach so, dass sie nur dann die Werte ausgibt, wenn ich Spalte S tatsächlich Werte vorhanden sind? In I8 =WENNFEHLER(SVERWEIS(S8;T:U;2;);"") und P8 =WENNFEHLER(SVERWEIS(S8;T:V;3;);"")


    Makro für variable Anzahl von Datensätzen GrußformelMakro für variable Anzahl von Datensätzen Beverly's Excel - Inn
     
    Beverly, 9. April 2024
    #2
  3. msdd79 Erfahrener User
    Hallo Karin,

    die Idee hatte ich auch schon, nur wenn ich das über ein Makro laufen lassen und das Makro bis zu Zeile 100 laufen lasse (da ich die Höchstzahl der Datensätze nicht kenne), gibt es in der Spalte I Probleme ab Zeile 80, da dort das Makro auf verbundene Zellen trifft. In der Spalte P die selben Probleme ab Zeile 74.

    Ich hatte vorhin eine Datei ohne Makro angefügt, die jetzt ist mit Makro (hatte vorhin die falsche Datei gewählt).

    Range("I8").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[10],C[11]:C[13],2,)"
    Range("I8").Select
    Selection.Copy
    Range("I9:I70").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

    Ist es möglich in "I70" durch einen variablen Wert zu ersetzen?

    Viele Grüße
    Micha
     
    msdd79, 9. April 2024
    #3
  4. Beverly
    Beverly Erfahrener User

    Makro für variable Anzahl von Datensätzen

    Hi Micha,

    wie sieht denn deine Tabelle aus, wenn mehr Daten als bis Zeile 70 vorhanden sind - schieben sich deine verbundenen Zellen dann nach unten oder bleiben sie stehts im Bereich der Zeilen 74 bis 79 und die Tabelle geht unterhalb weiter?


    Makro für variable Anzahl von Datensätzen GrußformelMakro für variable Anzahl von Datensätzen Beverly's Excel - Inn
     
    Beverly, 9. April 2024
    #4
  5. msdd79 Erfahrener User
    Nein, dass was unter der Tabelle steht (also momentan Zeile 72 bis 79) steht immer am Ende. Bedeutet, wenn die Tabelle bis Zeile 80 geht, wären die verbundenen Zellen dann in der Zeile 82 bis 89. Wenn die Tabelle nur bis Zeile 60 geht, dann sind die verbundenen Zellen schon in Zeile 62 bis 69 usw.
     
    msdd79, 9. April 2024
    #5
  6. Beverly
    Beverly Erfahrener User
    Der Begriff "Summe" steht anscheinend immer in Spalte B 2 Zeilen unterhalb der letzten Daten-Zeile - folglich kann man diesen Begriff suchen, 2 Zeilen nach oben gehen und schon hat man die letzte Zeile bis zu welcher die Daten gehen:

    Code:
    Sub FormelnEintragen()
        Dim rngSumme As Range
        Set rngSumme = Columns(2).Find("Summe", lookat:=xlWhole)
        If Not rngSumme Is Nothing Then
            Range("I8").Formula = "=VLOOKUP(S8,T:V,2,)"
            Range("I8").AutoFill Destination:=Range(Cells(8, 9), Cells(rngSumme.Row - 2, 9))
            Range("P8").Formula = "=VLOOKUP(S8,T:V,3,)"
            Range("P8").AutoFill Destination:=Range(Cells(8, 16), Cells(rngSumme.Row - 2, 16))
        End If
    End Sub
    
    Noch ein Hinweis: verbundene Zellen sollte man tunlichst vermeiden, denn sie bereiten IMMER Problem - egal ob bei der VBA-Programmierung oder wenn man den Aufbau eines Tabellenblatt später einmal ändern muss. Es gibt die verschiedensten ANDEREN Möglichkeiten zur optischen Gestaltung, sodass man komplett ohne verbundene Zellen auskommen kann...


    Makro für variable Anzahl von Datensätzen GrußformelMakro für variable Anzahl von Datensätzen Beverly's Excel - Inn
     
    Beverly, 9. April 2024
    #6
    1 Person gefällt das.
  7. Klaus-Dieter Erfahrener User
    Hallo msdd79,

    also, da es sich offenbar um eine Art Formular handelt, sehe ich mal darüber hinweg, dass der Listenaufbau im Gegensatz zu den meisten Excelregeln steht.
    Eine Frage stellt sich allerdings: warum willst du per Makro Formeln in deine Liste schreiben? Das Makro kann das doch wunderschön berechnen und gleich die Ergebnisse eintragen. Die Ermittlung des aktuellen Listenendes kann man problemlos implementieren.
     
    Klaus-Dieter, 9. April 2024
    #7
  8. msdd79 Erfahrener User

    Makro für variable Anzahl von Datensätzen

    @Karin: vielen Dank für Deine Lösung. Ja, der Aufbau der Tabelle ist immer gleich. Ich werde deine Lösung mal testen und Dir (sicherlich ein positives) Ergebnis melden.
    Bei der Formatierung der Exportliste sind mir die Hände gebunden, ich würde das nicht so formatieren :-)

    @Klaus-Dieter: vielen Dank für Deine Antwort. Meine Makro-Kenntnisse kann man getrost als "Basiswissen" bezeichnen. Bedeutet, alles mit dem Rekorder aufzeichnen und dann aus vielen kleinen Makros ein umfassendes basteln in der Hoffnung, dass es geht.
    Will damit sagen, für Deinen Lösungsweg habe ich leider noch nicht genug Makro-Kenntnisse
     
    msdd79, 9. April 2024
    #8
  9. Beverly
    Beverly Erfahrener User
    Um die Ergebnisse per VBA ermitteln zu können müsste man in einer Schleife alle Zeilen durchlaufen, die Daten in der laufenden Zeile aus den Spalten B, F, K, N gleich deiner Formel in Spalte S =B8&F8&K8&N8 zusammen fügen und dieses Konstrukt dann in Spalte T suchen um die zugehörigen Werte aus Spalte U bzw. V zu nehmen und in die laufende Zeile in Spalte I bzw. P eintragen. Ich bin zwar auch ein Verfechter dessen, dass man normalerweise gleich alles per VBA macht, wenn man sowieso VBA benutzt. Aber im gegegeben Fall ist der zeitliche Aufwand dafür auf keinen Fall geringer, eher wesentlich höher, als wenn du so wie bisher die Formel per VBA eintragen lässt.


    Makro für variable Anzahl von Datensätzen GrußformelMakro für variable Anzahl von Datensätzen Beverly's Excel - Inn
     
    Beverly, 9. April 2024
    #9
  10. Klaus-Dieter Erfahrener User
    Hallo Karin,

    deiner letzten Aussage muss ich hier widersprechen, im meinem Makro habe ich einfach auch den SVerweis im Makro angewendet und so wie unter #7 vorgeschlagen, die Treffer direkt eingetragen, das Makro läuft, genau wie deines, unter einer Sekunde durch.
    Code:
    Sub Übertrag()
        Dim lngZeile As Long
        For lngZeile = 8 To Tabelle1.Range("B7").End(xlDown).Row
            Tabelle1.Cells(lngZeile, 9) = Application.WorksheetFunction.VLookup(Tabelle1.Cells(lngZeile, 19), Range("T8:V" & Tabelle1.Range("T8").End(xlDown).Row), 2, False)
            Tabelle1.Cells(lngZeile, 16) = Application.WorksheetFunction.VLookup(Tabelle1.Cells(lngZeile, 19), Range("T8:V" & Tabelle1.Range("T8").End(xlDown).Row), 3, False)
        Next lngZeile
    End Sub
    
    Den anderen Aspekt werde ich mir noch mal ansehen.
     
    Klaus-Dieter, 9. April 2024
    #10
  11. Klaus-Dieter Erfahrener User
    Hallo zusammen,

    hier nun das Makro ohne die Berechnungen in Spalte S, Laufzeit ebenfalls unter einer Sekunde:

    Code:
    Sub Übertrag()
         Dim lngZeile As Long
        Dim lngSpalte As Long
        Dim strSuch As String
        Dim varSpArr() As Variant
        varSpArr = Array("B", "F", "K", "N")
        For lngZeile = 8 To Tabelle1.Range("B7").End(xlDown).Row
        strSuch = ""
            For lngSpalte = 0 To 3
                strSuch = strSuch & Range(varSpArr(lngSpalte) & lngZeile)
            Next lngSpalte
            Tabelle1.Cells(lngZeile, 9) = Application.WorksheetFunction.VLookup(strSuch, Range("T8:V" & Tabelle1.Range("T8").End(xlDown).Row), 2, False)
            Tabelle1.Cells(lngZeile, 16) = Application.WorksheetFunction.VLookup(strSuch, Range("T8:V" & Tabelle1.Range("T8").End(xlDown).Row), 3, False)
        Next lngZeile
    End Sub
     
    Klaus-Dieter, 9. April 2024
    #11
  12. msdd79 Erfahrener User
    Ich danke Euch beiden für Eure Lösungen, ich werde beide Wege morgen einmal testen (was nicht heißen soll, dass ich bezweifele, dass die funktionieren) und berichten.

    Viele Grüße
    Micha
     
    msdd79, 9. April 2024
    #12
  13. Beverly
    Beverly Erfahrener User

    Makro für variable Anzahl von Datensätzen

    Hi Klaus-Dieter,

    die Schliefe über die 4 Spalten ist nicht nötig - den Suchparamater kann man direkt beim Zeilendurchlauf zusammensetzen. Dann ist auch die Zeile strSuch = "" überflüssig, weil der Suchparameter jedesmal neu erstellt wird:

    Code:
    Sub Übertrag()
        Dim lngZeile As Long
        Dim strSuch As String
        For lngZeile = 8 To Tabelle1.Range("B7").End(xlDown).Row
            strSuch = Tabelle1.Cells(lngZeile, 2) & Tabelle1.Cells(lngZeile, 6) & Tabelle1.Cells(lngZeile, 11) & Tabelle1.Cells(lngZeile, 14)
            Tabelle1.Cells(lngZeile, 9) = Application.VLookup(strSuch, Tabelle1.Range("T8:V" & Tabelle1.Range("T8").End(xlDown).Row), 2, False)
            Tabelle1.Cells(lngZeile, 16) = Application.VLookup(strSuch, Tabelle1.Range("T8:V" & Tabelle1.Range("T8").End(xlDown).Row), 3, False)
        Next lngZeile
    End Sub
    
    Dein Code für die Ermittlung der letzten zu berücksichtigenden Zeilen setzt voraus, dass es keine Leerzellen in den Bezugsspalten gibt - das sollte man aber auf jeden Fall erwähnen, wenn man mit .End(xlDown).Row arbeitet.
    Wenn man auf die Zellen mittels Tabellenbezug referenziert, dann sollte man es auch an allen Stellen machen... Makro für variable Anzahl von Datensätzen *;)*


    Makro für variable Anzahl von Datensätzen GrußformelMakro für variable Anzahl von Datensätzen Beverly's Excel - Inn
     
    Beverly, 9. April 2024
    #13
  14. Klaus-Dieter Erfahrener User
    Hallo Karin,

    viele Wege führen nach Rom. Wer weiß schon, welcher der beste ist? Per se ist eine Schleife ja erst einmal nicht schlecht, bzw. kein Fehler.
     
    Klaus-Dieter, 9. April 2024
    #14
  15. Beverly
    Beverly Erfahrener User
    Gewiss, Fehler ist es keiner, aber das mit den Wegen nach Rom sollte man mit Vorsicht genießen, denn unnötige Umwege verlangsamen einen Code unnötig - insbesondere wenn es sich (irgendwann denn) um sehr große Datenmengen handeln sollte.


    Makro für variable Anzahl von Datensätzen GrußformelMakro für variable Anzahl von Datensätzen Beverly's Excel - Inn
     
    Beverly, 9. April 2024
    #15
Thema:

Makro für variable Anzahl von Datensätzen

Die Seite wird geladen...
  1. Makro für variable Anzahl von Datensätzen - Similar Threads - Makro variable Anzahl

  2. Makro Problem nach Wörtern filtern und Zeilen löschen

    in Microsoft Excel Hilfe
    Makro Problem nach Wörtern filtern und Zeilen löschen: Hallo zusammen! Ich habe ein Makro, dass ich erweitern möchte. Dabei soll in den Daten in der ersten Zeile ein Filter aktiviert werden und alle Datenzeilen löschen, die in Spalte 10 eines von 4...
  3. Variabler Zeilensprung.

    in Microsoft Excel Hilfe
    Variabler Zeilensprung.: Hallo, kann mir jemand helfen dieses Makro variabel zu machen? "If Not Intersect(Range("e51"), Target) Is Nothing Then Range("g32").Select End If" das muss variabel werden (Range("e51"),...
  4. Dynamische Breite eines dynamischen Diagramms

    in Microsoft Excel Hilfe
    Dynamische Breite eines dynamischen Diagramms: Hallo zusammen, ich habe ein dynamisches Balkendiagramm in Excel erstellt mit dem Index-Befehl (Beispielbefehl:...
  5. Makro Summenformel auf variablen Bereich anpassen

    in Microsoft Excel Hilfe
    Makro Summenformel auf variablen Bereich anpassen: Hallo Zusammen, ich möchte gerne mittels Makro eine Summenformel erzeugen, die sich entsprechend des Bereiches anpasst. Die Marko-Aufnahmefunktion ergibt foglendes: ActiveCell.FormulaR1C1 =...
  6. Benötige sehr variables Makro

    in Microsoft Excel Hilfe
    Benötige sehr variables Makro: Hallo zusammen, Ich benötige Hilfe für ein Makro wo ich nicht weiter komme.... Das Makro muss folgendes „Können“: 1. Seite „Tourenplan“ auswählen 2. Spalte B soll kopiert werden aber nur wenn...
  7. Per Makro eine PDF erstellen mit variablem Dateinamen

    in Microsoft Excel Hilfe
    Per Makro eine PDF erstellen mit variablem Dateinamen: Hallo, ich würde gern in einer Excel einen markierten Bereich als PDF erstellen und als Dateinamen die letzte Spalte des Bereichs verwenden. Den ersten Teil habe ich geschafft aber die Vergabe...
  8. VBA: Variable innerhalb Makro verwenden?

    in Microsoft Excel Hilfe
    VBA: Variable innerhalb Makro verwenden?: Hallo Freunde, ich habe folgendes Problem: Sub TestMakro() Dim Wert1 As String Dim Wert2 As String Dim Wert3 As String Dim Wert4 As String Dim Wert5 As String Wert1 = Range("G2").Value Wert2 =...
  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