Excel-Spalte programmieren, um eingegebene Werte direkt zu ersetzen

[RTS]Senti

Ensign
Registriert
Jan. 2009
Beiträge
130
Hallo, ich sitze auf der Arbeit gerade an einer Tabelle, die ich später mal bei uns hochladen will, damit jeder Rechner im Betrieb auf die Datei zugreifen und die Tabelle pflegen kann. Dafür könnte jetzt eine Art Autokorrektur gebrauchen, die nur bei Eingaben in einer bestimmten Spalte zum Einsatz kommt und alle anderen Spalten nicht beeinflusst. Die normale Autokorrektur bezieht sich ja leider auf die gesamte Tabelle. Daher muss was anderes her.

Stelle mir das so vor, dass man als Vorarbeit die Sachen erstmal außerhalb der eigentlichen Tabelle irgendwo eintippen muss, damit Excel weiß, welcher Begriff durch welchen anderen Begriff ersetzt werden soll. Und je mehr man diese "versteckte Datenbank" mit den Infos füllt, umso zuverlässiger wird das ganze.
Ich gebe dann zB unter meiner Spalte eine Zahlenfolge ein und daraus soll nach Enter ein bestimmtes Wort/eine Wortgruppe werden. In der nächsten Zeile mach ich das auch, diesmal eine andere Zahlenfolge und ein anderes Ersetzungswort, usw. Irgendwann wird die Liste sehr lang sein und bestimmte Zahlenfolgen werden sich wiederholen. Dafür wäre eine automatische Ersetzung eine gute Sache.

Hab schon woanders gesucht und das hier gefunden https://www.excel-inside.de/vba-loesungen/zellen-a-bereiche/944-daten-direkt-bei-eingabe-ersetzen was auf mich aber eher umständlich und unansehnlich wirkt, weil man eine separate Tabelle bzw. Datenblatt erstellen muss. Ich fände es aber besser, wenn man später einfach nur die Excel-Datei öffnet und dann nur die Haupttabelle sehen kann, ohne zusätzlichen Kram.

Gibt es da ne bessere Lösung? Zumal ich eh eher Excel-Einsteiger bin :p
 
Du kannst die Lookup-Tabelle auch ein ein andere Excel Datei packen, musst dann halt immer beide gemeinsam ablegen. Oder du legst das als Array in das VBA Script.
 
  • Gefällt mir
Reaktionen: [RTS]Senti
Bildschirmfoto vom 2018-10-19 20-31-29.png


Folgende Formel eintragen:
Code:
=WENN(ISTFEHLER(SVERWEIS(D2;$A$2:$B$6;2;FALSCH()));"";SVERWEIS(D2;$A$2:$B$6;2;FALSCH()))

Die Daten aus der alten Liste werden geprüft und wenn "name 1" in der neuen Liste vorhanden ist, wird die Zahl ersetzt.

Hilft das oder habe ich das Thema verfehlt?
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: [RTS]Senti
Man kanns mit einem Makro lösen das guckt, ob deine gewünschte Spalte verändert wurde.
Je nachdem, wie umfangreich deine Wortliste ist, könnte man es dann mit If/Else oder Select Case suchen und ersetzen:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

With Target

If .Column = 3 Then 'Spalte 3 = Spalte C
Application.EnableEvents = False

  If .Value = "X" Then 'Wenn Wert in Zelle = X dann mit y ersetzen
  .Value = Replace(.Value, "X", "y")
  ElseIf .Value = "A" Then 'Wenn Wert in Zelle = A dann mit b ersetzen
  .Value = Replace(.Value, "A", "b")
  End If

Application.EnableEvents = True
End If

End With

End Sub
 
Zuletzt bearbeitet:
@Cave Johnson
die Lösung ist aber nicht wirklich elegant bzw. flexibel ;)
 
Highspeed Opi schrieb:
Anhang anzeigen 717974

Folgende Formel eintragen:
Code:
=WENN(ISTFEHLER(SVERWEIS(D2;$A$2:$B$6;2;FALSCH()));"";SVERWEIS(D2;$A$2:$B$6;2;FALSCH()))

Die Daten aus der alten Liste werden geprüft und wenn "name 1" in der neuen Liste vorhanden ist, wird die Zahl ersetzt.

Hilft das oder habe ich das Thema verfehlt?
Bisschen schwer, das ganze von zuhause aus darzustellen. Hier mal zur Veranschaulichung. Bin mir gerade nicht sicher, wieviele Spalten vor und nach der Autokorrektur/Ersetzungsspalte sind:

testtabe.jpg


Also wenn ich unter D "123" eingebe, soll daraus nach Enterdrücken direkt "Wortgruppe1" werden. Nach "234" "Wortgruppe2" usw. Das bei Spalte K, J ist jetzt eigentlich nur zur Veranschaulichung, quasi die Vorarbeit und sollte wenn möglich bei der fertigen Tabelle nicht zu sehen sein oder zumindest dezenter sein. Ich hatte gehofft, es gibt eine Art interne Datenbank für jede Spalte, wo man das easy machen kann, aber das ist anscheinend nicht der Fall
 
Naja, die "Datenbank" musst du dir schon selbst anlegen. Nur die Frage eben, wie du sie speicherst: Als Sheet in der gleichen Datei, als eigene Datei (Excel, csv, xml etc.) oder als Array im VBA Script.
 
  • Gefällt mir
Reaktionen: [RTS]Senti
Du kannst deine Hilfstabelle ja wie gesagt auf ein separates Blatt schreiben und dieses Blatt dann ausblenden.

Oder noch eine Alternative als Makro:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Dim woerter(1, 3) As String


  woerter(0, 0) = "A" 'Suche nach ...
  woerter(1, 0) = "b" 'ersetze durch ...

  woerter(0, 1) = "X" 'Suche nach ...
  woerter(1, 1) = "y" 'ersetze durch ...

  woerter(0, 2) = "M" 'Suche nach ...
  woerter(1, 2) = "n" 'ersetze durch ...

  woerter(0, 3) = "R" 'Suche nach ...
  woerter(1, 3) = "s" 'ersetze durch ...



With Target

If .Column = 3 Then
  Application.EnableEvents = False

    For i = 0 To 3
   
      If woerter(0, i) = .Value Then
        .Value = woerter(1, i)
        Exit For
      End If
   
    Next i

  Application.EnableEvents = True
End If

End With

End Sub
 
  • Gefällt mir
Reaktionen: [RTS]Senti
Meine Basis-Formel braucht immer mindestens zwei Spalten.
Eine Spalte in der ein Zusammenhang hergestellt wird und eine zweite Spalte, in der eine Zahl/Wortgruppe damit verbunden wird. Ob du diese Spalte versteckst oder nicht, bleibt dir überlassen.

Du müsstest bei meiner Basis-Formel auf deine Liste umgedacht also so vorgehen:
Du schreibst in C2 "123" und die Formel sucht aus der Spalte K2 "123" raus, ließt "Wortgruppe1" und trägt diese in D2 ein.

Wie gesagt, ist es nur eine "Basis-Formel", welche du selbst erweitern oder anderen Zellen zuweisen musst.
Wenn du auf die Formel klickst, siehst du ja farblich markiert die einzelnen Zellen die gelesen werden und die Zellen in die geschrieben wird.
Du kannst es also unsichtbar gestalten, indem du die Spalten ausblendest oder in eine andere Arbeitsmappe verschiebst oder komplett in eine andere Excel Datei.

Wenn du Office 365 hast: Mit Access kannst du wunderbar Datenbanken erstellen. Wie genau das funktioniert, musst du aber selbst herausfinden, weil ich selbst keine Datenbanken erstelle.
 
  • Gefällt mir
Reaktionen: [RTS]Senti
Zurück
Oben