Clever-Excel-Forum

Normale Version: Automatisiertes Einfügen von Zeilen anhand von Faktoren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
Hallo,

da dies mein erster Beitrag in diesem Forum ist, so seht es mir bitte nach, sollte ich irgendwelche unausgesprochenen Verhaltensweisen innerhalb des Forums nicht einhalten und weißt mich bitte darauf hin.
Da ich mich nun erst seit kurzer Zeit in die Thematik VBA tiefer einarbeite, kann es vorkommen, dass einige der von mir verwendeten Begrifflichkeiten ein wenig ungeschliffen klingen. Im Vorraus: ich bitte es zu
verzeihen.   :17:
Ach so...vielen Dank für die regsame Betriebsamkeit in diesem Forum. Ich weiß gar nicht mehr, wie oft mir die zahlreichen Informationen in diesem Forum geholfen haben.

Aber nun zu meiner Frage:

Für unsere Firma versuche ich momentan einige Prozesse innerhalb von Excel, die momentan noch händisch ausgeführt werden, zu automatisieren (zumindest so gut es geht). Dabei bin ich folgende Thematik gestoßen:

In unserer Firma (Planungen im Bereich der Infrastruktur), werden Hausanschlüsse untereinander in Listen eingetragen (sh. angehängten Screenshot 1). Nach einer gewissen Prozedur innerhalb der Planungsstrukturen,
soll die Liste erweitert werden (sh. angehängten Screenshot 2). Anhand der Wohneinheiten in Spalte "D" wird die jeweilige Zeile mehrfach untereinander eingefügt und die Zellen in Spalte "D" verbunden und zentriert.

Ist es generell möglich, diesen Prozess zu automatisieren? Die Spaltenposition ist in diesen Listen immer fixiert, lediglich die Anzahl der Zeilen wäre eine unbekannte Größe. Oder bietet Excel (und/oder VBA) diese Möglichkeit
überhaupt nicht an?
Sollte es möglich sein, wäre ich um kurze Hinweise dankbar, in welche Richtung ich mein Augenmerk richten muss.
Und sollte dieses Thema bereits im Forum besprochen worden sein, bitte ich um Verzeihung, da ich dann scheinbar unter den falschen Begrifflichkeiten eine ergebnislose Suche gestartet habe.

Euch allen einen schönen Abend


Gruß Bookshelf3011
Hallo,

wenn Du wirklich so fleißig mitgelesen hast, dann frage ich mich, warum Du uns trotzdem bunte Bildchen anbietest.

Wenn ich Dich richtig verstanden habe, dann suchst Du sowas
Zitat:'Leere Zellen spielen keine Rolle,
'die Anweisung ermittelt die absolut letzte Zelle.
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

'Zeile

'letzte Zeile in Spalte A suchen
Zeilenanzahl = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

' Spalte:
'letzte Spalte in Zeile 1 suchen
Spaltenanzahl = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column

' Zelle:
Sub ErsteLeereZelle()
Dim strAddr As String
strAddr = Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Address
Range(strAddr).Value = Range("B1").Value
End Sub

'Ermittlung Zeilennummer erste freie Zeile in Spalte A
Dim lRow As Long
lRow = Range(Cells(1, 1), Cells(Rows.Count, 1)).Find(What:="").Row
Moin,
... und vergiss die verbundenen Zeilen. Damit handelst du die mehr Ärger ein als das "schicke" aussehen Wert ist. Exclamation Schau mal hier ...
Hallo,

hier zwei Lösungsmöglichkeiten:

1. mit folgendem Ergebnis:

Arbeitsblatt mit dem Namen 'Tabelle2'
 ABCDE
1StraßeHausnummerzusatzwohneinheitenBemerkunge
2Musterstraße3 1 / 1 
3Musterstraße17a1 / 3 
4Musterstraße17a2 / 3 
5Musterstraße17a3 / 3 
6Musterstraße9 1 / 1 
7Musterstraße8a1 / 2 
8Musterstraße8a2 / 2 
9Musterstraße8 1 / 2 
10Musterstraße8 2 / 2 
11Musterstraße7 1 / 1 
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

das macht dieser Code:


Code:
Sub ordne_um()
 Dim i As Long, j As Long, k As Long
 Dim lngZ As Long
 Dim lngAnzahl As Long, lngEinheiten As Long
 Dim varA, varZiel
 
 With Sheets("Tabelle1")
   lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row
   varA = .Range("A6:D" & lngZ)
   lngEinheiten = Application.Sum(.Range("D6:D" & lngZ))
 End With
 
 With Sheets("Tabelle2")
   lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
   .Range("A2:D" & lngZ).ClearContents
   varZiel = .Range("A2:D" & lngEinheiten + 1)
   
   For i = LBound(varA) To UBound(varA)
     For j = 1 To varA(i, 4)
       varZiel(k + j, 1) = varA(i, 1)
       varZiel(k + j, 2) = varA(i, 2)
       varZiel(k + j, 3) = varA(i, 3)
       varZiel(k + j, 4) = "'" & j & " / " & varA(i, 4)
     Next j
     k = k + j - 1
   Next i
   
   .Range("A2:D" & lngEinheiten + 1) = varZiel
 End With
End Sub


Oder, wie von Dir gewünscht mit verbundenen Zellen, was so aussieht:

Arbeitsblatt mit dem Namen 'Tabelle3'
 ABCDE
1StraßeHausnummerzusatzwohneinheitenBemerkunge
2Musterstraße3 1 
3Musterstraße17a3 
4Musterstraße17a 
5Musterstraße17a 
6Musterstraße9 1 
7Musterstraße8a2 
8Musterstraße8a 
9Musterstraße8 2 
10Musterstraße8  
11Musterstraße7 1 
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

Dafür ist dieser Code verantwortlich:

Code:
Sub ordne_um_mit_verbundenen_Zellen()
 Dim i As Long, j As Long, k As Long
 Dim lngZ As Long
 Dim lngAnzahl As Long, lngEinheiten As Long
 Dim varA, varZiel
 
 With Sheets("Tabelle1")
   lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row
   varA = .Range("A6:D" & lngZ)
   lngEinheiten = Application.Sum(.Range("D6:D" & lngZ))
 End With
 
 With Sheets("Tabelle3")
   .Columns("D").MergeCells = False
   lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
   .Range("A2:D" & lngZ).ClearContents
   varZiel = .Range("A2:c" & lngEinheiten + 1)
   
   For i = LBound(varA) To UBound(varA)
     .Cells(k + 2, 4) = varA(i, 4)
     If varA(i, 4) > 1 Then .Range(.Cells(k + 2, 4), .Cells(k + varA(i, 4) + 1, 4)).MergeCells = True
     For j = 1 To varA(i, 4)
       varZiel(k + j, 1) = varA(i, 1)
       varZiel(k + j, 2) = varA(i, 2)
       varZiel(k + j, 3) = varA(i, 3)
     Next j
     k = k + j - 1
   Next i
   
   .Range("A2:c" & lngEinheiten + 1) = varZiel
 End With
End Sub


Das Original wird nicht verändert.
Die Ergebnisse stehen einmal in Tabelle2 und einmal in Tabelle3.
Super, vielen Dank für all die hilfreichen Antworten...

Damit werde ich mich an die Arbeit machen.

@GMG-CC:
Ja, du hast recht, was die verbundenen Zellen angeht. Leider wünschen sich einige unserer Kunden dieses "schicke" Aussehen. 
Ginge es nach mir, würde ich liebend gern darauf verzichten.

Mit freundlichem Gruß

Bookshelf3011
Hallo,

anstatt der verbundenen Zellen kann man beispielsweise auch über Bereich zentrieren.
Dann gibt es dies Probleme nicht
Moin Peter,
die Möglichkeit "Über Auswahl zentrieren" gibt es IMHO nur für die horizontale Darstellung (und da ist es eine feine Sache). Im Beispiel war allerdings eine vertikale Zentrierung gefordert ...
Hallo Günther,

ob das nur horizentral funktioniert kann ich nichtmal sagen.
Ich habe es in meinem gesamten Excelleben vertikal noch nie einsetzen wollen/müssen.
Hallo Bookshelf3011,

bitte bleib im Forum und stell Deine weitergehenden Fragen hier.
Deine Fragen und die die Antworten darauf können auch Anderen helfen.
(Du hast Deine PN abgeschaltet, deshalb hier die Antwort)
Hallo atilla,

entschuldige, eine von den "ungeschriebenen" Regeln in einem Forum mit denen ich nicht vertraut bin.


Entschuldige vorab bitte die sonntägliche Störung, nur hätte ich zu deinem zweiten Code (der wunderbar funktioniert) noch eine Zusatzfrage:

Ist es möglich, dass, sollten innerhalb der Auflistung leere Zeilen entstehen, diese ebenfalls 1:1 mit in die nächste Tabelle aufgenommen werden?
Momentan werden durch den Code die leeren Zeilen ignoriert und mit dem nächsten Inhalt aufgefüllt.
Was ich ebenfalls noch fragen wollte:
Ist es möglich, Spalten die hinter den abgefragten Wohneinheiten stehen ebenfalls mitzunehmen? In diesen würde lediglich Freitext stehen...

Entschuldige noch einmal die zusätzliche Störung...


Mit freundlichem Gruß

Bookshelf3011
Seiten: 1 2 3