darüber habe ich auch schon nachgedacht. Leider befinden sich nach dem Kopiervorgang alle Formeln doppelt auf dem Tabellenblatt. Ich müsste dazu erkennen können, welche der Formeln ersetzt werden muss.
07.11.2016, 14:50 (Dieser Beitrag wurde zuletzt bearbeitet: 07.11.2016, 14:50 von BoskoBiati.)
Hallo,
Zitat:Leider befinden sich nach dem Kopiervorgang alle Formeln doppelt auf dem Tabellenblatt.
Ich weiß nicht was Du machst, aber es war keine Rede von kopieren! Ich würde alle Zellen, in denen die Formeln zu ändern sind, markieren und den Begriff Firma 1 durch Firma 2 ersetzen!
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr! Über Rückmeldungen würde ich mich freuen.
ich habe deine Autofill-Funktion ausprobiert; Leider führt sie nicht zu dem Ergebnis welches ich mir wünsche. Das wird daran liegen, das ich dies nicht eindeutig beschrieben habe.
Daher noch mal die Anforderungen. Das Ergebnis, welches ich erreichen will habe ich in der Datei Ergebnis_Neue_Spalte_anlegen.jpg dargestellt.
1. Die Formatierung der 1.Spalte (Rahmen, Hintergrundfarbe, Schriftfarbe) muss erhalten bleiben. 2. Die schmalen Spalten die als Blocktrenner dienen dürfen nicht belegt werden. 3. Die Funktion muss über alle nicht belegten Spalten bis Spalte 12 funktionieren. 4. Die Verweise müssen von $A$1 - $A$20 definiert werden.
Wenn dir hierzu auch etwas einfällt, wäre ich dir dankbar.
Um eines möchte ich dich zur besseren Verständlichkeit des Lösungsvorschlages noch bitten. Dies würde sicher auch Anderen helfen die sich mit ähnlichen Problematiken beschäftigen und nicht so firm sind. Kannst du deine Lösungsvorschläge auskommentieren?
08.11.2016, 17:21 (Dieser Beitrag wurde zuletzt bearbeitet: 08.11.2016, 17:21 von BoskoBiati.)
Hallo,
1. die Formatierung kann per Makro erfolgen, da kannst Du nachschlagen, wie man das macht und nach Bedarf einfügen! 2. Leerzeilen/-spalten mögen zwar der Optik dienen, erschweren aber die Bearbeitung ungemein. Da kann man mit der Rahmenstärke die gleichen Effekte erzielen. 3. a) welche Funktion, b) das funktioniert immer über die vorhandenen Spalten, wenn also neue Spalten eingefügt werden, passt sich das Ganze an! 4. da habe ich etwas übersehen. Werde ich drüber schauen, aber nicht mehr heute.
Wenn ich die Zeit (was leider selten der Fall ist) habe, werde ich kommentieren, wobei in diesem Code kaum etwas zu kommentieren wäre.
Wenn Du das Makro nicht als Ganzes übernimmst, passen die Funktionen auch nicht mehr.
Im Übrigen sind in Deinem Code folgende gravierende Mängel:
1. Du erstellst Formeln als Texte, daraus wird nie eine Formel. 2. Als erstes muß ein neues Tabellenblatt erstellt werden, ansonsten ergeben die Formeln einen Bezugsfehler.
mit diesem Makro werden die vorhandenen leeren Spalten überschrieben, sodass sich an der Struktur nichts ändert. Es wird nicht geprüft, ob nach der 12. Spalte durch den Anwender weitere Spalten erstellt werden. Die Formate werden so übertragen, wie sie in Spalte B angewendet werden. Wenn der "rechte" Rand z.B. durch Formatierung des "linken" Rand von Spalte C vorgenommen wird, fehlt er natürlich in der "neuen" Spalte. Es gibt auch keine Fehlerbehandlung, falls das neue Blatt bereits vorhanden ist. In dem Fall erscheint die normale VBA-Fehlermeldung. Beim Testen also vorher ggf. Blätter löschen.
Code:
Sub Makro1() 'Variablendeklaration Dim iMax As Integer 'Maximalwert aus Zeile 4 uebernehmen iMax = WorksheetFunction.Max(Range("C4:L4")) Sheets("Muster").Copy After:=Sheets(Sheets.Count) 'Anlegen neues Tabellenblatt Sheets(Sheets.Count).Name = "Firma " & iMax + 1 'Rename neues Tabellenblatt 'Zurueck nach Blatt Uebersicht Sheets("Übersicht").Activate 'Spalte B kopieren Range("B4:B24").Copy 'Mit Spalte C versetzt um imax-1 With Range("C4").Offset(0, iMax - 1) 'Formeln einfuegen .PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'Formate einfuegen .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False 'in eingefuegten Formeln Firma 1 durch Firma + iMax ersetzen .Resize(21, 1).Replace What:="Firma 1", Replacement:="Firma " & iMax + 1, LookAt:=xlPart _ , SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False 'Kopiermodus ausschalten Application.CutCopyMode = False 'Firmennummer eintragen Range("C4").Offset(0, WorksheetFunction.Max(Range("C4:L4")) - 1).FormulaR1C1 = iMax + 1 'Ende Mit Spalte C versetzt um imax-1 End With End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)