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!
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.
vielen Dank für die schnelle Hilfe. Es klappt auch ganz gut. Allerdings habe ich zwei Probleme:
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.
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.
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
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.
Hallo,
ich will versuchen Dir zu helfen, das ist aber schwer, wenn jemand fast keine Ahnung von Makro-Programmierung hat. Also:
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= …
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“
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
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.
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)