PDA

Vollständige Version anzeigen : Werte automatisch einfügen


Bigsash99
10.07.2015, 19:34
Hallo, ich habe folgendes Problem. Ich habe eine Exeltabelle in der ich in den ersten 3 Spalten Werte eintragen muss. Bei der 4.ten kommt ein neuer Wert gefolgt von den 3 vorherigen. Ich möchte das nun automatisieren. Folgende Formel habe ich benutzt "=AM2 & " / " &A3 & " / " &B3 & " / " &C3", nun habe ich aber das Problem, das ich in der 4.ten Spalte den Anfangswert nicht eintragen kann ohne das die Funktion auf der Strecke bleibt. Hat jemand eine Lösung?

Mfg

Hajo_Zi
10.07.2015, 20:05
Der Name einer hochgeladenen Mappe wird im Beitrag automatisch angezeigt, sodass es bei Verwendung von aussagekräftigen Namen leichter fällt, sie später im Ablageordner wiederzufinden und sie gedanklich einem bestimmten Thema zuzuordnen. Namen wie Test, Mappe, Beispiel usw. sind so allgemein, dass eine Zuordnung zu einem Thema unmöglich gemacht wird.

<img src="http://Hajo-Excel.de/images/grusz1.gif" align="middle" height="40" alt="Grußformel"><a href="http://Hajo-Excel.de/index.htm"><img border="0" src="http://Hajo-Excel.de/images/logo_hajo3.gif" align="middle" height="40" alt="Homepage"></a>

Kimba06
11.07.2015, 08:55
Hallo,
ich verstehe Dein Problem nicht. Deine Formel in D2 macht doch genau was Sie soll. Der Wert aus AM1 wird vor die Werte aus A2-C2 gesetzt. Genau so funktioniert es auch in der nächsten Zeile =AM2 & " / " &A3 & " / " &B3 & " / " &C3 zeigt Dir genau das an was Du im Screenshot beschrieben hast.
Gruß Achim

Bigsash99
11.07.2015, 09:02
Hallo,
ich verstehe Dein Problem nicht. Deine Formel in D2 macht doch genau was Sie soll. Der Wert aus AM1 wird vor die Werte aus A2-C2 gesetzt. Genau so funktioniert es auch in der nächsten Zeile =AM2 & " / " &A3 & " / " &B3 & " / " &C3 zeigt Dir genau das an was Du im Screenshot beschrieben hast.
Gruß Achim

Hallo,
wenn ich in der 4.ten Spalte, den Wert per hand eintrage funktioniert die ganze Sache nicht mehr. Siehe Screenshot----->

Kimba06
11.07.2015, 09:19
Hallo,
was für einen Wert willst Du denn eintragen? Dein Wert der in Spalte 4 steht setzt sich doch aus dem Wert aus AM & A & B & C zusammen.
Gruss Achim

Kimba06
11.07.2015, 09:23
Hab Dir mal eine Datei angehängt in der genau das passiert was Du beschreibst.

Bigsash99
11.07.2015, 09:31
Hab Dir mal eine Datei angehängt in der genau das passiert was Du beschreibst.

Gut also können wir den wert "AM" streichen.

In der 4te Spalte soll zuerst der selbst eingetragene Wert stehen und dann der Rest.

"per Hand eintragen" & A & B & C

RPP63neu
11.07.2015, 09:43
Hallo!
In einer Zelle kann nur entweder eine Formel oder ein Wert stehen.
Was Du vorhast, ist eine Manipulation eines händisch eingegebenen Werts.
Dies geht nur mit VBA, nicht mit einer Formel.
Interesse?

Gruß Ralf

Bigsash99
11.07.2015, 09:48
Hallo!
In einer Zelle kann nur entweder eine Formel oder ein Wert stehen.
Was Du vorhast, ist eine Manipulation eines händisch eingegebenen Werts.
Dies geht nur mit VBA, nicht mit einer Formel.
Interesse?

Gruß Ralf

Ja, natürlich.

Kimba06
11.07.2015, 09:51
Hallo,
wie Ralf es schon geschrieben hat geht das so nicht. Versuch mal folgendes:Range("D2").Select
Wert = Range("D2")' oder Wert als Inputbox abfragen
Range("D2") = Wert & Range("A2") & Range("B2") & Range("C2")

Diesen Code ausführen nach verlassen von D2. Evtl. kann man das dann noch für die folgenden Zeilen anpassen und statt A2 usw. eine Variable setzen.
Gruss Achim

Bigsash99
11.07.2015, 09:53
Hallo,
wie Ralf es schon geschrieben hat geht das so nicht. Versuch mal folgendes:Range("D2").Select
Wert = Range("D2")
Range("D2") = Wert & Range("A2") & Range("B2") & Range("C2")

Diesen Code ausführen nach verlassen von D2. Evtl. kann man das dann noch für die folgenden Zeilen anpassen und statt A2 usw. eine Variable setzen.
Gruss Achim

Vielen dank! Da ich ich aber ein Excel-Dödel bin habe ich keine Ahnung wo ich das eintragen soll.

RPP63neu
11.07.2015, 09:54
Hi!
Ins Klassenmodul der Tabelle (Rechtsklick auf Tabellenreiter, Code anzeigen)
Ins rechte Fenster des VBA-Editor folgendes kopieren:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo EventsAn
With Target
If .Count > 1 Then Exit Sub 'Mehrfachmarkierungen ausschließen
If .Column = 4 Then 'nur für Spalte D
Application.EnableEvents = False
.Value = .Value & "/" & .Offset(0, -3) & "/" & .Offset(0, -2) & "/" & .Offset(0, -1)
End If
End With
EventsAn: Application.EnableEvents = True
End Sub
Gruß Ralf

Bigsash99
11.07.2015, 10:04
Vielen dank, das geht. Was muss ich beachten bzw. ändern wenn ich andere Spalten mit einbinden will?

RPP63neu
11.07.2015, 10:06
Damit Du die Zelle in D auch löschen kannst, folgende Erweiterung:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo EventsAn
With Target
If .Count > 1 Then Exit Sub 'Mehrfachmarkierungen ausschließen
If .Column = 4 Then 'nur für Spalte D
Application.EnableEvents = False
If .Value = "" Then Application.EnableEvents = True: Exit Sub
.Value = .Value & "/" & .Offset(0, -3) & "/" & .Offset(0, -2) & "/" & .Offset(0, -1)
End If
End With
EventsAn: Application.EnableEvents = True
End Sub
Gruß Ralf

RPP63neu
11.07.2015, 10:07
Hi!
wenn ich andere Spalten mit einbinden will?
Andere Spalten im Ausgabestring oder andere Spalten, die überwacht werden?

Bigsash99
11.07.2015, 10:11
Hi!

Andere Spalten im Ausgabestring oder andere Spalten, die überwacht werden?

Sowohl als auch. Die Überwachung bei Spalte O,P,Q und Ausgabe Spalte X.

RPP63neu
11.07.2015, 10:20
Ich gebe jetzt mal nur Hilfe zur Selbsthilfe.
(Du sollst ja auch etwas lernen) :p
If .Column = 4 Then
betraf ja Spalte D.
Spalte X hat also welche Spaltennummer?
(wenn Du nicht zählen willst, kannst Du ja mal in eine beliebige Zelle der Spalte X =SPALTE() eintragen ...)

.Offset() ist ein Zellenversatz.
Parameter sind: .Offset(Zeilenversatz, Spaltenversatz)
Du willst in der gleichen Zeile bleiben,
der erste Wert (Spalte O) steht 9 Spalten links (also minus) neben X,
also .Offset(0, -9)

Kommst Du damit klar?

Gruß Ralf

Bigsash99
11.07.2015, 10:22
Ich gebe jetzt mal nur Hilfe zur Selbsthilfe.
(Du sollst ja auch etwas lernen) :p
If .Column = 4 Then
betraf ja Spalte D.
Spalte X hat also welche Spaltennummer?
(wenn Du nicht zählen willst, kannst Du ja mal in eine beliebige Zelle der Spalte X =SPALTE() eintragen ...)

.Offset() ist ein Zellenversatz.
Parameter sind: .Offset(Zeilenversatz, Spaltenversatz)
Du willst in der gleichen Zeile bleiben,
der erste Wert (Spalte O) steht 9 Spalten links (also minus) neben X,
also .Offset(0, -9)

Kommst Du damit klar?

Gruß Ralf

Ich gucke es mir mal an.

RPP63neu
11.07.2015, 10:25
Eine Bitte!
Zitiere nicht immer den darüber stehenden Beitrag!
Es reicht völlig, die Antwort bei "Direkt antworten" zu geben.

Gruß Ralf

Bigsash99
11.07.2015, 10:27
Dann sollte das wohl so aussehen:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo EventsAn
With Target
If .Count > 1 Then Exit Sub 'Mehrfachmarkierungen ausschließen
If .Column = 24 Then 'nur für Spalte X
Application.EnableEvents = False
If .Value = "" Then Application.EnableEvents = True: Exit Sub
.Value = .Value & "/" & .Offset(0, -9) & "/" & .Offset(0, -8) & "/" & .Offset(0, -7)
End If
End With
EventsAn: Application.EnableEvents = True
End Sub

RPP63neu
11.07.2015, 10:28
:winner:

Bigsash99
11.07.2015, 10:31
Vielen Dank, für eure Hilfe!!!

Bigsash99
12.07.2015, 19:50
Ein Frage noch, wenn ich bloß eins von den 3 Feldern ausfülle sehe ich von den anderen trotzdem noch "/ /". Kann man das irgendwie unterbinden?

RPP63neu
13.07.2015, 08:07
Guten Morgen!
Ja, hab ich mir gedacht, dass da noch was kommt ...
Ist etwas umfangreicher.
Das Makro durchläuft eine Schleife,
prüft, ob in den Spalten Inhalt ist
und setzt den Ausgabestring schrittweise zusammen:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Versatz As Long
Dim Ausgabe As String
On Error GoTo EventsAn
With Target
If .Count > 1 Then Exit Sub 'Mehrfachmarkierungen ausschließen
If .Column = 24 Then 'nur für Spalte X
If .Value = "" Then Exit Sub
Ausgabe = .Value
For Versatz = -9 To -7 'Spalten O:Q
If .Offset(0, Versatz) <> "" Then Ausgabe = Ausgabe & "/" & .Offset(0, Versatz)
Next
Application.EnableEvents = False
.Value = Ausgabe
End If
End With
EventsAn: Application.EnableEvents = True
End Sub
Kommst Du damit klar?

Gruß Ralf

Bigsash99
13.07.2015, 19:50
Hallo,

hänge ich das hinten dran oder ersetzte ich das ursprüngliche Makro?

RPP63neu
14.07.2015, 06:49
Guten Morgen!
Tausche es aus.
Im Zweifel - gerade in der Lernphase - einfach mal ausprobieren.
Du kannst Dir im VBA-Editor auch mit "Debuggen" einen Haltepunkt setzen und dann mittels F8 das Makro in Einzelschritten durchlaufen.
Wenn Du dann noch Ansicht, Lokalfenster wählst, siehst Du, wie sich die Variablen verändern.

Gruß Ralf