VBA: Wenn Wert in Zelle, schreibe Werte in Nachbarzellen

Moderator: ModerationP

VBA: Wenn Wert in Zelle, schreibe Werte in Nachbarzellen

Beitragvon xlssearcher » 28. Sep 2021, 02:22

Hallo zusammen,

ich hab schon öfters nach dem Fall gegooglet.
Habe auch einige Beispiele gefunden und bin mit dem Skript fast fertig.

Wenn in der Zelle A2
der Wert "01" vorkommt, dann soll es in B2 den Begriff "Wert X" schreiben und in C2 "muster@x.de" .
der Wert "02" vorkommt, dann soll es in B2 den Begriff "Wert Y" schreiben und in C2 "muster@y.de" .

Code: Alles auswählen
Sub DatenSchreiben()
Sheets("Tabelle1").Activate
Cells(2, 1).Select ' Zelle A5

Do Until ActiveCell.Value = ""
    If ActiveCell.Value = "01" Then ActiveCell.Offset(0, 1).Value = "Wert X"
    If ActiveCell.Value = "01" Then ActiveCell.Offset(0, 2).Value = "muster@x.de"
    If ActiveCell.Value = "02" Then ActiveCell.Offset(0, 1).Value = "Wert Y"
    If ActiveCell.Value = "02" Then ActiveCell.Offset(0, 2).Value = "muster@y.de"
    ActiveCell.Offset(1, 0).Select
    Loop
End Sub



Aber: Ich möchte es noch so ergänzen, dass immer wenn ein anderer Wert als 01 oder 02 vorkommt,
geschrieben wird: "Wert Z" bzw. muster@z.de

Das echte Skript hat natürlich deutlich mehr Fälle als oben, weshalb ich mit einem Makro arbeiten möchte.

Ich habe schon ewig rumprobiert, aber bekomme diese ELSE-Bedingung nicht formuliert.

Ein anderer Lösungsansatz wäre: Man schreibt als Default-Wert immer "Wert Z" bzw. muster@z.de und arbeitet dann mit CASE.
Aber das ist mir leider auch nicht gelungen.

Am besten wäre es, jemand hilft mir zu dem oben genannten Beispiel, wie man das um eine ELSE-Bedingung ergänzt, wenn ein anderer Wert drin vorkommt
und idealerweise noch um eine weitere Bedingung, was ist, wenn die Zelle leer ist.

Besten Dank im voraus für jede Hilfe.
xlssearcher
Neuling
 
Beiträge: 2
Registriert: 28. Sep 2021, 02:12

Re: VBA: Wenn Wert in Zelle, schreibe Werte in Nachbarzellen

Beitragvon @Mase » 28. Sep 2021, 06:49

Guten Morgen,

Code: Alles auswählen
Select Case ActiveCell.Value

  Case "01"
  '*** Dein Code im Fall "01"

  Case "02"
  '*** Dein Code im Fall "02"

  Case "Weitere Bedingungen"
  '*** Dein Code im Fall....

  Case Else
  '*** Dein Code; Wenn in allen anderen Fällen

End Select



Es lassen sich natürlich auch Zahlen oder ganze Zahlenbereiche prüfen.
Dazu riskier einen Blick in die Onlinehilfe.
https://docs.microsoft.com/de-de/office ... -statement

Deine Do-Loop-Schleife, kombiniert mit ActiveCell.Select, kann eleganter gelöst werden.
Dazu vorher den Bereich ermitteln und nur durch diesen Bereich schleifen.
Wenn die Dateistruktur bekannt wäre, könnte man Dir präziser darauf antworten. Aber sollte nur ein Vorschlag sein, war ja nicht Deine eigentliche Frage.


Eine AutoFilter-Alternative skizziert:

    Schleifenkopf (kopfgesteuert)

      Bedingung filtern
      Filtrat.Value = Wert
    Schleifenrumpf
@Mase
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 19
Registriert: 08. Sep 2021, 06:51

Re: VBA: Wenn Wert in Zelle, schreibe Werte in Nachbarzellen

Beitragvon xlssearcher » 28. Sep 2021, 07:22

Hallo Mase,

schon mal danke für die Hinweise.

Das Problem ist, dass ich in VBA nicht wirklich fit bin.

Ich hab es schon mal mit Case versucht, das Script funktioniert nicht mal richtig.

Gibt es keine Möglichkeit, das von mir gepostete Skript um eine ElseIf zu erweitern?
xlssearcher
Neuling
 
Beiträge: 2
Registriert: 28. Sep 2021, 02:12

Re: VBA: Wenn Wert in Zelle, schreibe Werte in Nachbarzellen

Beitragvon @Mase » 28. Sep 2021, 09:01

Ich hab es schon mal mit Case versucht, das Script funktioniert nicht mal richtig.


Noch besser wäre gewesen, Deinen Gehversuch in Code zu posten. So bleibt mir als Antwort nur Schade übrig.

Gibt es keine Möglichkeit, das von mir gepostete Skript um eine ElseIf zu erweitern?


Doch schon. Bei den gegebenen Möglichkeiten würde Ich es so aber nicht lösen.
Da Du es unbedingt so haben möchtest, kannst es dann bei folgendem ableiten:

Skizze:
Code: Alles auswählen
IF (Bedingung=Wahr) Then
 '***Dein Code

ELSEIF (AndereBedingung=Wahr) Then
 '*** Dein anderer Code

ELSEIF (NochNeAndereBedingung=Wahr) Then
 '*** wieder ein anderer Code

ELSE
 '*** Dieser ELSE-Zweig kann, muss aber nicht zwingend

END IF
@Mase
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 19
Registriert: 08. Sep 2021, 06:51

Re: VBA: Wenn Wert in Zelle, schreibe Werte in Nachbarzellen

Beitragvon DerHoepp » 28. Sep 2021, 09:05

Moin,

warum machst du das nicht viel einfacher mit einer simplen Lookup-Formel? Dann brauchst du in VBA kein bisschen fit zu sein. Ein normaler SVerweis()/Index(Vergleich()) genügt.

Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9727
Registriert: 14. Mai 2013, 11:08

Re: VBA: Wenn Wert in Zelle, schreibe Werte in Nachbarzellen

Beitragvon totti36 » 28. Sep 2021, 15:29

Hallo Experten,

ich habe nichts passenderes im Forum gefunden, daher versuche ich es hier einmal. Allerdings will ich nichts in die Nachbarzelle schreiben, ich will mit dem Wert der (Nachbar-)Nachbarzelle rechnen. Ich habe ein Beispiel angehängt.
Ich muss mit dem Prozentwert (gelb markiert), der vor der letzten ausgefüllten Spalte mit einem Ist-Wert steht, weiterrechnen. Also quasi "suche den letzten Ist-Wert je Zeile, gehe 2 nach links und rechne damit weiter". Das Datum wird nach rechts - je Zeile - immer größer, das würde ich mit max() finden. Ich weiß aber nicht, wie ich 2 nach links komme. Kann mir da jemand einen Tipp geben? Ohne VBA!

Das Ergebnis soll in Spalte AA ausgegeben werden.

Gruß
totti36
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
totti36
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 12
Registriert: 02. Jan 2021, 14:07

Re: VBA: Wenn Wert in Zelle, schreibe Werte in Nachbarzellen

Beitragvon HKindler » 28. Sep 2021, 18:03

Hi,

{=INDEX(2:2;;MIN(WENN(H2:AB2="";SPALTE(H2:AB2)))-5)}
Die {} nicht mit eingeben. Bei älteren Excel-Versionen diese Formel mit Strg-Shift-Enter abschließen.

Die Formel liefert dir den Prozentwert der zum letzten Ist-Eintrag der Zeile 2 gehört. Dabei ermittelt der Teil mit MIN() die erste Spalte ohne Eintrag. Wichtig ist, dass nach dem letztmöglichen Ist noch zwei ausgefüllte Spalten und dann eine leere Spalte kommen. Das ist bei dir gegeben. Wenn nicht - und man es auch nicht ändern kann, dann wird die Formel komplizierter, da die letzte Spalte dann getrennt behandelt werden muss.
Ist die Spalte ohne Eintrag gefunden, dann wird davon 5 abgezogen, denn der Prozentwert der letzten Ist-Eintragung liegt fünf Spalten weiter links. INDEX(2:2;;Spalte) liefert dann den Inhalt von Spalte.
Gruß,
Helmut

----------------------------
Windows 10 Enterprise (64 Bit) / Office 365 ProPlus (32 Bit)
Benutzeravatar
HKindler
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 6308
Registriert: 04. Jul 2013, 09:02
Wohnort: Schwarzwald


Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 24 Gäste