Anzeige
Archiv - Navigation
1388to1392
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

Seitenzahlen automatisch zusammenfassen

Seitenzahlen automatisch zusammenfassen
08.11.2014 10:49:44
amfgimbte
Hallo zusammen,
ich habe ein kleines Problem mit meinem Makro-Code, den ich geschrieben habe.
Ich habe ein Inhaltsverzeichnis, für das je nach Index die Seitenzahlen aus den betreffenden Zeilen zu einem langen Text in einer Spalte zusammengefasst werden soll. Das sieht beispielsweise so aus:
1 2
3 6
7 9
15 18
19 35
38 41
Zusammenfassung in der Spalte: 1 bis 2, 3 bis 6, 7 bis 9, 15 bis 18, 19 bis 35, 38 bis 41
Nun möchte ich die Zusammenfassung in der Weise modifizieren, als dass Folgeseiten zu einer Ausgabe zusammengefasst werden. Ich stelle mir das Ergebnis so vor:
1 bis 9, 15 bis 35, 38 bis 41
Mein Code sieht bisher so aus:

Sub SeitenzahlenVerbinden()
Dim Ausgabe As Variant
For i = 1 To 39
If Not Cells(i + 23, "BJ") = "" And Not Cells(i + 23, "BK") = "" Then
Ausgabe = Ausgabe & Cells(i + 23, "BJ") & Cells(i + 23, "BC") & " bis " & Cells(i + 23,  _
_
_
_
"BK") & Cells(i + 23, "BC") & ", "
ElseIf Not Cells(i + 23, "BJ") = "" And Cells(i + 23, "BK") = "" Then
Ausgabe = Ausgabe & Cells(i + 23, "BJ") & Cells(i + 23, "BC") & ", "
Else
Ausgabe = Ausgabe
End If
Next i
Laenge = Len(Ausgabe)
Cells(3, "BM") = Left(Ausgabe, Laenge - 2)
End Sub

Da es auch Spalten geben kann, in denen keine Seitenzahlen vorkommen, überprüfe ich dies vorher, damit in der Ausgabe keine "leeren" Seitenzahlen mit dem Bindewort "bis" stehen.
Habt ihr eine Idee, wie ich das schaffen könnte? Ich denke, dass ich es mit einer weiteren Schleife (For, While?) machen müsste, aber ich schaffe es nicht.
Gruß,
amfgimbte

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Seitenzahlen automatisch zusammenfassen
12.11.2014 11:25:37
Michael
Hallo amfgimbte,
mir ist etwas schleierhaft, warum Du auf die Spalten BJ und BK prüfst, Dir dann aber Werte aus BC holst.
Beschreibe doch bitte mal, was nun wo steht, dann wirst Du geholfen.
Schöne Grüße,
Michael

AW: Seitenzahlen automatisch zusammenfassen
12.11.2014 20:01:53
amfgimbte
Hallo Michael,
du hast Recht. Es wirkt für Außenstehende in der Tat etwas verwirrend. Ich versuche das Problem etwas vereinfachend darzustellen.
Es gibt in den Spalten B und C (Zeile 2 bis 7) jeweils die 1. und letzte Seite eines Kapitels aus einem Inhaltsverzeichnis.
1 2
3 6
8 14
16 19
21 35
36 41
Beim Klick auf einen Button sollen alle Seitenzahlen aus den Spalten B und C zu einem Text zusammengefasst werden. Dieser wird später an Word für ein Anschreiben übergeben.
Bisher habe ich den VBA-Code nur so geschrieben, dass alle Seitenzahlen der Kapitel "stumpf" aneinander geschrieben und ausgegeben werden. Doch ich möchte den Code so "clever" machen, dass er Seitenzahlen, die aufeinander ohne "leere" Seiten folgen, zusammenfasst,
Im Beispiel der EXCEL-Datei soll die Ausgabe in E7 im Endeffekt so aussehen:
1 bis 6, 8 bis 14, 16 bis 19, 21 bis 41
Der Code dazu lautet:

Sub Generieren()
Dim Seiten(1 To 6, 1 To 2) As Variant, Ausgabe As Variant
Dim i As Integer
For i = 1 To 6
Seiten(i, 1) = Cells(1 + i, 2)
Seiten(i, 2) = Cells(1 + i, 3)
Next i
Columns("E:E").Select 'SpalteE vorher leeren
Selection.ClearContents
For i = LBound(Seiten) To UBound(Seiten)
Ausgabe = Ausgabe & ", " & Seiten(i, 1) & " bis " & Seiten(i, 2)
Next i
Cells(7, 5) = Ausgabe
End Sub
Ich hoffe, dass ihr mein Problem nun besser verstanden habt. Eigentlich müsste es - so würde ich es mir vorstellen - mit einer zusätzlichen Schleife funktionieren. Doch ich schaffe es einfach nicht.

Anzeige
zwischendings
13.11.2014 14:16:33
Michael
Hallo amfgimbte,
so wie Du mit verschiedenen Datenstrukturen hantierst, hast Du sicher mehr als Basiskenntnisse. Gut so.
Ich muß allerdings aus dem Haus und antworte morgen - sofern nicht jemand anderes die Lösung skizziert.
Schöne Grüße,
Michael

AW: zwischendings
13.11.2014 19:36:36
amfgimbte
Du hast mich erwischt, Michael. ;-)
Ich hatte im Studium ein Semester VBA. Damals dachte ich: "Das brauchst du nie wieder." Vertan Vertan, sprach der Hahn . . .

non scolae, sed vitae dingsimus
14.11.2014 21:48:51
Michael
Hallo amfgimbte,
manchmal geht es doch zäher, als man meint - wenn man halt drauflos programmiert, anstatt sich mit Zettel und Bleistift hinzusetzen...
In der Tabelle
https://www.herber.de/bbs/user/93782.xls
findest Du die "doofe" Halblösung mit Hilfsspalten und die VBA-Lösung. Ich habe die Variablen in einen extra Bereich geschrieben, quasi zum Debuggen, das kannste ja wieder löschen.
Der nachfolgende Code tut das gleiche, nur ohne Debuggen, weil's fürs Forum netter ist:
Sub berechnenForum()
Z_von = Range("A3") ' z.B. 2
Zeile = Z_von
Z_bis = Range("A5") ' z.B. 7
' nur zum Testen; im Betrieb übergibst Du
' eben Deine Variablen
' auf die Abfrage nach leeren Zellen hab ich
' für den Moment verzichtet
' 1. aus Faulheit und
' 2., weil ich nicht weiß, ob komplette Zeilen
'    leer sein können, oder nur einer von beiden
'    Werten vorhanden ist oder wie es halt genau ist.
ausgabe = ""
von1 = Range("B" & Z_von)
bis1 = Range("C" & Z_von)
While Zeile  bis1 + 1 Then
ausgabe = ausgabe & von1 & " bis " & bis1 & ", "
von1 = von2
End If
bis1 = bis2
Zeile = Zeile + 1
Wend
Range("D" & Zeile) = ausgabe
End Sub
Schöne Grüße,
Michael

Anzeige
AW: non scolae, sed vitae dingsimus
16.11.2014 10:16:39
amfgimbte
Hallo Michael,
vielen Dank für deine Hilfe! Das klappt soweit bestens und beantwortet meine Frage im Grunde genommen schon treffend.
Doch wie so vieles im Leben, gibt es auch immer wieder die Ausnahme von der Regel. ;-)
Ich hatte meinen Eingangs-Code seinerzeit extra mit Arrays geschrieben, weil ich dachte, dass ich die Arrays noch einmal benötigen werde. Denn je nach Länge der Seitenzahlen kann "Ausgabe" natürlich sehr lang werden. Daher dachte ich seinerzeit, dass ich die "Ausgabe" auf beispielsweise 10 Arrays beschränken kann und die Array-Werte 11 bis 21 in die nächste Zeile geschrieben werden usw. Der Hintergrund ist der, dass die Zusammenfassung der Seitenzahlen an eine Briefvorlage in Word übergeben werden und dort nicht unendlich viel Platz für eine lange "Ausgabe" ist.
Wäre diese "Zerlegung" auch mit deinem Code möglich, Michael? :-)
Ein weitere Ausnahme der Regel ist, dass nicht in jeder Zeile, die die Schleife durchläuft, eine Zahl oder Zahlen stehen werden. Die Liste könnte auch so aussehen:
1
LEER
2 bis 5
LEER
LEER
LEER
6
8 bis 10
Bei den leeren Zeilen steigt die Schleife aus. Nur wieso?
Gruß,
Max
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige