2.2k Aufrufe
Gefragt in Tabellenkalkulation von m-o-m Mitglied (499 Punkte)
Hallo Excelisten,

ich habe in meiner Excel 2010-Liste folgende Herausforderung:

In Spalte sind folgende Daten einzutragen:

[list]A/ABC/00001/2015
A/ABC/00002/2015
A/ABC/00003/2015
A/ABC/00004/2015
A/ABC/00005/2015[/list]

usw. usw.

Es ändert sich lediglich der mittlere Part. Dies sind 5 Ziffern.
Davor kommt immer
A/ABC/
Dahinter immer
/2015


Gibt es eine Möglichkeit, dass ich in eine Zelle diese fünfstellige Zahl eintrage und Excel diese in dieser Zeller vervollständigt und als Text einträgt???

Also ungefähr so:

Ich trage in Zelle C5 ein:
12345
und Excel vervollständigt es in
A/ABC/12345/2015


Das würde mir extrem helfen, da es viiiiiiele Eintragungen sind (fünfstellig halt :-)

Vielen Dank schonmal vorab fürs lesen und nachdenken und hofffentlich auch lösen.

Gruß Maik

11 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Maik,

verwende folgendes benutzerdefinierte Zellformat:

"A/ABC/"00000"/2015"


Gruß
Rainer
0 Punkte
Beantwortet von m-o-m Mitglied (499 Punkte)
Hallo Rainer,

vielen Dank für die schnelle Antwort.

Es ist aber leider nicht die Lösung meines Problems.

Die korrekte und vollständige Zeichenfolge wird ja nur angezeigt.

Ich benötige die gesamte Zeichenfolge aber auch für Folgevorgänge. Und das ist eben nicht möglich. Leider.

Gruß Maik
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Maik,

dann musst du es eben nicht per Zellformat, sondern per Formel machen.

Schreibe in die erste Zelle...

="A/ABC/"&TEXT(ZEILE(A1);"00000")&"/2015"

...und ziehe die Formel nach Bedarf nach unten.

Eine andere Möglichkeit fällt mir anhand deiner mageren Beschreibung leider nicht ein.

Gruß
Rainer
0 Punkte
Beantwortet von m-o-m Mitglied (499 Punkte)
Hallo Rainer,
hallo alle anderen,

und sorry für die unausgereifte Beschreibung.

Ich versuche es nochmal.

Meine Vorstellung wäre ein Makro, welches wie folgt funktioniert:
Prüfe in Spalte G, ob ein Inhalt eine Länge von 5 Zeichen hat.
Wenn ja, dann erweitere diese Zeichen um den vorderen (A/ABC) und den hinteren (/2015) Teil.
Somit wird diese Zelle bei der nächsten Makroprüfung übergangen.

Ich habe es mal für eine Zelle ganz stümperhaft versucht. VBA ist, wie man sieht, nicht meins.
Ich hoffe das Beispiel macht es jetzt deutlicher.

Ich habe in Zelle G6 meine fünfstellige Zahl "12345" eingetragen. Das ist auch meine aktive Zelle.
In H6 habe ich bei der Makroaufzeichnung "A/ABC/" eingetragen.
In I6 "/2015".
In J6 habe ich die Zellen H6, G6, I6 verkettet und den Wert in G6 eingetragen.
Zum Schluss noch die Zellen H6-J6 gelöscht und G7 aktiviert.
Ist wahrscheinlich hahnebüchener Quatsch, den ich hier verzapfe, aber es soll ja nur verdeutlichen, wie ich es mir vorstelle. Und das ganze ohne Hilfsspalten. DAS wäre echt super.

Sub Makro2()
ActiveCell.FormulaR1C1 = "A/ABC/"
Range("I6").Select
ActiveCell.FormulaR1C1 = "/2015"
Range("J6").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[-2],RC[-3],RC[-1])"
Range("J6").Select
Selection.Copy
Range("G6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("H6:J6").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("G7").Select
End Sub


Nochmals Vielen Dank.

Gruß Maik
0 Punkte
Beantwortet von flupo Profi (17.7k Punkte)
Wenn die Werte vor und nach der Zahl konstant sind, kann man das ja auch
bei den Folgeschritten berücksichtigen und die Verkettung erst dort machen.

Gruß Flupo
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Maik,

füge den folgenden Code in das VBA-Projekt des betreffenden Tabellenblatts ein:

Private Sub Worksheet_Change(ByVal Target As Range)

'nur wenn Eingabe in Spalte G erfolgt, dann..
If Not Intersect(Target, Range("G:G")) Is Nothing Then
'Prüfen, ob die Eingabe 5 Zeichen lang und Zahl ist
If Len(Target.Value) = 5 And IsNumeric(Target.Value) Then
Application.EnableEvents = False 'Events ausschalten
Target.Value = "A/ABC/" & Target.Value & "/2015" 'neues Format in Zelle schreiben
Application.EnableEvents = True 'Events wieder einschalten
End If
End If

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von kaleun Einsteiger_in (39 Punkte)
Hallo Maik,

schau dir mal die beiden Codes an:

Beispiel 1:

Sub zellen()

Dim i As Integer

For i = 1 To 10
Cells(i, 1).Activate
If Len(ActiveCell) = 5 Then
ActiveCell = "A/ABC/" & ActiveCell.Value & "/2015"
End If
Next i

End Sub

Hier gibts du deine Zahlen ein (ohne A/ABC usw), das Makro überprüft dann
den Zellbereich und änder bei 5-stelliger Zahl den Zellinhalt.
Den Zellbereich mußt du natürlich anpassen.

Beispiel 2:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

If Len(Target.Value) = 5 Then
ActiveCell.Offset(-1, 0).Value = "A/ABC/" & ActiveCell.Offset(-1, 0).Value &
"/2015"
End If

End Sub

Hier wird direkt nach der Eingabe einer 5-stelligen Zahl geprüft und evtl. dann
geändert.

Beispieltabelle gibt es
hier
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Kaleun ^^

du hast in deinem ereigniscode einen cirkelbezug

nutze

Application.EnableEvents = False

am anfang deines codes

Application.EnableEvents = True

am ende deines codes

gruss nighty
0 Punkte
Beantwortet von m-o-m Mitglied (499 Punkte)
Hallo und VIELEN DANK für die Makros und SORRY, dass ich mich erst jetzt melde (irgendwie bekomme ich keine mails)

ich habe es mal ausprobiert. Auch in der Beispieldatei.

Hierzu zwei Anmerkungen:

1. Das erste Makro funkioniert nur in Spalte A. Ich habe versucht es für Spalte G zu erweitern. Ohne Erfolg. Da fühle ich mich echt ziemlich beschränkt. (Und bei VBA stimmt das wohl auch. :-)

2. Das zweite Makro wäre supercool. Aber es füllt immer eine andere Zelle aus. Wenn ich in B4 die Zahlen eintrage, werden in A3 die Zeichen eingefügt. Bei G8 ist es H7. Und könnte man dies Makro, wenn es richtig ausfüllt, auf die Spalte G begrenzen?

VIELEN DANK SCHONMAL BIS HIER HIN.

Gruß Maik
0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Maik,

zu 1:
So funktioniert das Makro für Spalte G:

Sub zellen()

Dim i As Integer

For i = 1 To ActiveSheet.Cells(Rows.Count, 7).End(xlUp).Row
If Len(Cells(i, 7)) = 5 Then Cells(i, 7) = "A/ABC/" & Cells(i, 7).Value & "/2015"
Next i

End Sub


zu 2: siehe meine Antwort 6 ;-).

Gruß

M.O.
...