Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Blöcke fortlaufend nummerieren

271 views
Skip to first unread message

Michael Feske

unread,
Jul 2, 2008, 3:08:00 AM7/2/08
to
Hallo alle zusammen,
ich habe 1400 Datensätze, dabei kommt alle 5 bis 7 felder eine neue Zahl.
jetzt sollen die Zeilen durch nummeriert werden, jedoch nur wo eine neue
Zahl auftaucht, also ungefähr so:
001 4578
001 4578
001 4578
002 5689
002 5689

usw.

Wäre schön, wenn Ihr mir da mit einem entsprechenden Makr weiterhelfen
könntet, mit makros habe ich bisher nur sehr wenig zu tun :-)

Gruß
Micha

Thomas Kühn

unread,
Jul 2, 2008, 4:39:24 AM7/2/08
to
Hallo Michael,

Mit einem Makro wirst Du da nicht wirklich weiterkommen.

Zur Lösung gibt es mehrere Ansätze. Hier mal einer davon:

Tabelle:
Feld1 Feld2
4578
4578
4578
5689
5689

Function a()

Dim db as DAO.Database
Dim rs as DAO.Recordset

Dim strSQL as String
Dim iCounter as Integer
iCounter = 1
set db = CurrentDB
strSQL = "SELECT DISTINCT Feld2 FROM Tabelle"
Set rs = db.OpenRecordset(strSQL)
While Not rs.EOF
strSQL = "UPDATE Tabelle Set Feld1 = " & iCounter & _
" WHERE Feld2 = " & rs.Fields(0)
db.Execute strSQL, dbFailOnError
iCounter = iCounter + 1
rs.MoveNext
Wend
rs.Close
set rs = Nothing
End Function

Tabelle nun:
Feld1 Feld2
1 4578
1 4578
1 4578
2 5689
3 5689

Über Format(Feld1, "000") kommst zu zu deinem Ergebnis.

Gruß Thomas

--
http://www.thomas-kuehn.de

Thomas Kühn

unread,
Jul 2, 2008, 5:06:16 AM7/2/08
to
Ich muß wohl die Ingrid machen, obiges Beispiel wäre
für Access ganz nett gewesen.

Mal angenommen, es geht um Spalte A und B

Function a()
Dim iRow As Integer
Dim iWert As Integer
Dim iCounter as Integer

iRow = 1 ' Startzeile
iCounter = 1
iWert = Cells(iRow, 2)
While Cells(iRow, 2) <> ""
If Cells(iRow, 2) <> iWert Then
iWert = Cells(iRow, 2)


iCounter = iCounter + 1

End If
Cells(iRow, 1) = Format(iCounter, "000")
iRow = iRow + 1
Wend

End Function

So sollte es unter Excel klappen.

Daniela Messer

unread,
Jul 2, 2008, 5:10:21 AM7/2/08
to
Hi Michael,

sind die Datensätze in Zeilen angeordnet?
Dann nimm doch einfach eine Formel:

=WENN(B2<>B1;MAX($A$1:$A1)+1;$A1)

Viele Grüße
Daniela Messer

Michael Feske

unread,
Jul 2, 2008, 5:45:00 AM7/2/08
to
Hallo Thomas,
vielen Dank für die schnelle Hilfe.
Wo muß ich das den jetzt einfügen ? In den VBA Editor ?

Gruß
Micha

"Thomas Kühn" schrieb:

Thomas Kühn

unread,
Jul 2, 2008, 5:54:26 AM7/2/08
to
Hallo Michael,

> vielen Dank für die schnelle Hilfe.
> Wo muß ich das den jetzt einfügen ? In den VBA Editor ?
>

Genau dort. Dort kannst Du die Funktion auch mit F5
ausführen.

Michael Feske

unread,
Jul 2, 2008, 6:33:01 AM7/2/08
to
Hallo Thomas,
habe das jetzt als neues Modul in der Arbeitsmappe eingefügt. War das
richtig ?
Wie kommt es dazu, das ich es mit F5 aufrufen kann ? Kann ich es auch
manuell aufrufen ?

Danke und Gruß
Micha

"Thomas Kühn" schrieb:

> Hallo Michael,

Michael Feske

unread,
Jul 2, 2008, 6:37:01 AM7/2/08
to
Hallo Thomas,
nochmal ich :-)
Ist irow der spaltenbezeichner ?
Es sind bei mir nämlich die Spalten B (wo die Nummerierung vorgenommen
werden soll) und E wo die Nummern schon stehen.

Gruß
Micha

"Thomas Kühn" schrieb:

> Hallo Michael,

Thomas Kühn

unread,
Jul 2, 2008, 6:42:19 AM7/2/08
to
Hall Michael,


> habe das jetzt als neues Modul in der Arbeitsmappe eingefügt. War das
> richtig ?

Ja

> Wie kommt es dazu, das ich es mit F5 aufrufen kann ?
Kann ich es auch
> manuell aufrufen ?
>

Mit F5 startest Du im VBA Editor die Funktion in der
der Cursor steht. Das ist ziemlich manuell.

Thomas Kühn

unread,
Jul 2, 2008, 7:50:12 AM7/2/08
to
Hallo Michael,

> Ist irow der spaltenbezeichner ?

row (engl.) Reihe od. Zeile.

> Es sind bei mir nämlich die Spalten B (wo die Nummerierung vorgenommen
> werden soll) und E wo die Nummern schon stehen.


Function a()
Dim iCol1, iCol2 As Integer


Dim iRow As Integer
Dim iWert As Integer
Dim iCounter as Integer

iCol1 = 2 ' Spalte B
iCol2 = 5 ' Spalte E

iRow = 1 ' Startzeile
iCounter = 1

iWert = Cells(iRow, iCol2)
While Cells(iRow, iCol2) <> ""
If Cells(iRow, iCol2) <> iWert Then
iWert = Cells(iRow, iCol2)


iCounter = iCounter + 1
End If

Cells(iRow, iCol1) = Format(iCounter, "000")


iRow = iRow + 1
Wend

End Function

Gruß Thomas

--
http://www.thomas-kuehn.de

Eberhard Funke

unread,
Jul 2, 2008, 9:18:07 AM7/2/08
to
Am Wed, 2 Jul 2008 02:10:21 -0700 (PDT) schrieb Daniela Messer:

> sind die Datensätze in Zeilen angeordnet?
> Dann nimm doch einfach eine Formel:
>
> =WENN(B2<>B1;MAX($A$1:$A1)+1;$A1)

Hallo Daniela,

nicht ganz:-(
Unter Berücksichtigung der neuen Situation (Zahlen in Spalte E, Numerierung
in Spalte B):
B1: 1
B2=WENN(E2<>E1;G1+1;G1)
Spalte B als 000 formatieren.


@ Thomas:
Da der OP sich mit Makros wenig auskennt, wäre es m. E. besser, das nicht
als benutzerdefinierte Funktion zu schreiben. Denn wenn er jetzt mal auf
die Idee kommt, die Funktion über den Button "Funktion einfügen" -->
"benutzerdefiniert" zu starten, dann ist die Verwirrung gross.

--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de

Michael Feske

unread,
Jul 2, 2008, 9:25:01 AM7/2/08
to
Hallo Thomas,
er gibt mir leider eine Typenunverträglichkeit für
iWert = Cells(iRow, iCol2)
aus. Was ist das ?

gruß
Micha

"Thomas Kühn" schrieb:

Thomas Kühn

unread,
Jul 2, 2008, 10:25:11 AM7/2/08
to
Hallo Michael,

> er gibt mir leider eine Typenunverträglichkeit für
> iWert = Cells(iRow, iCol2)
> aus. Was ist das ?

Wahrscheinlich steht irgendwo keine Zahl sondern ein Text.
Versuche es mit

Dim iWert As String

Michael Feske

unread,
Jul 2, 2008, 11:18:00 AM7/2/08
to
.. du hast ja so recht :-)

"Thomas Kühn" schrieb:

0 new messages