Brauche ein Makro im Excel-Schleife

Hallo ihr Lieben,

ich habe von Makros leider nur wenig Ahnung!

Mein Problem ist folgendes:

Ich habe eine Spalte mit Zahlen und einzelnen Buchstaben,
was ich jetzt machen möchte:

Jede Zahl die bis vor der Zelle mit dem Buchstaben C steht, soll eine NULL an den Anfang der Zahl Geschrieben bekommen,
alle anderen Zahlen sollen so bleiben.

BSP:

A

1 A
2 123123
3 67
4 C
5 78

Ergebnis= in der Spalte B würde dann stehen: A, 0123123, 067, C, 78.

Da ich mal so gar keine AHnung habe, weiß ich nicht einmal wie ich was deklarieren muss. Aber wenn mir einer mit der Schleife helfen würde, wäre ich schon sehr dankbar!

Viele Grüße

Da ich mal so gar keine AHnung habe, weiß ich nicht einmal wie
ich was deklarieren muss. Aber wenn mir einer mit der Schleife
helfen würde, wäre ich schon sehr dankbar!

wenn du den vba-editor offen hast, dann gib da mal „for“ ein, markiere das und drück F1. dann bekommst du ein beispiel für eine schleife, mit der du dein problem lösen kannst.

weiterhin musst du noch:

  • die endbedingung deiner schleife bestimmen (wie oft soll sie durchlaufen?)

  • die jeweilige zelle auslesen

  • die null vorne dran schreiben

  • alles zurück in die zelle

ohne Makro mit Hilfsspalte

Jede Zahl die bis vor der Zelle mit dem Buchstaben C steht,
soll eine NULL an den Anfang der Zahl Geschrieben bekommen,
alle anderen Zahlen sollen so bleiben.

BSP:

A

1 A
2 123123
3 67
4 C
5 78

Ergebnis= in der Spalte B würde dann stehen: A, 0123123, 067,
C, 78.

Hallo,

auf die schnelle gehts auch mit einer Hilfsspalte mit der Formel in Spalte C:
=WENN(B2=„C“;„0“&B1;B1)
Formel runterkopieren und dann die Spalte B mit den Werten ersetzen.

Frage: Wieso als Ergebnis in Spalte B 0123123 ?

MfG

Hallo :smile:

Danke.
Ja ich habe auch schon so gut wie alles mit Formeln hintelegt. Problem ist nur, dass ich eine automatisierte Form haben möchte. Und ich werde in dieses Datenblatt jedes mal neue Werte (verschieden angeordnet) reinkopieren, und weil nicht jedes mal manuell etwas runterkopiert etc werden muss, will ich gerne ein Makro haben :confused:

Hallo Jens,

das versuche ich schon die ganze Zeit mit der Excel-Hilfe.

Mir ist auch klar wie der Ablauf aussehen soll, komme aber an einigen Stellen einfach nicht weiter.

BSP:

Dim actBranchenausfallzeitreihenPlan As Workbook
Dim actInsolvenzenPlan As Worksheet

Dim actLineInsolvenzen As Long

Set actBranchenausfallzeitreihenPlan = ActiveWorkbookSet actInsolvenzenPlan = actInsolvenzen.Sheets
actInsolvenzenPlan.Activate

For actLineInsolvenzen = 4 To 100000

if actInsolvenzenPlan.Cells(

jetzt komme ich nicht weiter!

Hallo Jens,

das versuche ich schon die ganze Zeit mit der Excel-Hilfe.

Mir ist auch klar wie der Ablauf aussehen soll, komme aber an einigen Stellen einfach nicht weiter.

BSP:

Dim actBranchenausfallzeitreihenPlan As Workbook
Dim actInsolvenzenPlan As Worksheet

Dim actLineInsolvenzen As Long

Set actBranchenausfallzeitreihenPlan = ActiveWorkbookSet actInsolvenzenPlan = actInsolvenzen.Sheets
actInsolvenzenPlan.Activate

For actLineInsolvenzen = 4 To 100000

if actInsolvenzenPlan.Cells(

jetzt komme ich nicht weiter!

Irgendwie klappt es dennoch nicht:

Sub Korrektur_Code()

Dim actBranchenausfallzeitreihenPlan As Workbook
Dim actInsolvenzenPlan As Worksheet

Dim actLineInsolvenzen As Long

Set actBranchenausfallzeitreihenPlan = ActiveWorkbook(„Makro…Branchenausfallzeitreihe…“)
Set actInsolvenzenPlan = actInsolvenzen.Sheets(„Insolvenzen“)

actInsolvenzenPlan.Activate 'Arbeitsblatt öffnen

For actLineInsolvenzen = 4 To 100000 'Schleife von Zeile 4 zu Zeile 100000

if actInsolvenzenPlan.Cells(actLineInsolvenzen, 1) = C 'wenn in der aktuellen Zelle, die ab einschließlich Zeile 4 beginngt ein C steht
then ’ dann beende Schleife

Else
if actInsolvenzenPlan.Cells (actLineInsolvenzen, 1) = Integer 'andernfalls prüfe ob eine Zahlsteht
then actInsolvenzenPlan.Cells (actLineInsolvenzen, 1)= 0 + actInsolvenzenPlan.Cells (actLineInsolvenzen, 2) 'wenn ja dann fühe eine 0 und den Zelleninhalt in Spalte 2(B)hinzu

End If
actLineInsolvenzen = actLineInsolvenzen + 1

End If

End Sub

Nachfrage

Ich habe eine Spalte mit Zahlen und einzelnen Buchstaben,
was ich jetzt machen möchte:
Jede Zahl die bis vor der Zelle mit dem Buchstaben C steht,
soll eine NULL an den Anfang der Zahl Geschrieben bekommen,
alle anderen Zahlen sollen so bleiben.

Hallo Tschejtx,

das Makro soll die Spalte von oben nach unten durchlaufen und allen Zahlen vornedran eine Null verpassen( die werden dann zu Text) bis in einer Zelle ein „C“ auftaucht, ist das so korrekt?

Gruß
Reinhard

Hallo Reinhard,

genau. Das Makro soll alle Zahlen mit einer Null am Anfang versehen bis zu der Zelle wo Ein großes C auftaucht. der Datensatz besteht mal aus einzelnen Buchstaben mal aus normalen Zahlen (die aber linksbündig angezeigt werden)

Sinn des Ganzen ist, dass ich eine automatisierte Version brauche, mit der ich dann verschiedenste Datensätze reinkopieren kann ohne jedes mal den Datensatz anpassen zu müssen. Ich brauche alle Zahlen in dem „Linksbündigen“ Format. Weil ich später andere Listen habe mit dessen Hilfe ich mit „sverweisen“ die Artikelnummern zuordnen kann. und weil ich in beiden Datensätzen diese Artikel brauche müssen auch die aufbereiteten Zahlen weiterhin Artikel bleiben, da ich sonst keine Sverweise anwenden kann.

Ich hoffe, das ist jetzt ein wenig verständlicher geworden? Danke für die Hilfe :smile:

Jede Zahl die bis vor der Zelle mit dem Buchstaben C steht,
soll eine NULL an den Anfang der Zahl Geschrieben bekommen,
alle anderen Zahlen sollen so bleiben.

Hallo T,

Sub Nuller()
Dim Zei As Long, ZeiC As Long
With Worksheets("Tabelle1")
 On Error Resume Next
 ZeiC = Application.Match("C", .Columns(1), 0)
 If Err.Number = 0 Then
 For Zei = 1 To ZeiC - 1
 If IsNumeric(.Cells(Zei, 1).Value) And .Cells(Zei, 1).Value "" Then
 If Left(.Cells(Zei, 1).Value, 1) "0" Then
 .Cells(Zei, 1).Value = "'0" & CStr(.Cells(Zei, 1).Value)
 End If
 End If
 Next Zei
 Else
 MsgBox "Kein C gefunden in Spalte A."
 End If
End With
End Sub

Gruß
Reinhard

Morgen,

hier mal ein Versuch:

Sub Null_anfuegen()
Dim Zeile As Integer, letzteZeile As Integer
letzteZeile = Sheets(„Tabelle1“).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Zeile = 1
Do
If IsNumeric(Cells(Zeile, 1)) = True Then
Range(„a“ & Zeile).NumberFormat = „@“
Range(„a“ & Zeile) = „0“ & Range(„a“ & Zeile)
Zeile = Zeile + 1
Else
Zeile = Zeile + 1
End If
Loop Until Cells(Zeile, 1) = „C“ Or Zeile = letzteZeile - 1
End Sub

Sub Null_anfuegen()
Dim Zeile As Integer, letzteZeile As Integer
letzteZeile =
Sheets(„Tabelle1“).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Zeile = 1
Do
If IsNumeric(Cells(Zeile, 1)) = True Then
Range(„a“ & Zeile).NumberFormat = "@"
Range(„a“ & Zeile) = „0“ & Range(„a“ & Zeile)
Zeile = Zeile + 1
Else
Zeile = Zeile + 1
End If
Loop Until Cells(Zeile, 1) = „C“ Or Zeile = letzteZeile - 1
End Sub

Hallo Brille,

dein Code kann in/ab XL 2007 zu einem Fehler führen, erkennst du warum?

Nimm mal eine leere Spalte A, schreib irgendwo ein C rein, laß den Code dann mehrmals laufen…

Gruß
Reinhard

Hallo Reinhard,

danke für deine schnelle Antwort!

Ich habe es versucht umzusetzen und erhalte zunächst Fehlermeldungen in rot bei:

If Error Number = 0 Then

? Wofür ist das? (wofür ist die Funktion : On Error Resume Next zuständig?!

If Left(.Cells(Zei, 1).Value, 1) „'0“ & Cstr(.Cells(Zei, 1).Value)

Warum wird das rot angezeigt?

Danke dir!

Hallo Reinhard,

bin jetzt davon ausgegangen, dass es keine Leerzeilen gibt und man das Makro nicht unendlich durchlaufen lässt…
So sollte es klappen:

Sub Null_anfuegen()
Dim Zeile As Integer, letzteZeile As Integer
letzteZeile = Sheets(„Tabelle1“).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Zeile = 1
Do
If IsNumeric(Cells(Zeile, 1)) = True And Not Range(„a“ & Zeile) = „“ And Not Left(Range(„a“ & Zeile), 1) = „0“ Then
Range(„a“ & Zeile).NumberFormat = „@“
Range(„a“ & Zeile) = „0“ & Range(„a“ & Zeile)
Zeile = Zeile + 1
Else
Zeile = Zeile + 1
End If
Loop Until Cells(Zeile, 1) = „C“ Or Zeile = letzteZeile - 1
End Sub

Hallo Reinhard,

sorry hab mich vertippt. Jetzt ist nichts mehr rot.

Wenn ich auf Start gehe, wird
Sub Nuller()
geld angezeigt und .Columns(1) wird angeleuchtet, und auch .Cells?!

Was mache ich falsch=?

Tut mir Leid, dass ich dich hie rmit Nachrichten bombadiiere!

Es hat geklappt:

Sub Nuller()

Dim Zei As Long
Dim ZeiC As Long

Dim Anz_InsolPlan As Worksheet

On Error Resume Next
ZeiC = Apllication.Match(„C“, 1, 0)
If Err.Number = 0 Then
For Zei = 4 To ZeiC - 1
If IsNumeric(Anz_InsolPlan.Cells(Zei, 1).Value) And Anz_InsolPlan.Cells(Zei, 1).Value „“ Then
If Left(Anz_InsolPlan.Cells(Zei, 1).Value, 1) „0“ Then
Anz_InsolPlan.Cells(Zei, 1).Value = „0“ & CStr(Anz_InsolPlan.Cells(Zei, 1).Value)
End If
End If
Next Zei
Else
MsgBox „Kein C gefunden in Spalte A.“
End If

End Sub

So sieht es aus. Aber leider bekomme ich die Nachricht, dass kein C gefunden werden kann.