Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1880to1884
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
Inhaltsverzeichnis

VBA-Code in nächsten Spaltenkopf

VBA-Code in nächsten Spaltenkopf
26.04.2022 12:00:33
Ole
Hallo liebes Forum,
da meine VBA-Kenntnisse nicht sonderlich ausgeprägt sind und ich mit dem Recorder nicht das erreiche, was ich möchte, mein Hilferuf an euch.
Unser Datenerfassungsprogramm gibt bei Exclel-Ausgabe teilweise die Kennung als Präfix gefolgt von einem Doppelpunkt mit aus, erst dann folgt die "richtige" Spaltenüberschrift. Die Anzahl der Spalten ist je nach Datei variabel.
Mit nachfolgendem Code konnte ich das Problem mehr oder weniger lösen, allerdings habe ich die Range händisch auf "sehr groß" eingestellt, was a) bei leeren Zellen eine 0 erzeugt und b) unnötiger Rechenaufwand ist. Das Hinzufügen der neuen Spalte und Kopieren der Inhalte steht nur zum besseren Verständnis noch mit dabei.
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A1").Select
ActiveCell.FormulaR1C1 = _
"=IF(ISNUMBER(SEARCH("":"",R[1]C)),RIGHT(R[1]C,(LEN(R[1]C)-(SEARCH("":"",R[1]C)))),R[1]C)"
Range("A1").Select
Selection.AutoFill Destination:=Range("A1:FZ1"), Type:=xlFillDefault
Rows("1:1").Select
Selection.Copy
Rows("2:2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Rows("1:1").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp

Wie bekomme ich es gelöst, dass die Formel nur soweit kopiert wird, bis die Überschriften vorhanden sind? Über einen "Do while"-Loop mit ActiveCell.Value "" habe ich es versucht, habe dann aber das Problem, dass ich die Formel ja in einer leeren Zelle brauche.
Danke für jede Hilfe!
Ole
https://www.herber.de/bbs/user/152674.xlsx

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-Code in nächsten Spaltenkopf
26.04.2022 12:41:49
Yal
Hallo Ole,
Ich würde eindach mit suchen/ersetzen "Firmendaten:" durch "" ersetzen lassen. Fertig.
VG
Yal
AW: VBA-Code in nächsten Spaltenkopf
26.04.2022 12:46:16
Ole
Danke für den Tip, sofern die Spaltenköpfe alle das selbe Präfix haben ist das natürlich kein Problem, leider kommt das so gut wie nie vor. Das Makro soll ja auch für alle zukünftigen Auswertungen anwendbar sein :-)
AW: VBA-Code in nächsten Spaltenkopf
26.04.2022 12:53:20
Daniel
HI
wenn das Präfix wechseln kann, könnte man auch alles vor dem ":" löschen.
das ginge, in dem du den Joker * verwendest und "*:" durch nichts ersetzt, damit wird der Doppelpunkt und alles davor ersetzt.
geht natürlich auch als VBA:

Rows(1).Replace "*:", "", lookat:=xlpart
das solltest du aber nur verwenden, wenn in den Zellen maximal ein Doppelpunkt vorkommt, ansonsten wird mehr gelöscht als du willst, nämlich alles vor dem letzten Doppelpunkt und nicht nur alles vor dem ersten Doppelpunkt.
Gruß Daniel
Anzeige
AW: VBA-Code in nächsten Spaltenkopf
26.04.2022 12:57:11
Yal
Hallo Ole,
na gut, aber wenn schon mit dem VBA-Hammer, dann nicht über Formel, die anschliessend in Wert ersetzt werden. Da gibt es in VBA geeigneter Werkzeuge.

Sub extrahiere()
Dim Z As Range 'Z für Zelle
On Error Resume Next
For Each Z In Range(Range("A1"), Cells(1, Columns.Count).End(xlToLeft)).Cells
Z = Split(Z.Value, ":")(1)
Next
End Sub
VG
Yal
AW: VBA-Code in nächsten Spaltenkopf
26.04.2022 12:46:53
Daniel
Hi
statt Destination:=Range("A1:FZ1")
das: Destination:=Range(Cells(1, 1), Cells(2, Columns.Count).end(xltoleft).Offset(-1, 0))
btw, selektieren und den FillDown kannst du dir sparen, das zeichnet der Recorder auf, weil du mit der Maus so arbeitest. In VBA kann man jedoch den Befehl direkt an den Zellbereich anhängen, ohne das selektiert wird:
dieser Code sollte reichen

Rows(1).Insert
Range(Cells(1, 1), Cells(2, Columns.Count).end(xltoleft).Offset(-1, 0)).FormulaR1C1 = _
"=IF(ISNUMBER(SEARCH("":"",R[1]C)),RIGHT(R[1]C,(LEN(R[1]C)-(SEARCH("":"",R[1]C)))),R[1]C)"
Rows(1).Copy
Rows(2).PasteSpecial Paste:=xlPasteValues,
Rows(1).Delete
Gruß Daniel
Anzeige
Danke!!
26.04.2022 12:54:59
Ole
Danke, das hat schon geholfen!

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige