Microsoft Excel

Herbers Excel/VBA-Archiv

Bedingung erfüllt und rein kopieren

Betrifft: Bedingung erfüllt und rein kopieren von: wayan daniel
Geschrieben am: 17.09.2020 23:46:04

Guten Abend zusammen,

ich habe eine ``kleine´´ Aufgabe bekommen und habe sogar meinen ehemaligen Excel Dozenten gefragt und der konnte mir leider auch nicht weiter helfen, also versuche ich hier mein Glück. Also folgende Aufgabenstellung:

Ich habe 2 verschiedene Worksheets, in dem ersten habe ich 4 verschiedene Sorten: Banane, Äpfel, Kirsche und Beere. Im 2. Worksheet habe ich zu jeder Frucht mehrere Eigenschaften. Diese Eigenschaften sollen im 1. Sheet angezeigt werden, wenn die jeweilige Frucht im Dropdown mit Ja ausgewählt worden ist, bei einem Nein, soll von dieser Frucht gar nichts angezeigt werden.

Hiermit habe ich schon mein Glück versucht, leider klappt es (noch) nicht, arbeite auch jetzt zum ersten mal mit VBA.

(

Sub Anzeigen()


Dim Banane As String
Dim Apfel As String
Dim Kirsche As String
Dim Beere As String

Worksheets("Zutaten").Select

If Cells(13, 3).Value = Ja Then
Banane = Range("Bereich1")
ElseIf Cells(14, 3).Value = Ja Then
Apfel = Range("Bereich2")
ElseIf Cells(15, 3).Value = Ja Then
Kirsche = Range("Bereich3")
ElseIf Cells(16, 3).Value = Ja Then
Beere = Range("Bereich4")

End If


ActiveCell.Offset(1, 0).Select
ActiveCell.Value = Frucht
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = Hinweistext
    


End Sub
VIELEN DANK SCHON MAL IM VORRAUS

Betrifft: Crossposting
von: SF
Geschrieben am: 18.09.2020 00:31:34

https://www.ms-office-forum.net/forum/showthread.php?t=370049

Betrifft: AW: Bedingung erfüllt und rein kopieren
von: Klaus M.
Geschrieben am: 18.09.2020 09:41:19

Ohne VBA.

für die Banane:
=WENN(C13="ja";SVERWEIS("Banane";Bereich1;[SpaltenindexFrucht];)&SVERWEIS("Banane";Bereich1; [SpaltenindexHinweis];);"")

Statt "Banane" kannst du natürlich eine Zelle referenzieren. Da du in VBA Range("Bereich1") schreibst gehe ich davon aus das ist ein bekannter Bereich, der funktioniert dann auch in Formeln. Den Spaltenindex kann ich nicht kennen, der ist aber höchst wahrscheinlich 2 und 3.

Zu deinem VBA:
Du musst ein Worksheet nicht selektieren, um es zu referenzieren. Geht eleganter so (beachte die Punkte vor dem Range):
 
With Worksheets("Zutaten")
 If .Cells(13, 3).Value = "Ja" Then
    Banane = .Range("Bereich1").Value
 ElseIf .Cells(14, 3).Value = "Ja" Then
    Apfel = .Range("Bereich2").Value
 End If
End With
Außerdem habe ich die Werte "Ja" in Anführungsstriche gesetzt - denn du fragst ja ab, ob in C13 das Wort "Ja" steht. Ohne Anführungsstriche ist es eine Variable!

Die Zuordnung
Apfel = .Range("Bereich2").Value
habe ich um .Value ergänzt. Das ist zwar im Prinzip nicht notwendig da .Value die Standardbelegung von RANGE ist, macht den Code aber übersichtlicher und verständlicher. Gewöhn dir das lieber früh an!

Unten versuchst du "activecell" zu selektieren. Das kann aber nicht klappen, da du vorher per Select das Worksheet gewechselt hast. Woher weisst du, auf welcher Zelle im neuen Worksheet das landet?
Mit dem oben gezeigten Trick (With ...) könnte das klappen, solange du ActiveCell.select hinter das EndWith schreibst. Mit erschließt sich aber nicht was du damit wilst, denn der Variable "Frucht" welche du in offset(1,0) schreiben willst ist gar kein Wert zugewiesen, genau genommen ist sie nichtmal deklariert (was Option Explicit gezeigt hätte, benutze es).

Zuletzt: Select ist nicht nötig, statt
 
 ActiveCell.Offset(1, 0).Select
 ActiveCell.Value = Frucht
 ActiveCell.Offset(0, 1).Select
 ActiveCell.Value = Hinweistext
 

besser:
 ActiveCell.Offset(1,0).value = Frucht
 ActiveCell.Offset(2,0).value = Hinweistext
So ... und die 20€ Crosspostingbeitrag spendest du bitte in meinem Namen an die SOS Kinderdörfer.

LG,
Klaus

Betrifft: AW: Bedingung erfüllt und rein kopieren
von: ralf_b
Geschrieben am: 18.09.2020 12:18:48

@TE : wenn das eine "kleine" Aufgabe ist und du damit nicht klar kommst, dann würde ich mich fragen ob ich dort gut aufgehoben bin. Mann kann nur hoffen, das dein Chef nicht mitliest.

zum Lösungsvorschlag von Klaus.... is mir beim neugierig Gucken aufgefallen. Sorry Klaus
 ActiveCell.Offset(1,0).value = Frucht
 ActiveCell.Offset(2,0).value = Hinweistext

 ActiveCell.Offset(1,0).value = Frucht
 ActiveCell.Offset(1,1).value = Hinweistext

und... da du "Bereich 1" als mehrere Eigenschaften beschreibst, wird eine Zuweisung mit .Value evtl. nicht klappen. Bei mehreren Zellen beißt sich das.

da sind noch einige unklare Dinge. Wie wärs mit ne Beispielmappe für uns? Deine Ohrfeigen wegen dem Crossposting hast du ja schon weg.

Beiträge aus dem Excel-Forum zum Thema "Bedingung erfüllt und rein kopieren"