Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Automatisiertes Einfügen von Zeilen anhand von Faktoren
#11
Hallo,

hier eine neue angepasste Lösung:


Code:
Sub ordne_um_mit_verbundenen_Zellen2()
 Dim i As Long, j As Long, k As Long
 Dim lngZ As Long
 Dim lngAnzahl As Long, lngEinheiten As Long
 Dim strgAddressen As String
 Dim varA, varZiel
 
 With Sheets("Tabelle1")
   lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row
   varA = .Range("A6:K" & lngZ)                        'Bereich, der eingelesen werden soll Hier A6:K bis letzte belegte Zeile in A
   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").Resize(lngZ - 1, UBound(varA, 2)).ClearContents
   varZiel = .Range("A2").Resize(lngEinheiten, UBound(varA, 2))
   
   For i = LBound(varA) To UBound(varA)
     If varA(i, 4) > 1 Then strgAddressen = strgAddressen & ", " & .Range(.Cells(k + 2, 4), .Cells(k + varA(i, 4) + 1, 4)).Address
     varZiel(k + 1, 4) = varA(i, 4)
     For j = 1 To varA(i, 4)
       For n = 1 To UBound(varA, 2)
         varZiel(k + j, n) = varA(i, n)
         If n = 3 Then n = n + 1
       Next n
     Next j
     k = k + j - 1
   Next i
   
   strgAddressen = Mid(strgAddressen, 3)
   .Range("A2").Resize(lngEinheiten, UBound(varA, 2)) = varZiel
   .Range(strgAddressen).MergeCells = True
 End With
End Sub


Im Code ist der eingelesene Bereich kenntlich gemacht. Dort gegebenenfalls anpassen.
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Bookshelf3011
Antworten Top
#12
Hallo atilla,

vielen Dank für den Code - das weitere übernehmen klappt wunderbar. Muss ich noch irgendetwas beachten, damit er die leeren Zellen mit übernimmt und diese nicht auffüllt?
Meine VBA-Kenntnisse sind leider noch nicht soweit ausgeprägt, dass ich den Code dementsprechend interpretieren kann.

Vielen Dank und einen schönen Abend.

Mit freundlichem Gruß

Bookshelf3011
Antworten Top
#13
(02.04.2017, 19:02)Bookshelf3011 schrieb: Muss ich noch irgendetwas beachten, damit er die leeren Zellen mit übernimmt und diese nicht auffüllt?

Hallo,

tut er das jetzt nicht?

Mit leeren Zellen ist doch gemeint, dass bei Wohneinheiten nichts steht.
Dann sollte mein zuletzt eingestellter Code das doch berücksichtigen.
Gruß Atilla
Antworten Top
#14
Hallo atilla,

momentan ist es so, dass er die leeren Zeilen in der "Tabelle3" auffüllt, wenn in der Spalte Wohneinheiten kein Wert vorhanden ist.
Liegt es vielleicht daran, dass ich die Variable "n" definiert habe? VBA gibt mir diese nämlich als Fehlermeldung aus, wenn ich den Code ausführen will.
Ich habe "n" als "Long" definiert.

Könnte das der Grund sein?

Mit freundlichem Gruß

Bookshelf3011
Antworten Top
#15
Hallo,

mit n hast Du richtig gemacht.

Aber ich bin jetzt ein wenig durcheinander.
Kannst Du bitte am Beispiel erklären, was passiert und was nicht passiert aber passieren soll.
Gruß Atilla
Antworten Top
#16
Hallo,

sehe gerade, dass ich den weiter korrigierten Code gar nicht eingestellt habe.
Sorry, ich dachte, dass ich ihn eingestellt hätte.

Hier ist er:

Code:
Sub ordne_um_mit_verbundenen_Zellen2()
 Dim i As Long, j As Long, k As Long, n as Long
 Dim lngZ As Long
 Dim lngAnzahl As Long, lngEinheiten As Long
 Dim strgAddressen As String
 Dim varA, varZiel
 
 With Sheets("Tabelle1")
   lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row
   varA = .Range("A6:K" & lngZ)                        'Bereich, der eingelesen werden soll Hier A6:K bis letzte belegte Zeile in A
   lngEinheiten = Application.Sum(.Range("D6:D" & lngZ))
   If lngZ - 5 > Application.Count(.Range("D6:D" & lngZ)) Then
     lngEinheiten = lngEinheiten + lngZ - 5 - Application.Count(.Range("D6:D" & lngZ))
   End If
 End With
 
 With Sheets("Tabelle3")
   .Columns("D").MergeCells = False
   lngZ = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
   .Range("A2").Resize(lngZ - 1, UBound(varA, 2)).ClearContents
   varZiel = .Range("A2").Resize(lngEinheiten, UBound(varA, 2))
   
   For i = LBound(varA) To UBound(varA)
     If varA(i, 4) > 1 Then strgAddressen = strgAddressen & ", " & .Range(.Cells(k + 2, 4), .Cells(k + varA(i, 4) + 1, 4)).Address
     varZiel(k + 1, 4) = varA(i, 4)
     If varA(i, 4) = "" Then varA(i, 4) = 1
     For j = 1 To varA(i, 4)
       For n = 1 To UBound(varA, 2)
         varZiel(k + j, n) = varA(i, n)
         If n = 3 Then n = n + 1
       Next n
     Next j
     k = k + j - 1
   Next i
   
   strgAddressen = Mid(strgAddressen, 3)
   .Range("A2").Resize(lngEinheiten, UBound(varA, 2)) = varZiel
   .Range(strgAddressen).MergeCells = True
 End With
End Sub
Gruß Atilla
Antworten Top
#17
Guten Abend atilla,

ich hoffe es stört dich nicht, dass ich Screenshots zur besseren Erklärung mit beigefügt habe...

Momentan erhalte ich - sofern die Zelle Wohneinheiten leer ist - den Laufzeitfehler '9'.

Im vorherigen Code gab er mir das Ergebnis aus dem zweiten Screenshot ("Screenshot B") wieder.

   

   

   

Vielen Dank für deine Mühen und einen schönen Sonntagabend.

Mit freundlichem Gruß

Bookshelf3011
Antworten Top
#18
Hallo,

ok, ich ging davon aus, dass in WE nicht steht, aber es sind ganze leere Zeilen dazwischen.
Warum???
Lösch sie, das ist ganz einfach. Kopier die Tabelle im Ganzen und lösch die leeren Zeilen und führ den Code dann aus.
Das kann ich, bei bedarf auch einarbeiten.

Ich kann aber auch im bestehenden Code die leeren Zeilen berücksichtigen. Dazu müsste ich noch wissen, ob in WE immer eine Zahl steht.
Gruß Atilla
Antworten Top
#19
Hallo atilla,

sry, da habe ich mich wohl missverständlich ausgedrückt. Aber um deine Frage zu beantworten:

Ja, in WE steht immer eine Zahl.

Mit freundlichem Gruß

Bookshelf3011
Antworten Top
#20
Hallo,

der zueltzt eingestellte Code sollte das machen, was Du möchtest.

Bei mir sieht die Quelle so aus:

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDEFGHIJK
5StraßeHausnummerZusatzWohneinheiten       
6Musterstraße3 1e1f1g1h1i1j1k1
7Musterstraße17a3e2f2g2h2i2j2k2
8           
9Musterstraße9 1e3f3g3h3i3j3k3
10Musterstraße8a2e4f4g4h4i4j4k4
11           
12Musterstraße8 2e5f5g5h5i5j5k5
13Musterstraße7 1e6f6g6h6i6j6k6
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

und nach Codeausführung in Tabelle3 so:

Arbeitsblatt mit dem Namen 'Tabelle3'
 ABCDEFGHIJK
1StraßeHausnummerzusatzwohneinheitenBemerkunge      
2Musterstraße3 1e1f1g1h1i1j1k1
3Musterstraße17a3e2f2g2h2i2j2k2
4Musterstraße17ae2f2g2h2i2j2k2
5Musterstraße17ae2f2g2h2i2j2k2
6           
7Musterstraße9 1e3f3g3h3i3j3k3
8Musterstraße8a2e4f4g4h4i4j4k4
9Musterstraße8ae4f4g4h4i4j4k4
10           
11Musterstraße8 2e5f5g5h5i5j5k5
12Musterstraße8 e5f5g5h5i5j5k5
13Musterstraße7 1e6f6g6h6i6j6k6
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Bookshelf3011
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste