Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1544to1548
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
Inhaltsverzeichnis

Nummerierung aller befüllten Zeilen

Nummerierung aller befüllten Zeilen
06.03.2017 14:20:53
stoibech
Hallo zusammen,
ich habe ein Problem bei der automatisierten Nummerierung von Zeilen.
Ich möchte in einer Spalte alle Zeilen fortlaufend nummerieren, solange die Nachbarspalte nicht leer ist. Dabei müssen auch 2 Spalten übersprungen werden, die farbig sind. Das Überspringen hab ich hinbekommen, leider klappt es noch nicht mit der Nummerierung bis zur letzten Zeilen.

Sub nummerieren()
Dim i As Long
Dim Zeilen As Integer
Range("E17").Select
Zeilen = Selection.CurrentRegion.Rows.Count
For i = 17 To Zeilen
If Cells(i, 1).Interior.ColorIndex = xlNone Then
Cells(i, 1).Value = Application.WorksheetFunction.Max(Range("A:A")) + 1
End If
Next i
End Sub


https://www.herber.de/bbs/user/111973.xlsm
Könnt ihr mir dabei helfen?
Lieben Dank
stoibech

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nummerierung aller befüllten Zeilen
06.03.2017 15:01:22
Michael
Hi,
Zeilen hat den Wert 16 (das ist die .currentregion), so daß die Schleife kein einziges Mal durchlaufen wird.
Da Du offensichtlich mit 1 beginnst, geht es so einfacher:
Sub nummerieren()
Dim i As Long, Nr As Long
Dim Zeilen As Long
Zeilen = Range("E17").CurrentRegion.Rows.Count
For i = 17 To 17 + Zeilen - 2
If Cells(i, 1).Interior.ColorIndex = xlNone Then
Nr = Nr + 1
Cells(i, 1).Value = Nr
End If
Next i
End Sub

Das "-2" setzt sich zusammen aus
1. -1, weil die Überschrift bei .currentregion mitgerechnet wird und
2. -1, weil die Schleife bei 17 beginnt, so die Sache mit der Salami: Schnitte vs. Stücke
Im Modulkopf steht übrigens: Dim rng, c As Range - VBA benötigt den Typ für *jede* einzelne Variable, sonst geht es von Variant aus. Richtig wäre also: Dim rng As Range, c As Range
Schöne Grüße,
Michael
Anzeige
AW: Nummerierung aller befüllten Zeilen
06.03.2017 15:13:48
stoibech
Hallo ihr beiden,
allerbesten Dank. Hab meinen Fehler erkannt und nun läuft es dank eurer Hilfe!
gern geschen & @Zwenn,
06.03.2017 15:19:22
Michael
hast Du die andere Geschichte mit dem Pascal-Progrämmchen mal getestet?
Gruß,
Michael
AW: gern geschen & @Zwenn,
06.03.2017 16:27:55
Zwenn
Hallo Michael,
ich habe damit schon rumprobiert, ja. Das Pascal Programm ließ sich für mich sehr einfach kompilieren, denn Pascal ist ja Lehrsprache des ersten Semesters in Hagen, um die Grundlagen der Programmierung zu vermitteln. Free Pascal und eine kleine IDE namens Geany befinden sich also sowieso auf meinem Rechner :-)
Viel mehr habe ich allerdings noch nicht bewerkstelligt. Sprich, ich habe mein eigentliches Problem mit meinem Makro noch nicht weiter auf Basis Deines Vorschlags untersucht. Da ich inzwischen aber die Daten und Bilder vom Februar habe, mache ich mir vor dem nächsten Durchlauf der Monatstabelle nochmal Gedanken dazu.
Viele Grüße,
Zwenn
Anzeige
@Zwenn,
06.03.2017 19:06:36
Michael
Hi Zwenn,
Geany kenne ich noch gar nicht, ich hatte zuletzt den Lazarus installiert - muß ich gleich gugeln.
Frohes Schaffen und Grüße zurück,
Michael
AW: @Zwenn,
06.03.2017 19:59:34
Zwenn
Jou, Lazarus ist in der Pascal-Welt wohl State Of The Art. Aber ich entwickle ja nicht wirklich mit der Sprache und für die paar Zeilen, die wir im Studium programmieren, wurde Geany empfohlen. Falls Du damit was ausprobieren willst, achte darauf, dass im Pfad zum Quelltext kein deutsches Sonderzeichen vorkommt, sondern nur ASCII. Mit anderen Zeichen-Codierungen kommt Geany nicht klar und schmeißt den Fehler aus, dass die verwendete Datei nicht gefunden werden konnte.
Hattest Du meine Antwort eigentlich noch gelesen im anderen Thread? Hatte da erläutert, wozu ich den Aufwand mit dem Hashen überhaupt betreibe. Damit Du weißt, wofür Du Dir die Mühe gemacht hast :-)
Anzeige
AW: @Zwenn,
07.03.2017 13:28:38
Michael
Hi,
danke für die Info. Laut geany.org eine "lightweight-IDE" bzw. ein "Editor" - aha. Ich verwende gerne den "Synwrite": der ist (auch für gewerbliche Zwecke) kostenlos (im Gegensatz zu Phase5): der hat Syntax-hiliting für alle möglichen Sprachen, eignet sich aber auch gut, um mal eine .csv genau anzuschauen.
FP bringt keine Bibliothek für den Zugriff auf die Zwischenablage mit; Lazarus hat eine...
Der Beitrag wurde nicht mehr angezeigt. Zum Glück lade ich mir turnusmäßig meine "100 Beiträge" runter und stecke sie je in ein Tabellenblatt.
Heißt: ich hab's gerade nachgelesen.
Interessante Geschichte. Bei so was würde ich auch gern mal mitarbeiten...
Die Dateinamen werden gehasht, damit sie einfacher zu vergleichen sind?
Ich denke da immer ein Scripting.dictionary: das ist anscheinend nicht direkt begrenzt (3 Mio. sollten schon gehen), und der Vorzug ist halt der "indizierte" Zugriff, d.h. "schreibe einen Datensatz" findet automatisch heraus, ob er schon da ist und überschreibt ihn: dabei kann man ja hochzählen oder Strings anhängen (Pfad + Trennzeichen) und das hinterher auswerten.
Na denn, viel Spaß,
Michael
Anzeige
AW: @Zwenn,
07.03.2017 16:55:12
Zwenn
Hallo Michael,
nein, die Dateinamen werden nicht gehasht, sondern die Bilder selbst. Diese haben alle unterschiedliche Namen und das sind ja selbst nur Strings, die sich einfach vergleichen ließen. Ich habe das etwas missverständlich ausgedrückt im anderen Thread.
Mit dem Dictionary habe ich ehrlich gesagt noch nie gearbeitet. Aber da es eine Technologie ist, die im RAM gehalten wird, nützt mir das in diesem Fall auch eher wenig nehme ich an. Für meine Zwecke ist eine richtige Datenbank besser geeignet. Zumal ich nach der Auswertung, welches Bild an mehr als einem Account hängt, noch manuell sichten muss, welche Bilder der Ergebnismenge und damit, welche Accounts, denn wirklich relevant sind.
Dazu verwende ich die Berichtsfunktion der DB. Ich lasse mir die Ergebnismenge als HTML Datei mit allen zugehörigen Bildern und relevanten Textfeldern generieren. Die öffne ich dann im Browser, scrolle munter drauf los und bin gespannt, ob der ganze Aufwand sich denn auch in entsprechenden Funden wiederspiegelt ;-)
Übergehen muss ich dabei alle Bilder, die offensichtlich von unserem Auftraggeber geklaut sind, weil die von vielen Leuten einfach verwendet werden, die absolut gar nix mit einander zu tun haben. Ausserdem alle Bilder, die offensichtlich gebrauchte Gegenstände zeigen. Das ist eine ziemliche Sisyphus Arbeit, bei der ich keinen Ansatz sehe, wie man das automatisieren kann. Da willst Du dann unter Garantie nicht mehr gerne mitarbeiten ;-)
Gruß,
Zwenn
Anzeige
AW: @Zwenn,
07.03.2017 18:10:36
Michael
Na, teste es doch mal: https://www.herber.de/bbs/user/112008.xlsm
1. Testwerte erzeugen
2. Dictionary
3. Ergebnis in 2. Blatt ansehen.
Das Dictionary besteht aus "keys" und "items".
Die Keys sind in dem Fall der Inhalt der Zelle, wobei bei mehrfachem Vorkommen eines Inhalts mehrere Items mit "|" getrennt angehängt werden (nämlich Zeile/Spalte der jeweiligen Zelle).
Analog könnte ich mir vorstellen, daß Du die Hashes als key verwendest und die jeweiligen Pfade/Dateien mit "|" (oder was auch immer) anhängst.
Im Prinzip kannst Du dann mit arr=split(o(key),"|") ein Array erzeugen, in dem Du pro hash alle Treffer hast - oder Du führst ein zweites dictionary mit, das nur jeweils
o2(wert)=o2(wert)+1
1 pro Treffer addiert - wenn hier 1 drinsteht, brauchst Du das mit den Strings gar nicht erst bemühen.
Wenn beide den gleichen key haben, ist ja im Nu formuliert
if o2(wert)>1 then arr=split(o(wert),"|")
Muß weg.
Gruß,
Michael
Anzeige
AW: Nummerierung aller befüllten Zeilen
06.03.2017 15:04:33
Zwenn
Hallo stoibech,
mit Deiner Beispielmappe funktioniert es mit diesem Makro

Sub nummerieren()
Dim i As Long
Dim Zeilen As Long
Dim Zaehler As Long
Zaehler = 1
Zeilen = Cells(Rows.Count, 5).End(xlUp).Row
For i = 17 To Zeilen
If Cells(i, 1).Interior.ColorIndex = xlNone Then
Cells(i, 1).Value = Zaehler
Zaehler = Zaehler + 1
End If
Next i
End Sub
Ob eine Einfärbung vorliegt, prüfst Du allerdings auch auf die erste Spalte. Was es mit dem 'Spalten Überspringen' in Deiner Erklärung auf sich hat, habe ich nicht nachvollziehen können, denn Du hast die Zellen der Spalten B, C und D in Deiner eigentlichen Tabelle zusammengefasst. Diese werden über B angesprochen.
Viele Grüße,
Zwenn
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige