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-ID: 256757

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

Ausgedruckt am: 26.11.2024 um 14:11 Uhr

colinardo
Lösung colinardo 05.12.2014, aktualisiert am 08.12.2014 um 19:39:47 Uhr
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
rubberman
rubberman 05.12.2014 um 18:59:49 Uhr
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
colinardo
colinardo 05.12.2014 aktualisiert um 19:11:55 Uhr
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
116301
116301 06.12.2014 um 12:15:11 Uhr
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
rubberman
rubberman 06.12.2014 um 17:52:30 Uhr
Goto Top
Hallo Dieter,

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

Grüße
rubberman
fireless
fireless 08.12.2014 aktualisiert um 19:44:02 Uhr
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