Automatisch Leerzeile einfügen, wenn Wert geändert wird
#1
Hallo zusammen,

ich habe mal wieder ein Problem, welches ich selbst nicht zu lösen weiß. Habe bisher etwas gegoogelt und dabei wurden immer wieder VBA-Makros für ähnliche Probleme aufgezeigt - damit habe ich aber noch überhaupt keine Erfahrung gesammelt außer mit dem Makro-Recorder.

Und zwar habe ich eine Liste mit ca. 10.000 Datensätzen. In der Spalte B habe ich Werte (zB 2641510,2641510, 2641610, 2641810, 2641820, 261820, etc.). Und nun möchte ich, dass jedes mal eine Leerzeile eingefügt wird, sobald sich der Wert in Spalte B ändert (also die Werte sollen immer von einer Leerzeile getrennt werden). Dabei kann jeder Wert unterschiedlich oft vorkommen.

Habt ihr dafür eine Idee? Ich hatte auch schon an eine WENN()-Formel gedacht, aber wie könnte man eine Leerzeile einfügen?

Ich bin wirklich ratlos diesmal...

Viele Grüße
Felix
Top
#2
Hi,

das geht wohl nur mit VBA.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#3
Hallo,
schreibe in die Codeseite der Tabelle(!) folgenden Code:


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
   Rows(Target.Row + 1).EntireRow.Insert
End If
End Sub
Aber Achtung!
das File muss jetzt zwingend die Ext. *.xlsm haben.
Sonst wird der Code nicht gepeichert.
Grüße aus Nürnberg
Armin
Ich benutze WIN 10 (64bit) und Office 19 (32bit)
[-] Folgende(r) 1 Nutzer sagt Danke an EbyAS für diesen Beitrag:
  • felippo
Top
#4
Hallo Armin,

danke für die schnelle Antwort. Aber wie kann ich den Code jetzt ausführen? Muss ich dazu ein Makro erstellen? Das muss ich doch dann auch irgendwie dem Code zuordnen, oder?

Edit:
Habe das Zellformat geändert und daraufhin wurde der Code ausgeführt. Dabei trat aber ein "Fehler beim Kompilieren" auf: Sub oder Function nicht definiert. 

Gruß
Felix
Top
#5
Hi,

der Code taugt für Deine Anforderung nichts!



Code:
Sub Zeilen()

Dim loLetzte as long
dim loCo as long
loLetzte=cells(rows.count,2).end(xlup).row
For loCo=loLetzte to 2 step -1
   if Cells(loCo,2)<> cells(loCo-1,2) then Rows(loco).entirerow.insert shift:=xldown
next

End sub


Hinter das Tabellenblatt und mit Alt+F8 aufrufen
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • felippo
Top
#6
Hi

wenn VBA dir nicht liegt dann hier mal mit Formel.

____|___A__|__B__|___C___|D|__E__|__F__|___G___|K|
   1|Name  |werte|Bereich| |Name |werte|Bereich| |
   2|Name1 |    2|A      | |Name1|    2|A      | |
   3|Name2 |    2|C      | |Name2|     |       | |
   4|Name3 |    4|B      | |     |     |       | |
   5|Name4 |    4|B      | |     |     |       | |
   6|Name5 |    4|A      | |     |     |       | |
   7|Name6 |    4|C      | |     |     |       | |
   8|Name7 |    1|D      | |     |     |       | |
   9|Name8 |    1|D      | |     |     |       | |
  10|Name9 |    1|D      | |     |     |       | |
  11|Name10|    3|A      | |     |     |       | |
  12|Name11|    3|B      | |     |     |       | |
  13|Name12|    6|B      | |     |     |       | |
  14|Name13|    8|C      | |     |     |       | |
  15|Name14|    8|C      | |     |     |       | |
  16|Name15|    8|D      | |     |     |       | |
  17|Name16|    5|E      | |     |     |       | |
  18|Name17|    7|B      | |     |     |       | |
  19|Name18|    9|A      | |     |     |       | |
  20|Name19|    9|A      | |     |     |       | |

E2    =A2
F2    =B2
G2    =C2
E3    =WENN($F2="";INDEX(A:A;ZEILE(A3)-ANZAHLLEEREZELLEN($F$2:$F2););WENN(INDEX($B:$B;ZEILE(A2)-ANZAHLLEEREZELLEN($F$2:$F2);)<>INDEX($B:$B;ZEILE(A3)-ANZAHLLEEREZELLEN($F$2:$F2););"";INDEX(A:A;ZEILE(A3)-ANZAHLLEEREZELLEN($F$2:$F2);)))

E3 nach rechts und unten Kopieren.
Top
#7
Hi,

mit Formeln mag das ja für eine Spalte noch funktionieren, aber dann wird es schon problematisch.

Das ginge auch so:

Arbeitsblatt mit dem Namen 'Tabelle1'
BCD
226415102641510
326415102641510
42641610
526418102641610
62641820
72618202641810
8
92641820

ZelleFormel
D3=WENN(D2="";INDEX(B:B;VERWEIS(9;1/(B:B=D1);ZEILE(B:B))+1);WENN(INDEX(B:B;VERGLEICH(D2;B:B;0)+ZÄHLENWENN($D$1:D2;D2))<>D2;"";D2))
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.01] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#8
Hallo zusammen,

vielen Dank für eure Hilfe!! 

Ich habe eine Lösung gefunden und das Problem gelöst. Danke Opa Edgar für den Code und die Ausführung des Codes Wink

Viele Grüße
Felix
Top


Gehe zu:


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