20.02.2021, 11:59 (Dieser Beitrag wurde zuletzt bearbeitet: 20.02.2021, 12:04 von Gast 123.)
Hallo
freut mich das dir meine Arbeit gefaellt und ja, so klein das Makro ist, es ist ein Universal Code der sich automatisch anpasst! Mit LastZell suche ich die letzte Zeile in Spalte A, und mit Colums(3).Find durchsuche ich die ganze Spalte C nach dem Wert. Es ist ein grosser Vorteil wenn man selbst VBA Kenntnisse hat und kann sich das Makro zum Auswerten selbst anpassen.
Hier noch ein Bonbon für dich, ein Makro mit dem du in weiteren Tabellen suchen und ausfüllen kannst. Du must dazu nur in Const TbX den Namen der Tabelle angeben. Gesucht wird hier in Spalte A, sonst must du die Spalte umschreiben. Vergiss bei Find bitte nicht ggf. auch die Startzelle [a1] mit zu aendern. sonst kommt Laufzeitfehler!
mfg Gast 123
Code:
Option Explicit '20.2.2021 Gast 123 für Clever Forum Dim AC As Range, lz1 As Long Const ExTab = "Tabelle1"
'Suchen und notieren in weiteren Tabellen
Sub TabelleX_Suchen_und_ersetzen() Dim rFind As Range, n As Long Dim Adr1 As String, m As Long Dim TbX As Worksheet, lz2 As Long Set TbX = Worksheets(ExTab)
With Worksheets("SQLiteAdmin") 'LastZell in Spalte A suchen lz1 = .Cells(Rows.Count, 1).End(xlUp).Row lz2 = TbX.Cells(Rows.Count, 1).End(xlUp).Row 'Bereich Spalte D+E löschen TbX.Range("D2:E" & lz1).ClearContents Application.ScreenUpdating = False
'Suche RoutenNummer in Spalte C For Each AC In .Range("A2:A" & lz1) Application.StatusBar = AC.Row & " / " & lz1 & " / " & n Set rFind = TbX.Columns(1).Find(What:=AC, After:=[a1], LookIn:=xlFormulas, LookAt:= _ xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If Not rFind Is Nothing Then Adr1 = rFind.Address Do n = n + 1 'gedunden Daten zaehlen 'Text aus Spalte B nach D ausgeben rFind.Offset(0, 2) = AC.Offset(0, 1) 'weitersuchen (falls mehrfach vorhanden) Set rFind = TbX.Columns(1).FindNext(rFind) Loop Until rFind.Address = Adr1 End If Next AC End With
Nachtrag Ich verwende hier eine With Klammer und Set Anweisung für Tabelle1. Bei der With Klammer musst du alles was sich auf diese Klammer bezieht vorne mit einem Punkt versehen, z.B. .Cells(1,2) oder .Range("xxx"). Wenn du den vergisst nimmt Excel die Zelle oder den Range vom gerade aktiven Blatt. Standard Wissen in VBA, es erleichtert das Programmieren
Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:1 Nutzer sagt Danke an Gast 123 für diesen Beitrag 28 • RoAdRuNnEr
freut mich das ich dir soooweit helfen konnte, hat mir Spass gemacht. Aber da ist mein Latein am Ende!! Die modernen Sachen wie PowerPoınt und PowerQuery habe ich nicht drauf! Da müssen dir bitte die Kollegen weiterhelfen.
Aber Du hast schon eine Menge drauf in Excel, daß muß ich Dir mal sagen. Ich wäre auf sowas im Leben nicht gekommen....naja ich mache Beruflich auch was ganz anderes als mit Excel zu arbeiten....
Ich habe nun deine Makro Datei versucht auf meiner Finalen Tabelle einzusetzen und dabei versucht die Werte zu ändern die für die Tabelle nun Aktuell sind.....
dabei ist die Spalte A zu L geworden und die Spalte B zu M
Die Spalte C ist jedoch gleich geblieben.
Auch wenn ich (Meiner Meinung nach) dieses Makro auf die Aktuellen Spalten umbenne kommt es nur noch zu Fehlern und ich dreh fast durch hier....
Scheibar bin ich nicht in der Lage eine schon vorhandene Makrodatei auf meine Wünsche umzustrukturieren.
Was ich aber geschafft habe mit einer Makroaufzeichnung ist, daß sich die Standart Tabelle in der Tabelle mittels Knopfdruck wandelt, wie ich sie mir Vorstelle.
Das Einzige was jetzt noch fehlt ist Dein Makro zum laufen zu bekommen.
Brauchst Du dafür meine Tabelle um Einsicht zu haben, oder Reicht es aus, was ich Dir oben mit den Spalten gesagt habe ?
Zum anderen :
In Spalte A habe ich eine Nummerierung eingebaut (00001 - 11047) Wenn nun die Tabelle aktualisiert wurde mit neuen Zeilen, wird dann die Nummerierung auch automatisch mit voran schreiten ? Die Nummerierung ist "nicht" in der Standart Tabelle aufgefürt und wurde somit in meiner Tabelle erst hinzugefügt mit der Funktion : =TEXT(ZEILE(A1);"00000")
Am besten schick ich Dir mal mein Makro ...
Es wäre Perfekt, wenn Dein Makro erst beginnt, wenn meines durch ist, also am Ende meines Makros eingeführt wäre.
21.02.2021, 17:32 (Dieser Beitrag wurde zuletzt bearbeitet: 21.02.2021, 17:41 von RoAdRuNnEr.)
OK....
ist das ausreichend für Dich ?
Spalte L und M war vorher A und B
und Spalte C ist gleich geblieben
Wie gesagt wäre es gut wenn Deine Makro Datei erst beginnt, wo meine aufhört, weil ich bei der Standart Tabelle ich erst auch einige Spalten Lösche und auch umändere...
Sorry, ich hatte ein paar Tage privat zu tun, habe die neue Beisipieldatei nicht gesehen. Hier ein überarbeiter Code. Die Spalte C wird nach Spalte N kopiert, als Sicherheitskopie. Den Kopier Codeteil kannst du auch spaeter löschen. Neu ist eine Prüfung ob in Spalte C eine Nummer oder schon der Text steht. Dann erfolgt Code Abbruch.
mfg Gast 123
Code:
Sub Suchen_und_ersetzen() Dim rFind As Range, lz2 As Long Dim Adr1 As Variant, n As Long Adr1 = Right(Range("C2"), 4) 'Prüfen ob Makro ausgeführt wurde! If Not IsNumeric(Adr1) Then MsgBox "In Zelle C1 steht bereits Text! - Abbruch!": Exit Sub End If
'** LastZell in Spalte -K- suchen lz1 = Cells(Rows.Count, 12).End(xlUp).Row lz2 = Cells(Rows.Count, 3).End(xlUp).Row 'kopiere Spalte C nach Spalte N (Sicherheits Kopie) Range("C2:C" & lz2).Copy Range("N2").PasteSpecial xlPasteValues Application.CutCopyMode = False Application.ScreenUpdating = False
'Suche RoutenNummer in Spalte C For Each AC In Range("L2:L" & lz1) Application.StatusBar = AC.Row & " / " & lz1 & " / " & n Set rFind = Columns(3).Find(What:=AC, After:=[c1], LookIn:=xlFormulas, LookAt:= _ xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If Not rFind Is Nothing Then Adr1 = rFind.Address Do n = n + 1 'gedunden Daten zaehlen 'Text aus Spalte B nach D ausgeben rFind.Value = AC.Offset(0, 1) 'weitersuchen (falls mehrfach vorhanden) Set rFind = Columns(3).FindNext(rFind) If rFind Is Nothing Then Exit Do Loop Until rFind.Address = Adr1 End If Next AC
Jetzt habe ich nur noch eine klitzekleine Frage....
wenn die Tabelle größer wird in Form von Zeilen (nicht Spalten) wie könnte man dann , wie in der Beispieltabelle in Spalte A die Nummer Automatisch weiterführen lassen, oder geht das Automaisch dann ? Denn die Aufzählung ist nicht von Excel selber gemacht, da ich diese Spalten und Zeichenzählung immer abschalte. Der Grund ist, sobald sich in der Nummerierung von 999 ---> 1000 vergrößert bewegt sich die ganze Tabelle nach Rechts. Genau so ist es wenn der Sprung von 9999 ---> 10000 geht. Aus diesem Grund habe ich in Spalte A eine Seperate Nummerierung eingebaut, die in Zeile "2" mit der Nummer 00001 beginnt. Da es ja nicht von Excel automatisiert ist, denke ich, daß ich die Nummerierung immer wieder "von Hand" erweitern muß, oder gibt es dafür auch eine Automation ?
24.02.2021, 13:02 (Dieser Beitrag wurde zuletzt bearbeitet: 24.02.2021, 13:06 von Gast 123.)
Hallo
freut mich das mein Code funktioniert. ich werde aus deiner Frage leider nicht so ganz schlau?? Erklaere zuerst das Makro. Dem ist es egal wie lang die Zeilen in Spalte L oder C sind. Der Code passt sich automatisch an, sucht in Spalte L immer die letzte Zelle. Und füllt in Spalte C alle Zellen aus, die er mit der gesuchten Nummer findet. Die Zeilen könnten bis 1 Million gehen! Bei vielen Zeilen (> 10.000) dauert es dann nur laenger.
Ich weiss nicht welchen Versatz der Spalte nach Rechts ab 1.000 oder 10.000 du meinst?? Und auf welche Spalte sich das konkret bezieht? In beiden Beispielen ist von einem Versatz nichts zu sehen. Da weiss ich im Augenblick wirklich nicht was damit gemeint ist???
mfg Gast 123 Nachtrag: sind damit vielleicht Daten einer Rohdatei gemeint, die als CSV oder aehnliches reinkommen??? Dann einfach unten anhaengen.
Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:1 Nutzer sagt Danke an Gast 123 für diesen Beitrag 28 • RoAdRuNnEr