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

Numerische Formate für die Spalte sowieso

Mit einer Hilfsspalte geht das völlig ohne VBA
Formeln für Hilfsspalte B
B1 =WENN(A1=„C“;1;"")
B2 =WENN(ODER(A2=„C“;B1=1);1;"")
usw

C1=WENN(A1"C";A1;VERKETTEN(0&A1))
C2=WENN(UND(B2="";A2>0);VERKETTEN(0&A2);A2)
C3=WENN(UND(B3="";A3>0);VERKETTEN(0&A3);A3)
USW

Die Spalte C muss danach im Bereich der geänderten (mit 0) werte rechts ausgerichtet werden.

Have fun

NACHTRAG von Graubart
Wenn mit den Werten in Spalte C gerechnet werden soll, dann in Spalte D folgende Formel:
D1==WENN(ISTFEHLER(C1*1);0;C1*1)

Die gesamte Spalte D kann addiert werden. Die Summenformel kann in Spalte C stehen und Spalte D kann ausgeblendet werden.

Hallo

ich weiss nicht , wer mich als Excel-Experte hier definiert hat, denn ich bin eher ein Amateur mit Excel-Grundlagenkurs ,Mitte der 90er-Jahre und kann deshalb solch spezielle Expertenkenntnisse leider nicht vorweisen.
Es tut mir leid, Dir bzgl. Mokro nicht weiterhelfen zu können.
Aber ich habe als Laie mit solchen speziellen Excel-Problemen immer sehr gute Antworten und Unterstützung bekommen.
Viel Erfolg.

nosp52

Hallo Tschejtx
mit Makros bin ich nicht so bewandert.
sicher kann Dir jemand anders weiterhelfen
Gruss PAUL

Hallo Graubarth,

vielen Dank für die schnelle Hilfe. Es klappt auch ganz gut. Allerdings habe ich zwei Probleme:

  1. die Zelleninhalte vor C sind linksbündig und die Zellen inhalte nach C rechtsbündig. Für mich ist es aber wichtig dass die Formate gleich bleiben, ich rechne nicht mit den Zelleninhalten, aber ich stelle nachher Sverweise da mit denen ich diesen Zelleninhalten (sowas wie Artikelnummern, die die ganze zeit linksbünfig sind) richtige Zahlenwerte zuordnen werde. Das ist für die Aufbereitung meines Datensatzes sehr wichtig.
    Hast du einen Tipp wie der Datensatz aufbereitet werden kann, sodass der Sverweis weiterhin anwendbar ist, d.h. dass die beiden datensätze mit den artikeln als eindeutige schlüssel deckungsgleich sind.

  2. der Datensatz verändert sich jedes mal, deswegen soll er automatisiert werden. D.h. ich werde immer andere Datensätze einkopieren müssen und die Formeln müssen jedesmal an „anderen Stellen“ greifen.

hast du einen Tipp?

Danke dir :smile:

Hallo Tschejtx

Hier hast du einen nicht ganz sauberen Code.
Für etwas bessers feht mir z.Z. leider die Zeit.

Achso die Zahlen mit den Nullen werden in der Spalte B
als Text eingetragen. Das vereinfacht das Ganze aber rechnen mit den Zahlen ist schwer.

Ich hoffen du kommst damit klar.

Sub test()
'Zelle mit ersten C Ermitteln
For i = 2 To 10

Cells(i, 2).Value = Cells(i, 1) 'alle Zellenwerte von Spalte A nach B Kopieren
If Cells(i, 1) = „C“ Or Cells(i, 1) = „C“ Then VorC = i - 1 'Zelle mit dem C ermitteln

Next i

'Zellen vor entsprechend in Spalte B eintragen
For ii = 2 To VorC

If IsNumeric(Cells(ii, 1)) Then 'Prüfen auf Zahl
Cells(ii, 2).Select 'Antwortzelle auswählen
Selection.NumberFormat = „@“ 'Antwortzelle auf Text formatieren
Cells(ii, 2).Value = „0“ & Cells(ii, 1) 'Antwortzelle [Cells(ii, 2)] mit führender 0 und Wert füllen
End If

If Not IsNumeric(Cells(ii, 1)) Then
Cells(ii, 2).Value = Cells(ii, 1) 'wenn keine Zahl
End If

Next ii

End Sub

Gruß Michael

Grüezi Tschejtx

Da die Diskussion im Visual-Basic Brett schon so aktiv und lebendig läuft, denke ich nicht, dass es Sinn macht, das Ganze hier auch noch parallel zu diskutieren.

Fein, dass Du ins Brett gefunden hast.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Der sverweis ist unabhängig von allem …d. h., er müsste funktionieren. Bitte ausprobieren. Ansonsten
noch einmal melden.

Hallo Michael,

wo ist denn der Unterschied zwischen i und ii?! Den verstehe ich nicht ganz.
Und warum benutzt du zweimal :
If Cells(i, 1) = „C“ Or Cells(i, 1)

Danke dir! :smile:

Hallo,
ich will versuchen Dir zu helfen, das ist aber schwer, wenn jemand fast keine Ahnung von Makro-Programmierung hat. Also:

  1. man kann jede Zelle einer Exel-Tabelle adressieren, Cells(row,col), row,col sind Zeile und Spalte und sollten über Variable angesprochen werden, Zeile vom Typ Long da mehr als 32768 Zeilen möglich sind. Also
    Dim row as long
    Dim col as integer
    row = …
    col= …
  2. Cells(row,col) greift auf die aktuelle Tabelle zu, man sollte mit Sheets() qualifizieren, also Sheets().Cells(row,col). ist entweder ein String, z.B. „Tabelle1“, besser eine Stringvariable mit dem Namen, also
    Dim tab as String
    tab = „Tabellex“
  3. Es gibt mehrere Möglichkeiten Schleife zu bilden, siehe dazu die Beispiele bei VBA. Hier empfiehlt sich eine Schleife über eine Spalte die immer besetzt ist:
    Do While Cells(row, col) VbNullstring

row = row + 1 ’ Schleife über alle Zeilen
Loop
ist der Bearbeitungsteil hier z.B.
if Mid(Cells(row,y) = „C“ then Exit Do ’ Ende bei der Zelle mit C
if IsNumeric(Cells(row,y)) then
Cells(row,y) = „0“ & Cells(row,y)
end if
Achtung: die Zellen müssen Textformat haben, sonst wird die führende Null bei der Anzeige wieder unterdrückt (oder das Kommentarzeichen ’ davor hängen.
4. Ein „anständiger“ Programmierer verwendet statt Strings wie „C“, „0“ entsprechend besetzte Stringvariablen, das gilt natürlich auch für Zahlen
etc.
Alles klar? Viel Erfolg
Rainer

Moin

ich würde es mit folgender Formel in den Zellen der Spalte b ab Zeile 2 versuchen:

=wenn( A1 = „C“; A2; „0“&A2 )

Grüße aus Bremen und Berlin

Hallo Tschejtx

In der ersten Schleife (i) lassen ich erst alle Kopieren und dann die Zeile mit dem C suchen.
In der zweiten Schleife (ii) Kopiere ich nochmal alle vor dem C.

Wenn man mit meheren Schleifen Arbeitet sollten sie nicht alle gleich Heissen. Denn es kann zu Fehlern kommen.

If Cells(i, 1) = „C“ Or Cells(i, 1) = „C“ Then VorC = i - 1

Sorry !!! ein Fehler meiner Seits.
Sollte If Cells(i, 1) = „C“ Or Cells(i, 1) = „c“ Then VorC = i - 1 so sein. Vergleiche großes C und kleines c.
Wenn du nur ein großes C hast kannst du diesen Teil [Or Cells(i, 1) = „c“] weglassen.

Gruß Michael

Wie ich sehe hast du Schon eine Antworten!

gruß
ramaka

Ich wuerde kein Makro nutzen, sondern mit der „Wenn() - If ()“ - Funktion/Formel operieren…
Kombinieren mit Pruefung auf das erste Zeichen in der Zelle und dann die ‚0‘ setzen oder nicht.
Ueber „Bereich / Range ()“ auf einen Zellbereich einschraenken.

(Ist Makro-aehnlich, aber ich denke es geht etwas einfach, da der Makro-Editor nicht benoetigt wird)

VG
Markus
Wenn

wurde das problem schon gelöst?

was ist, wenn bei der zeile 6 wieder eine C steht? ist dann in der zeile 1-3 eine 2. 0 voranzusetzen?

ansonsten/allgemein der hinweis: alles oberhalb des untersten C hat immer mind. eine 0 voran.