Formatieren in VBA umschreiben

Hallo Leute,

benötige mal wieder eure Unterstützung!
Habe durch VBA-Programierung Werte in einer Excel Datei, die ich für weitere Berechnungen nutze. Funktioniert auch.
Nun geht es mir um eine Formatierungssache. Kann mir jemand sagen, wie ich folgendes in die VBA-Programmierung schreibe?
-Suche und finde die Spalten mit folgender Anordnung
Name Vorname PersonalNr Abwesenheitsart von bis TWAZ NWAZ VAN

  • lösche Vorname und schiebe alle nachfolgenden Informationen eine Spalte nach links

Danke schon mal an alle hilfsbereiten und schauen Köpfe!

wie ich folgendes in die VBA-Programmierung schreibe?
-Suche und finde die Spalten mit folgender Anordnung
Name Vorname PersonalNr Abwesenheitsart von bis TWAZ
NWAZ VAN

  • lösche Vorname und schiebe alle nachfolgenden Informationen
    eine Spalte nach links

Hallo TS,

wenn du manuell die Spalte wo wohl oben „Vorname“ steht löschst, ist das nicht das was du suchst?
Dann wird doch automatisch nach links „aufgerückt“.

Natürlich kann man das auch mit Vba machen. Ich bin mir aber grad leicht unsicher ob es überhaupt das ist was du suchst.

Ist es das?

Gruß
Reinhard

Hallo Reinhard,
danke für dein Interesse! Aber vielleicht habe ich mich zu blöd ausgedrückt, aber ich möchte nicht die Spalte gelöscht haben, sondern:
Wenn in den gesuchten Zellen (aber in Spalte A), wo der Befriff Name drinsteht, die Zellen gefunden wurden, dann lösche nur den Begriff Name (nicht die Spalte) und alle nachfolgenden Begriffe, die sich in der gleichen Zeile befinden (aber dann in Spalte B, C, D, E)stehen, sollen nach links rutschen.
Ich hoffe noch einmal auf deine Hilfe, denn ich bin hilflos!!!
Danke tausendschön

Wenn in den gesuchten Zellen (aber in Spalte A), wo der
Befriff Name drinsteht, die Zellen gefunden wurden, dann
lösche nur den Begriff Name (nicht die Spalte) und alle
nachfolgenden Begriffe, die sich in der gleichen Zeile
befinden (aber dann in Spalte B, C, D, E)stehen, sollen nach
links rutschen.

Hallo TS,

probier mal „SucheUndSchiebe“ (ungetestet)

Option Explicit

Sub SucheUndSchiebe()
Dim Zelle As Range, strZelle As String
With Worksheets("Tabelle1").UsedRange
 Set Zelle = .Find("Vorname")
 If Not Zelle Is Nothing Then
 strZelle = Zelle.Address
 Do
 Call Schiebe(Zelle)
 Set Zelle = .FindNext(Zelle)
 Loop While Not Zelle Is Nothing And Zelle.Address strZelle
 End If
End With
End Sub

Sub Schiebe(ByRef Zelle As Range)
Dim arrTitel, T As Integer, Falsch As Boolean
arrTitel = Array("Name", "Vorname ", "PersonalNr", "Abwesenheitsart", "von", "bis", "TWAZ", "NWAZ", "VAN")
With Worksheets("Tabelle1")
 If Zelle.Column .Columns.Count - 8 Then Exit Sub
 For T = 0 To UBound(arrTitel)
 If UCase(arrTitel(T)) UCase(Zelle.Offset(0, T - 1)) Then
 Falsch = True
 Exit For
 End If
 Next T
 If Falsch Then Exit Sub
 Zelle.Offset(0, 1).Resize(1, 7).Copy Destination:=Zelle
End With
End Sub

Gruß
Reinhard

Hallo Reinhard,

vielen Dank für deine Hilfe. Habe in das Makro da wo du Tabelle1 geschrieben hast mein Tabllenblattnamen Quelle reingeschrieben und das andere so gelassen. Beim Ausführen kommt keine Fehlermeldung, aber es hat sich auch nichts getan

Sp A Sp B Spalte C Salte D Sp E Sp F Sp G Sp H SP I
Name, Vorname PersonalNr Abwesenheitsart von bis TWAZ NWAZ VAN
xxxx 56789 91 1.1.2011 2.1.11 38,5 38,5 0,9

Aber wie du ersehen kannst, decken sich die Spaltenüberschriften nicht mit den Eintragungen. Hinten wo VAN steht, müßte auch die 0,9 drunterstehen. Deshalb mein Gedanke: das Wort Vorname zu löschen und alles nachrutschen lassen, dann paßt es.

Wo kann der Fehler liegen? Ich bin machtlos!
tausendschön

Hallo Reinhard,

schau mal, habe es mit einem anderen Makro hinbekommen.

Sub löschen()
Set wks = Sheets(„Quelle“)

For i = 2 To wks.Cells(Rows.Count, 2).End(xlUp).Row
If wks.Cells(i, 2) = „Vorname“ Then
wks.Cells(i, 2).Delete Shift:=xlToLeft
End If
Next i
End Sub

Hat zwar lange gedauert und ohne Forumhilfe hätte ich es auch nicht geschafft. Muß aber sagen, dass ich dazugelernt habe und auch nochmal ein herzliches Dankeschön dan dich. Trotzdem werde ich mir deinen Vorschlag noch mal zu Gemüte ziehen. Interessiert mich, wo der Fehler liegt.
Noch eine Schöne Zeit wünscht
tausendschön

Hallo TS,

Hat zwar lange gedauert und ohne Forumhilfe hätte ich es auch
nicht geschafft.

*seufz*
Dir steht es frei wie jedem anderen alle Excelforen mit deiner einen Anfrage zuzumüllen.
Bei einigen Foren wirst du bei Entdeckung deiner mehrfachanfrage (das geht fix, die Excelgemeinde ist klein, einige lesen in mehreren Foren)
gelöscht, ignoriert=nicht beantwortet.

Hier wie in dem anderen Forum ist dieses Verhalten erlaubt.
Das sind deine Rechte, alles okay.

Ich habe habe auch meine Rechte.
Ich mag so Mehrfachanfragen gar nicht. Und da ist es doch wohl auch mein recht zu sagen, Lieber TS, laß das oder ich antworte dir nicht mehr.
Das gilt für die Zukunft. Hier versuche ich dir zu helfen als wäre nichts geschehen.

Trotzdem
werde ich mir deinen Vorschlag noch mal zu Gemüte ziehen.
Interessiert mich, wo der Fehler liegt.

Das ist gut für dich, denn nur so lernst du dazu.

Zu meinem Code, der ist wie mit Kanonen auf Spatzen schießen wenn ich den kleineren Code sehe der für dich die Lösung bedeutet.
Er wurde so groß, damit kompliziert und ohne Test durch mich oder andere natürlich leicht möglich daß da was schiefläuft weil ich irgendwie nicht durchblickte was du genau willst.

Daß es um „Vornam“ geht der immer in Spalte 2 steht war nicht eindeutig. Du sprachst im anderen Beitrag von „Name“ und A.

Deshalb konzipierte ich Kanoan-Code :smile:, der so rein theoretisch deinen gesamten benutzen Blattbereich absucht.
Überall dort wo er in 9 nebeneinanderliegenden zellen deine 9 Suchwörter findet soll er das tun was du willst.

Getestet habe ich nicht. Das kannst du ja genauso gut *gedacht hab*
Du sagst, mein Code klappt nicht, okay, kein Akt.
Teste ich halt…, ich meld mich …

Gruß
Reinhard

Hallo Reinhard,

bitte nicht böse sein, Ich bin neu in Foren. Ich werde mir deine Worte merken und bitte nat. um weitere Hilfe.
tausenschön

Hallo TS,

in meinem Code sind zwei Fehler.

Zum einen ein banaler.
Bei der Arrayzuweisung ist ein Leerzeichen nach Vorname, entferne das dann klappt der Code.

Naja würde klappen wenn da nicht noch ein zweiter Fehler drin wäre :smile:)

Ignorier erstmal den Fehler durch diesen Codeanfang:

Sub SucheUndSchiebe()
Dim Zelle As Range, strZelle As String
On Error Resume Next

dann klappt der Code.

Übrigens, da du lernen willst, ich fand den Fehler indem ich den Code im Editor mit F8 laufen ließ.
Dabei sah ich daß bei der zweiten Prüfung in der For-Schleife der Code wegen Exit Sub ausstieg.

Um erstmal grundsätzlich zu wissen ob das was ich prüfen will auch geprüft habe ich kurzerhand den Code so verändert:

For T = 0 To UBound(arrTitel)
MsgBox UCase(arrTitel(T)) & " - " & UCase(Zelle.Offset(0, T - 1))
If UCase(arrTitel(T)) UCase(Zelle.Offset(0, T - 1)) Then

In der MsgBox sah ich dann Vorname - Vorname und durch diesen Vergleich stieg der Code aus weil für Vba im Gegenteil zu mir beides unterschiedlich ist.
Der rest war einfach um auf den Fehler zu kommen.

Übrigens, da man halt Leerzeichen nicht sieht, die sehr oft Grundübel von problemen sind, mache ich je nachdem, hier hab ich es vergessen zu tun:

Msgbox „#“ & Variable1 & „#“ & " - " & „#“ & Variable1 & „#“
Dann sieht man das sofort.

Zu MsgBox, ja, ich weiß es gibt Debug.Print, das hat sicher auch gewaltige Vorteile gegenüber Msgbox, wird bei langen Schleifen viel effektiver sein.
Mein Tipp an dich, übe den Umgang mit Debug.Print.
In der Beziehung bin ich ein schlechtes Vorbild, ich nutze seit vielen Jahren bzw. an sich immer nur Msgbox.

Gruß
Reinhard

bitte nicht böse sein, Ich bin neu in Foren. Ich werde mir
deine Worte merken und bitte nat. um weitere Hilfe.

Hallo TS,

aber nein, ich bin keineswegs böse.
Und beziehe bittebitte meinen Beitrag nicht auf dich.

Ohne jetzt das Thema Mehrfachanfrage zu debattieren.
Ich wollte dir nur sagen wie es im Internet zu geht und speziell in Excelforen.

Ich kenne Foren, naja, derzeit nur eines, bin nicht mehr so viel auf Tour, wenn du da anfragst und jmd. antwortet nur mit Betreff, ohne Text:
CP o.w.T.

(CP=Crossposting, in etwa mehrfachanfragen, o.w.T.= ohne weiteren Text, also jeder kann sich die Mühe sparen auf den Beitrag zu klicken)

dann kriegste da keine Antwort mehr. Habe ich zigfach gesehen/erlebt.
Nur das wollte ich dir sagen nd auch daß es wie immer im leben auch andere gibt die das nicht so sehen.

Mein „Grollen“ galt dem CP, nicht dir.

und zur Klarstellung, du hast gegen keine einzige Regel die hier offiziell gilt verstoßen.
Ich habe dir nur meine private Meinung geschrieben und auch erwähnt daß andere nicht meiner Meinung sind.

Und ich bin hier gleichviel oder gleichwenig wert wie du.

Gruß
Reinhard