Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1308to1312
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
Makro: Zeilen an beliebiger Stelle einfügen
23.04.2013 13:29:09
Thms
Liebes Forum,
ich möchte gerne ein Makro, das folgendes umsetzt;
Ich möchte z.B. 5 Zeilen an einer beliebigen Stelle in meiner Tabelle einfügen.
In Spalte A, möchte ich 5 seperate Zellen haben (also genau das was man bekommt, wenn man eben 5 neue Zellen einfügt), aber in den Spalten B - H würde ich die jeweils 5 neuen Zeilen gerne miteinander verbunden haben. (Damit meine ich, dass in den Spalten B - H NICHT nur eine Zelle sein soll, sondern eben nur die 5 neuen Zellen miteinander verbunden werden.)
Ich habe das mal als Makro aufgezeichnet. (Siehe Code unten). Das Problem dabei ist aber, dass die Aktion eben immer an der gleichen Stelle der Tabelle ausgeführt wird und nicht an einer beliebigen Stelle möglich ist. Kann man das irgendwie entsprechend abändern? Wäre für jede Hilfe ausgesprochen dankbar.
Nun der Code und herzliche Grüße!
Thomas

Sub Makro1()
' Makro1 Makro
Rows("50:54").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B50:B54").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("C50:C54").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("D50:D54").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("E50:E54").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("F50:F54").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("G50:G54").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("H50:H54").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("I50:I54").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
ActiveWindow.ScrollColumn = 7
ActiveWindow.ScrollColumn = 8
ActiveWindow.ScrollColumn = 9
ActiveWindow.ScrollColumn = 10
Range("J50:J54").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range("K50:K54").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
End Sub

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
7 Zeilen code genügen,...
23.04.2013 13:57:37
EtoPHG
Thomas,
versuch mal:
Sub kasten5to10()
Dim lCol As Long
If ActiveCell.Column = 1 Then
ActiveCell.Resize(5, Columns.Count).Insert shift:=xlDown, CopyOrigin:= _
xlFormatFromLeftOrAbove
For lCol = 1 To 10
ActiveCell.Offset(0, lCol).Resize(5, 1).Merge
Next lCol
End If
End Sub
Gruess Hansueli

AW: 7 Zeilen code genügen,...
23.04.2013 15:01:55
Thms
Vielen herzlichen Dank an euch beide!
Super! Es funktioniert! :)

AW: 7 Zeilen code genügen,...
23.04.2013 15:09:14
Thms
Eine Frage aber noch. Bei dem Code ist es ja jetzt so, dass das Format der vor bzw. nachgeschalten Zellen kopiert wird. Wie kann man das abändern, so dass die normale Standardformatierung entsteht?
Liebe Grüße
Thomas

Anzeige
, CopyOrigin:=xl... weglassen (owT)
23.04.2013 15:25:17
EtoPHG

ungetestet
23.04.2013 15:25:21
Klaus
Hi,
es müsste reichen, wenn du diesen Teil des Codes löscht:
CopyOrigin:= xlFormatFromLeftOrAbove
(nicht die ganze Zeile, nur diesen Teil!)
Grüße,
Klaus M.vdT.

AW: ungetestet
23.04.2013 15:39:21
Thms
Hallo,
funktioniert leider nicht so wirklich. Vllt. kann man es einfach so schreiben, dass die Zeilenhöhe auf 15 gesetzt wird? Wäre außerdem cool, wenn die neuen Zeilen einen Rahmen (alle "Seiten") bekommen könnten.
Beste Grüße
Thomas

AW: ungetestet
23.04.2013 15:51:06
Klaus
Vllt. kann man es einfach so schreiben, dass die Zeilenhöhe auf 15 gesetzt wird? Wäre außerdem cool, wenn die neuen Zeilen einen Rahmen (alle "Seiten") bekommen könnten.
Hallo Thomas,
warum standen diese Forderungen nicht bereits in der original Aufgabe? Jetzt machst du "uns Helfern" unnötig mehr Arbeit, in der Zeit wird anderen weniger geholfen. Ist es so schwer, seine Aufgabe im ersten Post sachlich vollständig zu formulieren?
Hansueli's Code angepasst:
Sub kasten5to10()
Dim lCol As Long
If ActiveCell.Column = 1 Then
With ActiveCell.Resize(5, Columns.Count)
.Insert shift:=xlDown
.RowHeight = 15
End With
For lCol = 1 To 10
With ActiveCell.Offset(0, lCol).Resize(5, 1)
.Merge
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
End With
Next lCol
End If
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: ungetestet
23.04.2013 16:02:01
Thms
Pardon pardon!
Es ist keine Absicht gewesen! - Das hat sich so entwickelt. Ich werde es beim nächsten mal versuchen zu bessern. Entschuldigung!
Gruß
Thomas

passt denn der Code jetzt? owT
23.04.2013 16:08:49
Klaus
.

AW: passt denn der Code jetzt? owT
24.04.2013 09:14:18
Thms
Nein. Leider funktioniert das noch nicht wirklich.
Bei dem Code herrscht noch folgendes Problem: Wenn ich die neuen Zeilen einfüge, möchte ich ja nur, dass die neuen Zeilen die Zeilenhöhe 15 bekommen. Mit dem Code bekommt aber leider die Zeile unter den neu eingefügten die Standardhöhe 15, während die Höhe der neu eingefügten Zeilen leider nicht 15 wird. Auch wenn das jetzt iwie bissl dumm gelaufen ist, wäre ich trotzdem dankbar für weitere Untersützung.
Beste Grüße!
Sub Zeilen_einfuegen()
Dim lCol As Long
If ActiveCell.Column = 1 Then
With ActiveCell.Resize(5, Columns.Count)
.Insert shift:=xlDown
.RowHeight = 15
End With
For lCol = 1 To 10
With ActiveCell.Offset(0, lCol).Resize(5, 1)
.Merge
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
End With
Next lCol
End If
End Sub

Anzeige
Kleinigkeit
24.04.2013 10:03:03
Klaus
Hi,
das ist etwas konfus .. durch das "insert" ändert sich der Bezug auf "ActivCell" innerhalb des WITH, darum greift er die falschen Zeilen.
Wenn ich den WITH-Rahmen rausnehme, dann geht es!
Sub Zeilen_einfuegen()
Dim lCol As Long
If ActiveCell.Column = 1 Then
ActiveCell.Resize(5, Columns.Count).Insert shift:=xlDown
ActiveCell.Resize(5, Columns.Count).RowHeight = 15
For lCol = 1 To 10
With ActiveCell.Offset(0, lCol).Resize(5, 1)
.Merge
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
End With
Next lCol
End If
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: Kleinigkeit
24.04.2013 10:36:15
Thms
Super!
Dankeschön!

Danke für die Rückmeldung! owT.
24.04.2013 11:15:18
Klaus
.

AW: Danke für die Rückmeldung! owT.
24.04.2013 13:35:55
Thms
Hallo Klaus M.vdT.,
sehr gerne, ich bin wirklich sehr dankbar für die Unterstützung hier!
Ich habe nun ein neues, aber ähnliches Problem.
Ich würde gerne ein Makro haben, das in Spalte A - "Schlüsselbegriffe" 5 seperate Zellen einfügt, während die Spalten B C D E usw. miteinander verbunden bleiben.
Ziel ist es in die 5 neuen Zellen in Spalte A jeweils verschiedene Schlüsselbegriffe eintragen zu können.
Es reicht sicher den Code leicht abzuändern damit das funktioniert, ich habe mich daran versucht, bin allerdings aufgrund meines mangelnden Wissens gescheitert ..
Beste Grüße!
Userbild

Anzeige
Das müsste doch bereits gehen?
25.04.2013 08:10:56
Klaus
Hi,
in deinem Bild ist das ganze 1-Zeilig. Der vorhandene Code müsste doch bereits 5 Zeilen einfügen und die angrenzenden Verbinden?
Ich kann und werde das in einem JPG nicht testen!
Übrigens: ich halte den gesamten Lösungsansatz für schmu, da ich starke Vorurteile gegen verbundene Zellen habe.
Verformeln willst du das ganze warscheinlich eh nicht, oder? Dann schreib doch in A alle 5 Schlüsselbegriffe untereinannder, einen Zeilenumbruch innerhalb der Zelle bekommst du mit ALT+ENTER.
Grüße,
Klaus M.vdT.

AW: Das müsste doch bereits gehen?
25.04.2013 08:35:52
Thms
Hallo,
ich bin mir nicht sicher was du mit verfomeln genau meinst - jedenfalls möchte ich filtern :) und wenn ich die Begriffe mit ALT+Enter einfüge, dann wird nur nach dem "ersten Begriff" in der Zelle gesucht (jedenfalls stehen nur diese Begriffe zur Auswahl. Klar, man könnte dann einzeln suchen und die Begriffe eintippen, dann müsste aber jeder Anwender die verwendeten Begriffe kennen, was etwas anwenderunfreundlich ist. Bzgl. testen: Ich schicke Dir gerne die Tabelle zu!
Beste Grüße
Thomas

Anzeige
AW: Das müsste doch bereits gehen?
25.04.2013 08:41:00
Klaus
Hi,
Bzgl. testen: Ich schicke Dir gerne die Tabelle zu!
Upload, nicht zuschicken. Mit Mails mache ich nichts, da ich panische Angst vor Spam-Robotern habe.
Übrigens, wenn in Zelle A4 steht (mit Umbrüchen) "Haus Maus Klaus", dann kannst du das mit "*Maus*" filtern.
Ich würd mir ja das Zellen-Verbinden sparen, alle möglichen Suchbegriffe einzeln in eine Combobox füllen und per Combobox-Change Makro nach "*"&ComboBox&"*" filtern.
Grüße,
Klaus M.vdT.

AW: Das müsste doch bereits gehen?
25.04.2013 09:38:07
Thms
Hallo,
ich habe mich jetzt mal kurz in youtube über die Combobox informiert. Allerdings ist mir noch nicht ganz klar, wie ich dann die anderen Spalten in Verbindung mit den Schlüsselbegriffen iwo auslesen lassen könnte.
Es würde mir wirklich ausreichen, wenn ich einfach ein paar einzelne Zellen einfügen könnte, siehe Spalte A unter "Schlüsselbegriffe", die sich auf die Spalten rechts davon beziehen. (Beispiel "EE in Gebäuden und test 1 - test 3"). - Wenn ich versuche die Excel Datei hochzuladen bekomme ich die Fehlermeldung "ungültiges Format"?! - Unten steht wiederum es müsste gehen? .. meine Endung ist .xlsx, sollte doch dem angegebenen "xl*" entsprechend?
Beste Grüße
Thomas

Anzeige
AW: Das müsste doch bereits gehen?
25.04.2013 11:19:16
Klaus
Hi Thomas,
wenn du die Datei hochgeladen bekommst, schaue ich mir das gerne nochmal an. Im Zweifelsfall mach dann einen neuen Beitrag auf, damit ich das auch finde.
Dir jetzt in der grauesten Theorie erklären wie man eine Combobox füllt und an einen Autofilter hängt bringts eh nicht.
Grüße,
Klaus M.vdT.

AW: Das müsste doch bereits gehen?
25.04.2013 12:30:42
Thms
Hi,
Datei ist in meinem neuen Post zu finden.
Danke für Deine Hilfe!
Gruß
Thomas

AW: Makro: Zeilen an beliebiger Stelle einfügen
23.04.2013 14:11:15
Klaus
Hi,
ich hab ein paar Zeilen mehr als Hansueli.
Wenn du mit diesem Code x Zeilen markierst, werden x eingefügt und 10-mal nach rechts jeweils x Zellen verbunden.
Ist dein x immer 5, nimm lieber Hansuelis Code. Brauchst du die Zeilenanzahl variabel, nimm meinen.
Sub VerbindenZellenRechtsNachEinfuegen()
Dim i As Integer
Dim j As Integer
Dim k As Integer
j = Selection.Rows.Count 'X Zeilen einfügen / verbinden
k = 10 '10 Spalten rechts verbinden
With Selection.Cells(1, 1)
For i = 1 To j
.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Next i
End With
For i = 1 To k
Cells(ActiveCell.Row, 1).Resize(j, 1).Offset(0, i).MergeCells = True
Next i
End Sub
Grüße,
Klaus M.vdT.
Anzeige

17 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige