fireless
Goto Top

Excel VBA Makro, WENN Zellenwert, dann Zellen verbinden

Hallo,

ich verzweilfe an einem Makro.. Ich will folgendes machen
Per Drop-Down-Menü kann man auswählen: "Arbeitszeit" oder "Materialkosten"

Wenn nun "Materialkosten" im Drop-Down-menü ausgewählt wird, dann sollen sich die Zellen H35:M35 automatisch verbinden...sodass hier ein Text eingegeben werden kann. =WENN(D35="Materialkosten";Makro1;0))

Wäre Top wenn jemand eine Lösung für mich hat!!!! Danke face-smile

Gruß
fireless

Content-Key: 256757

Url: https://administrator.de/contentid/256757

Printed on: April 25, 2024 at 08:04 o'clock

Member: colinardo
Solution colinardo Dec 04, 2014, updated at Dec 08, 2014 at 18:39:47 (UTC)
Goto Top
Hallo fireless,
das ganze in den Codeabschnitt des entsprechenden Worksheets kopiert (Wichtig: Es darf nicht in ein Makro-Modul kopiert werden, sonst funktioniert das Change-Event nicht!)
Private Sub Worksheet_Change(ByVal Target As Range)
  With ActiveSheet
    Set rngSource = .Range("D35")  
    If Not Application.Intersect(rngSource, Target) Is Nothing Then
        If rngSource.Value = "Materialkosten" Then  
            .Range("H35:M35").Merge  
        Else
            .Range("H35:M35").UnMerge  
        End If
    End If
  End With
End Sub

=WENN(D35="Materialkosten";Makro1;0)
Das was du hier vorhast funktioniert deswegen nur beschränkt, weil Funktionen die in Formeln benutzt werden sollen, keine anderen Zellen verändern dürfen!
Siehe http://www.cpearson.com/excel/differen.htm

Obiges Makro nutzt deshalb ein Ereignis das Auftritt sobald sich eine Zelle auf dem Arbeitsblatt ändert. Es vergleicht dann ob die Zelle D35 verändert wurde, und wenn ja ob sie den Inhalt "Materialkosten" hat. Zusâtzlich wird geprüft ob der Bereich schon "gemerged" ist und wenn nicht, wird er zu einer Zelle zusammengefasst.

Grüße Uwe
Member: rubberman
rubberman Dec 05, 2014 at 17:59:49 (UTC)
Goto Top
Hallo Uwe.

Ich bin völlig bei deiner Lösung, aber ...
... weil Funktionen die in Formeln benutzt werden sollen, keine anderen Zellen verändern dürfen! ...
... nee. Just For Fun (in einem Standardmodul):
Option Explicit

Public Function merge(ByRef rng As Range) As String
    Application.Volatile
    rng.merge
    merge = ""  
End Function

Public Function unmerge(ByRef rng As Range) As String
    Application.Volatile
    rng.unmerge
    unmerge = ""  
End Function
In der Tabelle (z.B. C35):
=WENN(D35="Materialkosten";merge(H35:M35);unmerge(H35:M35))
Getestet auf den beiden nicht mehr taufrischen Versionen 2003 und 2007.

@fireless
Das ist alles andere als Best Practice und du solltest definitiv Uwes Vorschlag vorziehen. Du verbaust dir eine Zelle, die du für nichts anderes nutzen kannst, als für die Formel. Macht man nicht, aber entgegen der Erwartungen dass Excel das nicht zulässt, funktioniert so etwas doch.

Grüße
rubberman
Member: colinardo
colinardo Dec 05, 2014 updated at 18:11:55 (UTC)
Goto Top
Das ist alles andere als Best Practice
Yip face-smile deswegen wollte ich es ihm auch gar nicht erst zeigen ... nun erfährt ers dann doch face-wink

Grüße Uwe
Mitglied: 116301
116301 Dec 06, 2014 at 11:15:11 (UTC)
Goto Top
Hallo rubberman!

Getestet auf den beiden nicht mehr taufrischen Versionen 2003 und 2007.

Getestet in Excel 2013 funktioniert es nicht. Steigt beim <rng.merge> aus, bringt den Fehler '#WERT' und verbunden wird nix...face-wink

Grüße Dieter
Member: rubberman
rubberman Dec 06, 2014 at 16:52:30 (UTC)
Goto Top
Hallo Dieter,

dann ist ja mittlerweile alles wie es eigentlich sein sollte face-wink

Grüße
rubberman
Member: fireless
fireless Dec 08, 2014 updated at 18:44:02 (UTC)
Goto Top
Hi Uwe,
wow! Vielen vielen Dank für die Lösung!!! face-smile

Macht genau das was ich wollte! Wenn das für mich immer nur so einfach wäre face-big-smile! Jetzt leuchtet mir auch alles ein...

Nochmals 1000x Danke!

War die letzen Tage leider offline... Vielen Dank auch an alle beteiligten @rubberman , @116301 !!!

Grüße und eine schöne Woche,

fireless