Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1112to1116
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Wenn Dann Funktion
Thomas
Hallo,
ich habe ein Problem bei dem ich leider nicht weiterkomme, daher meine Frage an die Profis.
Ich möchte per Makro folgendes ausführen:
Spalte B - C - und D enthalten Text in C und D unter anderem das Wort 'Zubehör'
In Spalte E sollen folgende Werte stehen:
Wenn Spalte B = Text und C und D ist leer dann soll in E der Text von B stehen
Wenn Spalte B = Text und C = Text und D ist leer dann soll in E der Text von C stehen
ist der Text in C aber 'Zubehör' dann soll in E der Text von B + C stehen
Wenn Spalte B = Text und C = Text und D = Text dann soll in E der Text von D stehen
ist der Text in D aber 'Zubehör' dann soll in E der Text von C + D stehen
Userbild
Ich hoffe ich habe es einigermaßen verständlich erklärt - ich habe es mal als Bild mit hochgeladen - weil ich Blick gerade überhaupt nicht mehr durch.
Es wäre nett wenn Ihr mal nen Blick riskiert.
Gruß
Thomas

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Wenn Dann Funktion
09.11.2009 21:16:15
Jens
Hallo
In E1:
=WENN(UND(B1"";C1="";D1="");F1;WENN(UND(B1"";C1"";C1"Zubehör";D1="";C1);C1;WENN(UND(B1""; C1"";C1="Zubehör";D1="");B1&" "&C1;WENN(UND(B1"";C1"";D1"";D1"Zubehör");D1;WENN(UND(B1""; C1"";D1"";D1="Zubehör");C1&" "&D1)))))
Geht evtl. noch kürzer (?)...
Gruß Jens
AW: Wenn Dann Funktion
09.11.2009 22:46:15
Thomas
Hallo Jens,
Hallo Roland,
merci schon mal für eure Hilfe.
Habs mit den zwei Vorschlägen versucht.
Bei dem Vorschlag von Roland schläft der PC ein :) - sind knapp 64.000 Zeilen darum tendiere ich eher zu der Formel von Jens.
Einen kleinen Fehler hat diese Formel - wenn B = Text und C und D ist leer dann zeigt er eine 0 als Wert in der Spalte E - soll aber der Text von B sein.
-------
und noch was ist mir aufgefallen wo ich Hilfe bräuchte - wie kann hier bei Replacement die Werte der Spalte C zuweisen?
Columns("D:D").Select
Selection.Replace What:="=", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Gruß
Thomas
Anzeige
AW: Wenn Dann Funktion
09.11.2009 23:01:01
Jens
Hallo
Sry, mein Fehler:
=WENN(UND(B1"";C1="";D1="");E1;WENN......
Gruß aus dem Sauerland
Jens
AW: Wenn Dann Funktion
09.11.2009 23:29:22
Thomas
Hallo Jens,
merci - ich denke jetzt hab ichs
=WENN(UND(B1"";C1="";D1="");B1;WENN........
Nü dann komm ich ja langsam weiter :)
Kannste mir hier evtl. noch unter die Arme greifen
Columns("D:D").Select
Selection.Replace What:="=", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
und zwar wollte ich die = Zeichen durch die Werte in der Spalte C ersetzen.
Heißt wenn in der Spalte D in der Zeile z.B. 26 bei einem Text ein = Zeichen davor ist wollte ich es mit dem Wert aus der Spalte C Zeile 26 ersetzen.
Gruß aus dem Frankenland
Thomas
Anzeige
AW: Wenn Dann Funktion
10.11.2009 04:51:12
Jens
Hallo Thomas
Stehen die "=" immer links?
Saind das "="-Zeichen einer Formel?
Kannst Du da mal einige Beispiele aufzeigen?
Gruß Jens
AW: Wenn Dann Funktion
10.11.2009 07:28:36
Thomas
Moin Jens,
in die Zeile D importiert mir Excel die Wert -R +R +RW -RAM immer mit dem = Zeichen am Anfang.
Habe schon versucht die Zellen zu formatieren - hatte aber keine Erfolg.
Und nü wollte ich es über suchen und ersetzen machen z.B. = durch 'DVD' (wäre der Wert von Spalte C ) ersetzen - wäre keine Problem - geht - aber ich habe in Spalte C auch den Wert 'CD' - und schon komme ich mit dem suchen ersetzen nicht weiter :(
Habs mal versucht anhand eines Excelauschnittes zu verdeutlichen
Userbild
Gruß
Thomas
Anzeige
AW: Wenn Dann Funktion
10.11.2009 14:51:51
Jens
Hallo Thomas
Da Du die Daten importierst, wird bei "-" und "+" von Excel vermutet, dass es sich um eine Formel handelt.
Formatiere die Spalte vorher als Text und importiere dann die Daten.
Gruß aus dem Sauerland
Jens
AW: Wenn Dann Funktion
10.11.2009 19:13:07
Thomas
Hallo Jens,
meci für den Hinweis - habs hinbekommen.
Kleinigkeit ( für Dich ) für mich unmöglich :)
Kann man das noch mit in Deine Formel
=WENN(UND(B1"";C1="";D1="");F1;WENN(UND(B1"";C1"";C1"Zubehör";D1="";C1);C1;WENN(UND(B1""; C1"";C1="Zubehör";D1="");B1&" "&C1;WENN(UND(B1"";C1"";D1"";D1"Zubehör");D1; WENN(UND(B1""; C1"";D1"";D1="Zubehör");C1&" "&D1)))))
einbauen:
wenn diese Werte
+R
+R9 (Double Layer)
+RW
-R
-R9 (Double Layer)
RAM
in Spalte D stehen, sollen die Werte der Spalte C vor den Werten der Spalte D eingefügt werden.
Sieht dann aus wie auf dem Bild in Spalte F dargestellt.
Habs versucht bekomme es aber nicht hin.
Gruß
Thomas
Anzeige
AW: Wenn Dann Funktion
11.11.2009 01:42:01
Jens
Hallo Thomas
In die Spalte D kannst Du das nicht als Formel einsetzen, da nach dem Datenimport die Formel überschreiben wird.
Workaround:
Füge eine zusätzliche Spalte ein und dann diese Formel:
=WENN(oder(C2="+R";C2="-R";C2="+R9 (Double Layer)";C2="-R9 (Double Layer)";C2="+RW";C2="RAM");C2&D2; D2)
Dann die Spalte D ausblenden.
Wäre aber auch per Makro möglich.
Vielleicht sollte man da aber auch direkt beim Datenimport ansetzen.
Gruß aus dem Sauerland
Jens
AW: Wenn Dann Funktion
13.11.2009 22:56:01
Thomas
Hallo Jens,
merci nochmal für die Hilfe.
Ich denke ich muß mit der Preisliste nochmal von vorne anfangen und schon beim Import einiges ändern.
Gruß und ein schönes Wochenende
Thomas
Anzeige
AW: Wenn Dann Funktion
09.11.2009 21:53:01
Roland
Und in VBA sieht´s noch grausamer aus:
Sub Ergänzen()
Const strC As String = "Zubehör"
Dim l As Long
With ActiveSheet
For l = 1 To .UsedRange.Rows.Count
If Len(Trim$(.Cells(l, 2).Value)) > 0 Then
If Len(Trim$(.Cells(l, 3).Value)) > 0 Then
If Len(Trim$(.Cells(l, 4).Value)) > 0 Then
If Trim$(.Cells(l, 4).Value) = strC Then
.Cells(l, 5).Value = Trim$(.Cells(l, 3).Value) & " " & _
Trim$(.Cells(l, 4).Value)
Else
.Cells(l, 5).Value = Trim$(.Cells(l, 4).Value)
End If
Else
.Cells(l, 5).Value = Trim$(.Cells(l, 2).Value) & " " & _
Trim$(.Cells(l, 3).Value)
End If
Else
If Len(Trim$(.Cells(l, 4).Value)) = 0 Then
.Cells(l, 5).Value = Trim$(.Cells(l, 2).Value)
Else
.Cells(l, 5).Value = "Fehler: Spalte C ist leer, aber Spalte D nicht!"
End If
End If
End If
Next
End With
End Sub
Gruß
Roland Hochhäuser
Anzeige
kannst mal testen
10.11.2009 10:02:13
Tino
Hallo,
meinst Du so?
Sub test()
Dim MeArWerte(), MeArAusgabe()
Dim A As Long
Dim LRowMax As Long

With Sheets("Tabelle1")
     LRowMax = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 2).End(xlUp).Row, .Rows.Count)
    
    
    'es wird davon ausgegangen, in Zeile 1 ist eine Überschrift 
    MeArWerte = .Range("B2:D" & LRowMax).Value2
    Redim Preserve MeArAusgabe(1 To Ubound(MeArWerte), 1 To 1)
    
    For A = 1 To Ubound(MeArWerte)
        If MeArWerte(A, 1) <> "" Then
            'Wenn Spalte B = Text und C und D ist leer dann soll in E der Text von B stehen 
            If MeArWerte(A, 1) <> "" And MeArWerte(A, 2) = "" And MeArWerte(A, 3) = "" Then
                MeArAusgabe(A, 1) = MeArWerte(A, 2)
            
            'Wenn Spalte B = Text und C = Text und D ist leer dann soll in E der Text von C stehen 
            'ist der Text in C aber 'Zubehör' dann soll in E der Text von B + C stehen 
            ElseIf MeArWerte(A, 1) <> "" And MeArWerte(A, 2) <> "" And MeArWerte(A, 3) = "" Then
                
                If MeArWerte(A, 2) = "Zubehör" Then
                 MeArAusgabe(A, 1) = MeArWerte(A, 1) & " " & MeArWerte(A, 2) 'B + C 
                Else
                 MeArAusgabe(A, 1) = MeArWerte(A, 2)
                End If
           
            'Wenn Spalte B = Text und C = Text und D = Text dann soll in E der Text von D stehen 
            'ist der Text in D aber 'Zubehör' dann soll in E der Text von C + D stehen 
            ElseIf MeArWerte(A, 1) <> "" And MeArWerte(A, 2) <> "" And MeArWerte(A, 3) <> "" Then
               
                If MeArWerte(A, 3) = "Zubehör" Then
                 MeArAusgabe(A, 1) = MeArWerte(A, 2) & " " & MeArWerte(A, 3) 'C + D 
                Else
                 MeArAusgabe(A, 1) = MeArWerte(A, 2) 'D 
                End If
            
            End If
         End If
    Next A
    
    .Range("E2").Resize(Ubound(MeArAusgabe)) = MeArAusgabe
End With
End Sub
Gruß Tino
Anzeige
kleine Korrektur...
10.11.2009 10:12:36
Tino
Hallo,
da wir in der ersten If schon B überprüfen ob was drin steht,
brauchen wir es in den anderen nicht nochmal prüfen.
Sub test()
Dim MeArWerte(), MeArAusgabe()
Dim A As Long
Dim LRowMax As Long

With Sheets("Tabelle1")
     LRowMax = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 2).End(xlUp).Row, .Rows.Count)
    
    
    'es wird davon ausgegangen, in Zeile 1 ist eine Überschrift 
    MeArWerte = .Range("B2:D" & LRowMax).Value2
    Redim Preserve MeArAusgabe(1 To Ubound(MeArWerte), 1 To 1)
    
    For A = 1 To Ubound(MeArWerte)
        'Wenn Spalte B = Text 
        If MeArWerte(A, 1) <> "" Then
            'Wenn C und D ist leer dann soll in E der Text von B stehen 
            If MeArWerte(A, 2) = "" And MeArWerte(A, 3) = "" Then
                MeArAusgabe(A, 1) = MeArWerte(A, 2)
            
            'Wenn C = Text und D ist leer dann soll in E der Text von C stehen 
            'ist der Text in C aber 'Zubehör' dann soll in E der Text von B + C stehen 
            ElseIf MeArWerte(A, 2) <> "" And MeArWerte(A, 3) = "" Then
                
                If MeArWerte(A, 2) = "Zubehör" Then
                 MeArAusgabe(A, 1) = MeArWerte(A, 1) & " " & MeArWerte(A, 2) 'B + C 
                Else
                 MeArAusgabe(A, 1) = MeArWerte(A, 2)
                End If
           
            'Wenn C = Text und D = Text dann soll in E der Text von D stehen 
            'ist der Text in D aber 'Zubehör' dann soll in E der Text von C + D stehen 
            ElseIf MeArWerte(A, 2) <> "" And MeArWerte(A, 3) <> "" Then
               
                If MeArWerte(A, 3) = "Zubehör" Then
                 MeArAusgabe(A, 1) = MeArWerte(A, 2) & " " & MeArWerte(A, 3) 'C + D 
                Else
                 MeArAusgabe(A, 1) = MeArWerte(A, 2) 'D 
                End If
            
            End If
         End If
    Next A
    
    .Range("E2").Resize(Ubound(MeArAusgabe)) = MeArAusgabe
End With
End Sub
Gruß Tino
Anzeige
AW: kleine Korrektur...
10.11.2009 21:52:41
Thomas
Hallo Tino,
danke für das Script - ich habe es aber mit der Formel von Jens gemacht - ist schneller als das Script.
Evtl. kannst Du mir bei dem Fehlendem noch helfen.
Wenn diese Werte
+R
+R9 (Double Layer)
+RW
-R
-R9 (Double Layer)
RAM
in Spalte D stehen, sollen die Werte der Spalte C vor den Werten der Spalte D eingefügt werden.
Das gewünschte Ergebnis habe ich mal in Spalte E dargestellt.
Userbild
Kannst Du mal einen Blick drauf werfen.
Merci
Gruß
Thomas
Anzeige
Zeile C und D verbinden.
11.11.2009 08:19:32
Tino
Hallo,
Du hast bestimmt meinen Code nicht getestet,
bei mir ist er gerade mal 0,1 Sekunden langsamer wie die Formellösung bei 65536 gefüllten Zeilen.
Normalerweise hätte ich diesen Code mit Deiner zweiten Frage verbunden, da Du aber die Formellösung vorziehst hier eine separate Lösung.
Sub Verbinden_C_D()
Dim A As Long
Dim LRowMax As Long
Dim MeArWerte(), MeArAusgabe()


With Sheets("Tabelle1")
    LRowMax = IIf(IsEmpty(.Cells(.Rows.Count, 3)), .Cells(.Rows.Count, 4).End(xlUp).Row, .Rows.Count)
  
    'es wird davon ausgegangen, in Zeile 1 ist eine Überschrift 
    MeArWerte = .Range("C1:D" & LRowMax).Value2
    Redim Preserve MeArAusgabe(1 To Ubound(MeArWerte), 1 To 1)
    
    For A = 1 To Ubound(MeArWerte)
     If InStr("RAM;+R;+R9 (Double Layer);+RW;-R;-R9 (Double Layer)", MeArWerte(A, 2)) > 0 Then
        MeArAusgabe(A, 1) = MeArWerte(A, 1) & " " & MeArWerte(A, 2)
     End If
    Next A
    
    .Range("D1").Resize(Ubound(MeArAusgabe)) = MeArAusgabe
End With
End Sub
Gruß Tino
AW: Zeile C und D verbinden.
13.11.2009 22:57:08
Thomas
Hallo Tino,
merci nochmal für die Hilfe.
Ich denke ich muß mit der Preisliste nochmal von vorne anfangen und schon beim Import einiges ändern.
Gruß und ein schönes Wochenende
Thomas

335 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige