Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zelleninhalt auslesen, suchen und bearbeiten

Zelleninhalt auslesen, suchen und bearbeiten
07.08.2018 13:53:39
spezi
Hallo Zusammen,
ich habe eine Dropdown-Liste in Zelle F7 mit verschiedenen Maschinen. Maschine 1,2,3.
Maschine 1 steht nochmals in der Zelle A2
Maschine 2 steht nochmals in der Zelle A3
Maschine 3 steht nochmals in der Zelle A4
Nun will ich das er die Zelle F7 ausliest ( ob Maschine 1,2,3) , diesen Wert nimmt und danach im Tabellenblatt danach sucht.
Wenn gefunden dann in die Nachbarzelle "gecheckt" reinschreiben.
Bsp. in der Dropdownliste F7 wird die Maschine 2 angewählt. Dann soll er nach der Maschine 2 suchen, in diesem Fall steht sie in der Zelle A3, dann in die Nachbarzelle B3 gecheckt eintragen.
Ich würde das gerne mit VBA lösen wollen.

Ich hoffe das ist verständlich genung.
Grüße und Danke
Anzeige

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zelleninhalt auslesen, suchen und bearbeiten
07.08.2018 13:59:34
Hajo_Zi
Wenn(Fehler(F7;Tabelle1(A:F;Spalte();2)

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Spalte()-4
07.08.2018 14:00:48
Hajo_Zi
Gruß Hajo
AW: Zelleninhalt auslesen, suchen und bearbeiten
07.08.2018 14:05:54
Michael
Hallo!
Sub a()
Dim f As Range
With ActiveSheet
Set f = .UsedRange.Find(what:=.Range("F7"), LookIn:=xlValues, lookat:=xlWhole)
If Not f Is Nothing Then f.Offset(, 1) = "gechecked"
End With
End Sub
LG
Michael
Anzeige
AW: Zelleninhalt auslesen, suchen und bearbeiten
07.08.2018 15:25:42
spezi
Vielen Dank Michael,
funktioniert super:)
Könntest du evt. noch Kommentare einfügen was in jedem Schritt passiert?
Dient nur zum Verständnis für mich.
Vielen Dank!!!
Grüße
AW: Zelleninhalt auslesen, suchen und bearbeiten
07.08.2018 15:53:42
Michael
Hallo!
Kommentare bei einem 5-Zeiler, ist das Dein Ernst? Aber ja, klar, kann ich:
Sub a()
Dim f As Range 'Variablendeklaration
'im aktiven Tabellenblatt
With ActiveSheet
'der Variablen "f" eine Zell-Fundstelle als Zell-Ort (Range) zuweisen
'vgl. mit der Excel-Suche über Strg + [f]
'Gesucht wird der Zell-Wert aus Zelle F7 im gesamten "verwendeten Bereich"
'des aktiven Tabellenblattes
Set f = .UsedRange.Find(what:=.Range("F7"), LookIn:=xlValues, lookat:=xlWhole)
'Wenn f tatsächlich eine Fundstelle ist, also der Wert aus F7 in einer
'anderen Zelle gefunden wird (vgl. Excel-Suche die erste Fundstelle)
'dann wird die Zelle ein Spalte rechts davon (=.Offset(Zeile, Spalte) hier also
'.Offset(,1) = .Offset(0,1)) mit dem Wort gefüllt/überschrieben.
If Not f Is Nothing Then f.Offset(, 1) = "gechecked"
End With
End Sub
Das ist ja mehr Kommentar als Code, und den Code kann man schon nachvollziehen, oder?! ;-)
LG
Michael
Anzeige
AW: Zelleninhalt auslesen, suchen und bearbeiten
07.08.2018 15:58:55
spezi
Vielen Dank Michael!!!
:))
AW: Gern, Danke für die Rückmeldung, owT
07.08.2018 16:13:19
Michael
AW: Zelleninhalt auslesen, suchen und bearbeiten
07.08.2018 22:42:51
Gerd
'N Abend,
wenn der Suchbegriff nicht in Spalte A steht, dann wird er im Zweifel in F7 gefunden u. in G7 "gechecked" geschrieben.
Den UsedRange sollte man auf Columns("A") einschränken.
Gruß Gerd
Anzeige
AW: Stimmt schon...
08.08.2018 08:35:59
Michael
...aber auch bei der "fortlaufenden" Eintragung von "gechecked" in der Zeile könnte man verbessern. Im ganzen Satz also:
Sub a()
Dim f As Range, fO As Range
With ActiveSheet
Set f = .Columns(1).Find(what:=.Range("F7"), LookIn:=xlValues, lookat:=xlWhole)
If Not f Is Nothing Then
Set fO = .Cells(f.Row, .Columns.Count).End(xlToLeft)
If fO = f Then
f.Offset(, 1) = "gechecked"
Else:
fO.Offset(, 1) = "gechecked"
End If
End If
End With
Set f = Nothing: Set fO = Nothing
End Sub
LG
Michael
Anzeige
AW: Zelleninhalt auslesen, suchen und bearbeiten
07.08.2018 16:12:37
spezi
Hi Michael,
noch eine kurze Frage,
wie sieht der Code aus wenn ich will das er fortlaufend "gecheckt" schreiben soll.
Also wenn in der Spalte B2 schon etwas steht soll er in C2 weiter schreiben.
Vielen Dank!
Grüße
AW: Dann
07.08.2018 16:15:38
Michael
...so
Sub a()
Dim f As Range
With ActiveSheet
Set f = .UsedRange.Find(what:=.Range("F7"), LookIn:=xlValues, lookat:=xlWhole)
If Not f Is Nothing Then f.End(xlToRight).Offset(, 1) = "gechecked"
End With
End Sub
LG
Michael
Anzeige
AW: Dann
08.08.2018 08:49:48
spezi
vielen dank Michael!!!:))
AW: Gern, siehe auch meine AW an Gerd, owT
08.08.2018 11:34:31
Michael
AW: Gern, siehe auch meine AW an Gerd, owT
08.08.2018 12:00:35
spezi
sorry ich nochmal...
danke hab ich gesehen.
ich habe ein kleines Problemchen...
Alles bleibt gleich nur jetzt wil ich das er das "gecheckt" nicht in die Nachbarzelle schreibt sondern eine Zelle runter und eine nach Rechts ...
ich weis ich nerve aber hoffe auf deine Antwort:)
Grüße
Anzeige
AW: Wozu hab ich denn dann den Code kommentiert?
08.08.2018 14:00:45
Michael
Du Spezi...
das war ja sogar Deine Erfordernis, damit Du dann weißt, wie alles funktioniert und Du ggf. anpassen kannst. Wozu hab ich also den Code kommentiert, wenn Du Dir das nicht durchliest?
Für Deine unterschiedlichen Anforderungen ist einzig das Offset interessant. Das Offset bezieht sich immer auf die Fundzelle und verschiebt jene um Zeilen und oder Spalten:
f.Offset(, 1) = "gechecked"
Das Muster ist immer .Offset(Zeilen, Spalten) - positive Werte verschieben nach unten und rechts, negative Werte nach oben und links. Klar? Einfach ausprobieren oder nicht nach kommentierten Codes fragen... ;-)
LG
Michael
Anzeige
AW: Wozu hab ich denn dann den Code kommentiert?
08.08.2018 14:38:36
spezi
Hallo Michael,
das hab ich ja nun verstanden.....
Ich habe einen neuen Beitrag verfasst, vll verstehst du dann meine Problematik.....
Sorry nochmal...
"neuer Beitrag"
Hallo Zusammen,
ich hoffe hier gibt es Excel-Profis für meinen Fall..
Hier findet ihr die Excel Datei, um die Problematik besser zu verstehen...
ich hoffe ihr könnt mir helfen...
https://www.herber.de/bbs/user/123206.xlsx
Also,
ich habe eine Dropdown-Liste in der Zelle B26 mit verschiedenen Maschinen. Maschine 1,2,3.
Maschine 1 steht nochmals in der Zelle A5
Maschine 2 steht nochmals in der Zelle A9
Maschine 3 steht nochmals in der Zelle A13
Diese Maschinen haben jeweils drei Module--Arm,Board und Kopf die jeweils in verschiedenen intervallen justiert werden müssen.
Arm alle 90 tage
Kopf alle 180
Board alle 365
Ich habe ebenso 3 Schaltflächen mit Arm ,Board und Kopf.
Nun will ich , dass wenn ich die Schaltfläche Arm drücke, er die Zelle B26 ausliest ( ob Maschine 1,2,3) , die Maschine und das richtige Modul sucht und das nächste Justierdatum einträgt ( z.B heutige Datum + 90 Tage )
Bsp. in der Dropdownliste B26 wird die Maschine 2 angewählt. Nun wird die Schaltfläche "Arm" gedrückt. Nun soll bei der Maschine 2 , beim Modul Arm das nächste Justierdatum eingetragen werden. Die Eintragungen müssen fortlaufend sein, also nicht überschreiben. Bei jedem Mal drücken soll er es eine Zelle weiter rechts rein schreiben.
Ich hoffe das ist verständlich genung.
Vielen Dank!!!
Grüße
Anzeige
Du hast AW im neuen Beitrag, ich bin raus!
08.08.2018 16:12:01
Michael

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zelleninhalt auslesen, suchen und bearbeiten in Excel


Schritt-für-Schritt-Anleitung

Um den Zelleninhalt auszulesen und in einer anderen Zelle zu bearbeiten, kannst du den folgenden VBA-Code verwenden. Dieser Code sucht einen bestimmten Wert in einer Dropdown-Liste und trägt "gechecked" in die Nachbarzelle ein.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden Code ein:

    Sub a()
       Dim f As Range
       With ActiveSheet
           Set f = .UsedRange.Find(what:=.Range("F7"), LookIn:=xlValues, lookat:=xlWhole)
           If Not f Is Nothing Then f.Offset(, 1) = "gechecked"
       End With
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu deinem Excel-Blatt.

  5. Wähle die Zelle F7 aus und führe das Makro aus, um zu sehen, wie der Wert aus der Zelle ausgelesen und in die Nachbarzelle geschrieben wird.


Häufige Fehler und Lösungen

  • Fehler: "Laufzeitfehler 1004"
    Ursache: Der Wert in F7 wurde nicht gefunden.
    Lösung: Stelle sicher, dass der Wert in der Dropdown-Liste auch im Suchbereich vorhanden ist.

  • Fehler: "Objektvariable nicht festgelegt"
    Ursache: Der Suchbereich wurde nicht korrekt definiert.
    Lösung: Verwende Set f = .Columns(1).Find(...), um den Suchbereich auf die erste Spalte einzuschränken.


Alternative Methoden

Falls du keinen VBA-Code verwenden möchtest, kannst du auch die Excel-Funktion SVERWEIS nutzen. Hier ist ein Beispiel:

  1. Angenommen, du hast eine Liste von Maschinen in den Zellen A2:A4 und die zugehörigen Status in B2:B4.
  2. Verwende die folgende Formel in Zelle B7:

    =WENNFEHLER(SVERWEIS(F7, A2:B4, 2, FALSCH), "Nicht gefunden")

Diese Methode ist einfacher, erfordert jedoch, dass die Daten in einer bestimmten Struktur vorliegen.


Praktische Beispiele

  • Beispiel 1: Einfaches Auslesen
    Wenn in Zelle F7 "Maschine 2" steht und sich "Maschine 2" in A3 befindet, wird "gechecked" in B3 geschrieben.

  • Beispiel 2: Fortlaufende Einträge
    Um fortlaufend "gechecked" in die nächste Zelle zu schreiben, verwende den folgenden Code:

    Sub a()
       Dim f As Range
       With ActiveSheet
           Set f = .UsedRange.Find(what:=.Range("F7"), LookIn:=xlValues, lookat:=xlWhole)
           If Not f Is Nothing Then f.End(xlToRight).Offset(, 1) = "gechecked"
       End With
    End Sub

Tipps für Profis

  • Verwende Option Explicit: Füge am Anfang deines Moduls Option Explicit hinzu, um sicherzustellen, dass alle Variablen deklariert werden. Das hilft, Fehler zu vermeiden.

  • Nutze Kommentare: Schreibe Kommentare zu deinem Code, um die Funktionalität zu erklären. Dies erleichtert das Verständnis und die Wartung.

  • Optimierung des Suchbereichs: Beschränke den Suchbereich auf die Spalte, die du wirklich durchsuchen möchtest, um die Performance zu verbessern. Beispiel:

    Set f = .Columns("A").Find(what:=.Range("F7"), LookIn:=xlValues, lookat:=xlWhole)

FAQ: Häufige Fragen

1. Wie kann ich den Inhalt einer Zelle auslesen?
Du kannst den Inhalt einer Zelle einfach über Range("A1").Value auslesen.

2. Was ist der Unterschied zwischen Find und SVERWEIS?
Find durchsucht einen bestimmten Bereich nach einem Wert, während SVERWEIS eine gesamte Tabelle durchsucht und einen Wert zurückgibt.

3. Wie kann ich den Wert aus einer Zelle in eine andere Zelle schreiben?
Verwende die Zuweisung Range("B1").Value = Range("A1").Value, um den Wert von A1 in B1 zu kopieren.

4. Kann ich auch mehrere Zellen gleichzeitig bearbeiten?
Ja, du kannst Schleifen verwenden, um durch mehrere Zellen zu iterieren und sie entsprechend zu bearbeiten.

5. Wie kann ich sicherstellen, dass das Makro in der richtigen Arbeitsmappe läuft?
Verwende ThisWorkbook oder ActiveWorkbook, um sicherzustellen, dass das Makro in der gewünschten Datei ausgeführt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige