Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
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
Suche Zellen mit Spaltenbreite = 50
28.01.2023 10:26:27
Daikoku
Hallo!
Ich habe folgende Situation:
Tabellenblatt mit (sehr) vielen Spalten und (sehr) vielen Zeilen. Die Spalten, die Text enthalten sind sämtlich 50px breit. Andere Spalten, die dazwischen liegen, sind 1px breit. Die Anzahl der zwischen den 50px-liegenden 1px-Spalten variiert.
Ich möchte nur in den 50px-Spalten von oben nach unten nach Text suchen, diesen auslesen in einem anderen Tabellenblatt speichern.
Hat jemand einen Lösungsansatz hierfür?
Schon mal meinen herzlichen Dank im Voraus!
FD

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche Zellen mit Spaltenbreite = 50
28.01.2023 11:51:23
MCO
Moin!
Spalten durchzugehen ist nicht das Problem
for sp = 1 to activesheet.usedrange.columns.count
         if columns(sp).columnwidth = 50 then
             'Deine Suche
         endif
next sp
Leider hast du nicht geschrieben, wie denn der andere Zellinhalt aussieht.
Grundsätzlich kann man beispielsweise in nur gefüllten Zellen suchen lassen, die keine Formeln sind.
set such_erfolg = activesheet.usedrange.specialcells(xlcelltypeconstants).find(Suchbegriff)
if not such_erfolg = nothing then
 'kopier was oder schreib was      
endif
Probiers mal aus (ungetestet, daher Schreibfehler mögich)
Gruß, MCO
Anzeige
AW: Suche Zellen mit Spaltenbreite = 50
28.01.2023 12:40:30
Daikoku
Danke, probiere ich aus.
Das Ganze ist Teil einer Grafik in Excel und die kleinen Spalten beinhalten keine Werte (nur ausnahmsweise) sondern nur Verbindungslinien. Thema Ahnenforschung. Da die Grafik der Erfassungstabelle immer etwas voraus ist, wird es Zeit, nachzuarbeiten. Das per Hand und einzeln zu machen, nein danke. Ich schicke einen Screenshot mit. Die Personen, die den Zusatz [AN] hinter dem Vornamen haben, sind bereits verarbeitet...
AW: Suche Zellen mit Spaltenbreite = 50
30.01.2023 12:08:34
Piet
Hallo
amüsant, immer noch Ahnenforschung, wie schön ...
Die Angaben sind etwas ungenau zum programmieren. Sollen die Texte in der Zieltabelle nebeneinander (mehrere Spalten) oder untereinander in einer Spalte geschrieben werden? Wie heisst die Zieltabelle?
Ich würde jede Spalte komplett kopieren, und in der Zieltabelle alle Namen mit "AN" wieder löschen.
Ich weiss aber nicht ob man für Namen und Vornamen 2 getrennte Spalten braucht?
Falls ja, wie erkennt man es? Was steht im Quellblatt in der Überschrift der einzelnen Spalten?
mfg Piet
  • Option Explicit 'Ahnenforschung
    Dim lz1 As Long, lzX As Long
    Dim AC As Range
    Sub Ahnenforschung_kopieren()
    Dim Ziel As Worksheet, sp As Integer
    Set Ziel = Worksheets("Deine Zieltabelle")   '** Ziel Tabelle angeben
    'Ziel Tabelle vorher komplett löschen
    Ziel.UsedRange.Offset(1, 0).ClearContents
    With Worksheets("Tabelle1")  '** Quelle Tabelle angeben
        'Alle Spalten mit 50 in Ziel Spalte A kopieren
        For sp = 1 To .UsedRange.Columns.Count + 1
            If .Columns(sp).ColumnWidth = 50 Then
               'LastZell in gefundene Spalte + Ziel suchen
               lzX = .Cells(Rows.Count, sp).End(xlUp).Row
               lz1 = Ziel.Cells(Rows.Count, 1).End(xlUp).Row + 1
               .Cells(2, sp).Resize(lzX, 1).Copy
               Ziel.Cells(lz1, 1).PasteSpecial xlPasteValues
            End If
        Next sp
        Application.CutCopyMode = False
    End With
        
    With Ziel  'Zieltabelle nearbeiten
       'LastZell in Ziel Tabelle suchen
       lz1 = .Cells(Rows.Count, 1).End(xlUp).Row + 1
       If lz1 = 2 Then MsgBox "Keine Daten kopiert!"
       'Zieltabelle Spalte A sortieren
       .Range("A2:A" & lz1).Sort Key1:=Ziel.Range("A2"), Order1:=xlAscending, _
         Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
        'Doppelte + Namen mit "AN" am Ende löschen
        For Each AC In .Range("A2:A" & lz1)
            If AC.Cells(2, 1) = AC.Value Then AC.Value = Empty
            If Right(Trim(AC), 2) = "AN" Then AC.Value = Empty
        Next AC
       'Zieltabelle Spalte A sortieren
       .Range("A2:A" & lz1).Sort Key1:=Ziel.Range("A2"), Order1:=xlAscending, _
         Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
       lz1 = .Cells(Rows.Count, 1).End(xlUp).Row - 1
    End With
    MsgBox lz1 & " Namen gefunden"
    End Sub

  • Anzeige
    AW: Suche Zellen mit Spaltenbreite = 50
    31.01.2023 21:16:03
    Daikoku
    Hallo Piet!
    Ich muss Dir danken, nochmals. Nach Deinen letzten Hilfen habe ich mich selber dran gesetzt und mich, nach mehr als 20 Jahren, wieder ein wenig tiefer in die Sache hineinbegeben und einige Codes zu Deinem hinzugefügt. Und ja, immer noch Ahnenforschung. Sicher kennst Du das: wenn's gut läuft, will man noch mehr herausholen. Ich habe zur neuen Anfrage einen Screenshot zur Tabellenstruktur hochgeladen.
    Im Prinzip umfasst jede Person einen Bereich aus 1 Spalte (50px breit) und 3 Zeilen.
    Darin in Zeile 1 Vornamen und in [407] -Klammern die Personen-Nummer.
    Darunter (Zeile 2) Name und Beruf (falls bekannt) bzw. bei Frauen Name, Geburtsname.
    Darunter (Zeile 3) Geb.-Datum und -Ort sowie Sterbedatum und -Ort.
    Es kann alles so ausgelesen und eingetragen werden, wie es die Zellen enthalten, da eh noch ein Haufen Handarbeit danach erforderlich ist. Die einzige Info, die gesondert ausgelesen werden sollte, ist die Personennummer.
    Das Quellblatt heißt "Ahnen", das Zielblatt heißt "Neue Namen" und soll in Spalten nebeneinander befüllt werden:
    Spalte "A" Personennummer (in eckigen Klammern)
    Spalte "B" Name, (+ Geb.-Name)
    Spalte "C" Vornamen,
    Spalte "C" Geburt + Tod.
    In den Zeilen erscheinen die Ergebnisse des nächsten Fundes.
    Schönen Abend noch!
    FD
    Anzeige
    AW: Suche Zellen mit Spaltenbreite = 50
    31.01.2023 21:53:27
    Daikoku
    Hallo Piet,
    habe den Code soeben ausprobiert ... er läuft fehlerfrei und tut, was er soll. Ein Durchblick ist derzeit nicht möglich, weil er alles, was er findet, untereinander schreibt. Sicher helfen meine Antworten auf Deine Fragen, ein wenig Struktur in die Sache zu bringen.
    Er müsste also im Quellblatt die erste Zeile des Bereiches (3-Zeilen-Bereich) daraufhin prüfen, ob die eckige Klammer drin ist. ... Klammer mit Zahl drin in Zielblatt Spalte 1. Restlichen Zelleninhalt in Spalte 2.
    Dann eine Zeile im Quellblatt nach unten (dort steht immer der Name bzw. Geburtsname) ... Ausdruck in Spalte 3 des Zielblattes.
    Dann eine Zeile im Quellblatt nach unten (dort stehen immer die Geb.- bzw Todesdaten) ...- Ausdruck in Spalte 4 des Zielblattes.
    Somit ist also ein Drei-Zeilen-Bereich abgearbeitet.
    Danach im Quellblatt in derselben Spalte nach unten und nächste Zelle mit eckiger Klammer suchen und Ablauf wie oben beschrieben.
    Wenn im Quellblatt in der aktiven Spalte die untere beschriebene Zelle erreicht ist, soll die nächste 50Px. breite Spalte rechts daneben gesucht und von oben nach unten abgearbeitet werden. Derzeit enthält mein Quellblatt 15 solcher 50px-Spalten (bis in Zeile1428). Das Dilemma ist, dass sich zwischen diesen Spalten unterschiedlich viele 1px-Spalten befinden, zw. 6 und 12.
    Am Anfang waren durchweg 6 Spalten dazwischen, das änderte sich, als wegen Personenhäufung die Darstellung mit den Verbindungslinien (die die Verwandtschaftsverhältnisse darstellen), die in diesen kleinen Spalten laufen, unübersichtlich wurde.
    Beste Grüße!

    Anzeige
    AW: Suche Zellen mit Spaltenbreite = 50
    01.02.2023 01:07:49
    Piet
    Hallo
    ich habe deine Antworten gelesen und schaue mir die Sache morgen an. Brauche aber etwas Zeit dafür.
    mfg Ğiet
    AW: Suche Zellen mit Spaltenbreite = 50
    01.02.2023 12:20:43
    Piet
    Hallo
    ich habe dir mal nach deinen Angaben eine Beispieldatei erstellt. Du müsstest aber bitte noch die roten Felder ergaenzen und richtig anordnen. Wenn du mir im "neuen Blatt" die korrekten Überschriften für jede gewünschte Spalte angibst, und sie richtig anordnest, kann ich das Makro passend schreiben.
    Um deinen Ursprungs Text zu zerlegen, dmit wir ihn richtig zuordnen können, brauche ich aber ca. 10 Namen (Ursprungsdaten), an denen ich den Stringaufbau erkennen kann. Bitte gib mir im Beispiel auch die passende Lösung von Hand an, damit ich den Texaufbau und wie man ihn zerlegen muss erkennen kann. Die Namen können Fantasie Namen sein wie "Frau Holle, Rotkaepchen" usw.
    https://www.herber.de/bbs/user/157587.xls
    Gib mir bitte auch an welches Format du für das Datum verwendest, das vom Computer nicht als "Datum" erkannt wird. Alle Daten vor 1900. Hast du sie als Text formatiert?
    mfg Piet
    Anzeige
    AW: Suche Zellen mit Spaltenbreite = 50
    01.02.2023 17:33:52
    Daikoku
    Hallo Piet,
    ich habe etwas vorbereitet, weiß aber nicht, wie ich das (wie Du) als Link in die Nachricht einbinden kann...? Kurze Anleitung bitte...
    AW: Suche Zellen mit Spaltenbreite = 50
    01.02.2023 18:00:03
    Piet
    Hallo
    habe die Datei erhalten, schaue sie mr morgen in Ruhe an. Kann etwas dauern.
    mfg Piet
    AW: Suche Zellen mit Spaltenbreite = 50
    01.02.2023 18:00:17
    Daikoku
    Hallo Piet,
    ja das mit dem Datum ... über Formatierung habe ich nicht nachgedacht.
    Wahrscheinlich erkennt der Computer das Ganze als Text, weil noch andere Zeichen dabei sind.
    Da der Computer Daten vor 1900 von sich aus als Text ablegt, auch wenn man sie separiert hat, müssen die für Altersberechnung etc. eh umgewandelt werden, kein Problem.
    Will sagen, das Format ist im Prinzip TT.MMM.JJJJ und vor 1900 ist alles anders.
    FD
    Anzeige
    AW: Suche Zellen mit Spaltenbreite = 50
    02.02.2023 00:15:42
    Piet
    Hallo
    ich habe ein Ergebnis, bin gespannt wie es dir gefaellt. Am Anfang gab es Laufzeitfehler, weil nicht immer ein Ort mit "(" Zeichen angegeben ist, oder mal das ( Zeichen am Anfang fehlte! Ist erledigt, das Makro korrigiert solche Fehler automatisch!
    Bei einigen Daten fehlt die Personal Nr, ich liste sie trotzdem mit auf. An einigen Stellen stehen unvollstaendige Daten, auch mal nur 00 für Heirat. Die überspringe ich einfach. Bei Geburt und Tod habe ich das vorgestellte Zeichen gelassen, weil es zum Text splitten einfacher war. Damit erledigt sich das Format. Es sei denn du willst es aendern. Die Klammer bei Orten kann man löschen
    https://www.herber.de/bbs/user/157607.xls
    Nun warte ich erst mal ab wie sich die Datei in der Praxis bei deinen vielen Daten bewaehrt. Handkorrekturen wird es immer geben.
    Mfg Piet
    Anzeige
    AW: Suche Zellen mit Spaltenbreite = 50
    02.02.2023 04:08:03
    Daikoku
    Aaaalso: Mannomann. Das Makro hat auf dem ersten Blatt "Ahnen" 794 Zeilen ausgelesen. Probleme gab es keine, nur zig Laufzeitfehler wegen Fehlern, die ich selber eingebaut hatte ... fehlende † (darauf ist der Code echt scharf :-}) ) oder Berufe in eckigen Klammern. Manchmal dachte ich, ich müsste auf die Leerzeichen vor und hinter dem † achten, das hat sich dann aber geklärt. Bei enthaltenen Hyperlinks scheint er auch zu stocken, die habe ich entfernt, damit der Code erstmal durchläuft.
    In der letzten Woche habe ich das Blatt mit meiner ursprünglich "Endlosen Tabelle" (ca. 3000 Zeilen) in ca. 15 kleinere Blätter aufgeteilt, habe die abzweigenden großen Familienzweige ausgelagert. Ich muss also zukünftig mehrere Blätter durchforsten. Dazu werde ich mir eine Eingabeaufforderung einbauen, die den zu untersuchenden Blattnamen abfragt. Weiter werde ich noch eine "letzte Zeile" Abfrage im "Neue Namen"-Blatt einfügen, damit er die Ergebnisse der anderen Blätter nicht über das schreibt, was er vorher ausgelesen hat, sondern darunter anfügt.
    Piet, ich bin immer wieder tief beeindruckt, mit wie wenig Code Du auskommst, um große Aufgaben zu realisieren.
    Ach eins fällt mir noch ein. Könntest Du noch so etwas einbauen, dass solche 3er-Bereiche, deren 1 Zeile keinen Text enthält, sondern nur eine Zahl, übergangen, also nicht ausgelesen werden?! Ich habe in der Auswertung gesehen, dass sehr viele leere Zellen vorhanden sind, vor allem bei den Ahnen höherer Ordnung (die am weitesten zurückliegen, wo die Daten z.T. noch fehlen).(Gemeint ist in diesem Falle nicht die in den eckigen Klammern rechts neben den Vornamen stehende Personen-Nr., die wird erst vergeben, wenn Daten vorliegen. Gemeint ist eine Zahl bei den Vorfahren der direkten Linie, die Ahnennummer, die dann links der Vornamen ohne Klammern steht, z.B. Ich die 1, mein Vater die 2, meine Mutter die 3, Eltern des Vaters 4+5, Eltern der Mutter 6+7 usw.) Diese Bereiche sind in aller Regel leer, wenn nicht mal der Vorname dort steht.
    Ich ahne schon: möglicherweise gemäß Annett Louisan "Zu viel Information"... Ich werde morgen noch einmal an anderen Blättern testen.
    Erst einmal vielen Dank und eine gute Nacht! ... Früh um 4 :-})
    Anzeige
    AW: Suche Zellen mit Spaltenbreite = 50
    02.02.2023 12:29:52
    Daikoku
    Guten Morgen Piet,
    ich habe den ultimativen Test gefahren. Mit Deinem Code habe ich aus 23 Blättern genau 3546 Personen ausgelesen, die nun in einem einzigen Tabellenblatt untereinander stehen und sortiert werden können. Es sind einige doppelte dabei, das ist normal, weil die Blätter untereinander verlinkt sind. Einige Fehler konnte ich auch bereits ausräumen. Es hat sich bestätigt, dass der Code mit Abbruch reagiert, wenn vor dem "†" kein Leerzeichen steht bzw. wenn in der Namenszeile eine eckige Klammer auftaucht. Das habe ich behoben. (in den Tabellenblättern).
    Ansonsten schnurrt das Ding und das ist fabelhaft.
    DANKE und einen angenehmen Tag Dir!!
    Anzeige
    AW: Danke für die nette Rückmeldung
    03.02.2023 12:02:40
    Piet
    Hallo
    ich freue mich sehr das mein Code so gut angekommen ist. Einige Fehler waren zu erwarten.
    Schön wenn du den Code verstanden hast und sie selbst beheben konntest! Freut mich.
    Leere Zeilen könntest du überspringen, indem die die Textlaenge auf Minimal prüfst.
    İf Len(AC) < 5 then GoTo xxxx -- hier einen Labelnamen festlegen zum überspringen.
    mfg Piet
    AW: Danke für die nette Rückmeldung
    03.02.2023 15:14:24
    Daikoku
    Hallo,
    danke für die Ergänzung. Ja, langsam steigert sich mein Verständnis für die Codes. Am Anfang habe ich keinen Stich gesehen, mittlerweile bin ich zu Änderungen fähig. Bin gerade wieder dabei, eine Ergänzung einzubauen:
    Ausgehend von Deiner ersten Arbeit, in der den Anfangsbuchstaben die jeweilige Anzahl der dahinter stehenden Namen zugeordnet wird, möchte ich aus der Auflistung heraus Hyperlinks zu den einzelnen "Buchstabenblättern" einbauen.
    Die Auflistung sieht so aus, dass in Zeile 8 die Anfangsbuchstaben eingetragen werden und in Zeile 9 die entspr. Anzahl. Da sich die Position der Anfangsbuchstaben in der Übersicht ändert (wenn neue Buchstaben hinzukommen oder Buchstaben wegfallen), muss also die Zuweisung von Hyperlinks in die Routine eingebaut werden und sich mit ändern.
    Den Anfangsbuchstaben und den Blattnamen gleichermaßen habe ich die Variable ABf zugewiesen. Ist also ABf = "A", soll in der Tabelle zuerst das "A", darunter die Anzahl der mit "A" beginnenden Namen eingetragen werden und gleichzeitig die mit "A" beginnenden Namen in das Blatt abf= "A" kopiert werden. Das alles klappt wunderbar, auch mit der Zeilen- und Spaltensteuerung im Zielblatt.
    Was nicht klappt ist die Zuordnung der Hyperlinks vom Buchstaben in Zeile 8 zu dem jeweiligen Blatt. Hier mein Ansatz, der Fehlermeldungen erzeugt (szAA ist der Spaltenzähler für die Eintragungen in Zeile 8. Das "A" wird also in Cells(8,12) eingetragen und in dem Moment, wenn diese Zelle aktiv ist, soll der Hyperlink zum Blatt "A" gesetzt werden. Wenn alles passiert ist, geht der Zähler auf szAA+1) :
    Cells(8, szAA).Select
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    ABf!A1, TextToDisplay:="A"
    Irgenwie hakt es beim Ausdruck "Abf!A1". Wenn ich anstelle von ABf ein "A" eintrage, klappt es. Kannst Du mit einen Rat geben?
    Danke im Voraus!
    AW: Danke für die nette Rückmeldung
    03.02.2023 17:48:46
    Piet
    Hallo
    Mit Hyperlinks kenne ich mich wenig aus. Versuch macht klug. Probieren wir es maL:
    ersetze bitte den Ausdruck durch die Variable Adr1 = Cstr(ABf & "!A1") und füge im Hyperlink Adr1 ein.
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= Adr1, TextToDisplay:="A"
    Dein Thread faellt bald aus dem Server raus!
    mfg Piet
    AW: Danke für die nette Rückmeldung
    03.02.2023 19:28:58
    Daikoku
    Hi.
    Habe das ausprobiert, leider ohne Erfolg. Ich habe mir in einer Messagebox danach den Inhalt der Variablen Adr1 anzeigen lassen ... der stimmt, bis auf die Hochkommas beim Blattnamen, die fehlen. Bei der Zelle sind sie da.
    Ich habe ein Makro aufgenommen, in dem ich den Hyperlink von "A" auf das Blatt "A" gelegt habe und den Code in die Prozedur eingefügt (ohne Variablen) und auch das funktioniert nicht. Er kennzeichnet den Buchstaben zwar als Hyperlink (Schriftart und Unterstreichung), legt aber den Link nicht drauf.
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    "A!A1", TextToDisplay:="A"
    Vielleicht kann man ja Hyperlinks nicht in Prozeduren einbauen ?
    Habe keine Idee mehr.
    AW: Danke für die nette Rückmeldung
    03.02.2023 19:43:07
    Daikoku
    Verzeih, ich hab Mist erzählt ... die Msgbox zeigt zwar z.B. H!A1 an, habe jetzt im Stop-Modus mal auf die Variable geklickt, dort steht der Wert mit Hochkommas: "H!A1"
    ...
    AW: Danke für die nette Rückmeldung
    03.02.2023 19:59:47
    Piet
    Hallo
    Mit Hyperlinks kenne ich mich nicht gut aus, aber der aus dem Internet funktioniert bei mir.
    Sprung zur "Tabelle1" in die Zelle A4. Ist dein Tabellen Name gültig?
    Adr1 = ("Tabelle1!A4")
    ActiveCell.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:=Adr1
    mfg Piet
    AW: Danke für die nette Rückmeldung
    03.02.2023 22:09:16
    Daikoku
    So neuer Zwischenstand.
    Ich bin ein Depp!!! Habe herausgefunden, woran es liegt: Ich hatte die zwei Zeilen in meine Routine eingefügt, an einer Stelle, wo ich glaubte, dass die Schleife beendet ist, die alle Werte einträgt. Nee, war sie nicht. Die hat aus irgendwelchen Gründen, die ich noch ergründen muss, von vorn begonnen und alles erneut überschrieben, auch die Hyperlinks. Habe die Bescherung gesehen, nachdem ich die Bildschirmaktualisierung mal kurzerhand auf "True" gesetzt habe.
    Nun habe ich die Hyperlink-Zeilen ans Ende gesetzt, vor das end sub. Ich muss nur noch die Schleife zum Stehen bringen.
    Die Nachricht ist: die Hyperlinks funktionieren!!!
    Danke Piet und ich bitte um Nachsicht.
    adr1 = CStr(ABf & "!A1")
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _
    adr1, TextToDisplay:=ABf

    308 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige